{
  "contractName": "RToken",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "strategy",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "conversionRate",
          "type": "uint256"
        }
      ],
      "name": "AllocationStrategyChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newCode",
          "type": "address"
        }
      ],
      "name": "CodeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "oldHatID",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newHatID",
          "type": "uint256"
        }
      ],
      "name": "HatChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "HatCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "InterestPaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "hatId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isDistribution",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemableAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "internalSavingsAmount",
          "type": "uint256"
        }
      ],
      "name": "LoansTransferred",
      "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": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_NUM_HAT_RECIPIENTS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_UINT256",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PROPORTION_BASE",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SELF_HAT_ID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_guardCounter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "_owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "cumulativeInterest",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rInterest",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sInternalAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "hatStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "useCount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalLoans",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalInternalSavings",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ias",
      "outputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "savingAssetConversionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "savingAssetOrignalAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "transferAllowances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IAllocationStrategy",
          "name": "allocationStrategy",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "decimals_",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        }
      ],
      "name": "transferAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        }
      ],
      "name": "transferAllFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "mintWithSelectedHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "name": "mintWithNewHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "redeemAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "redeemTo",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "redeemAndTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "redeemTo",
          "type": "address"
        }
      ],
      "name": "redeemAndTransferAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        },
        {
          "internalType": "bool",
          "name": "doChangeHat",
          "type": "bool"
        }
      ],
      "name": "createHat",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "changeHat",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getMaximumHatID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getHatByAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "getHatByID",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint32[]",
          "name": "proportions",
          "type": "uint32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "receivedSavingsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "receivedLoanOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "interestPayableOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "payInterest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getGlobalStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "totalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSavingsAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.GlobalStats",
          "name": "",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getAccountStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "hatID",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rInterest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "sInternalAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rInterestPayable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cumulativeInterest",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lRecipientsSum",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.AccountStatsView",
          "name": "stats",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "getHatStats",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "useCount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalLoans",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSavings",
              "type": "uint256"
            }
          ],
          "internalType": "struct RTokenStructs.HatStatsView",
          "name": "stats",
          "type": "tuple"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentSavingStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSavingAssetBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "rAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sOriginalAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "allocationStrategy_",
          "type": "address"
        }
      ],
      "name": "changeAllocationStrategy",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentAllocationStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "allocationStrategy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "hatID",
          "type": "uint256"
        }
      ],
      "name": "changeHatFor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newCode",
          "type": "address"
        }
      ],
      "name": "updateCode",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"conversionRate\",\"type\":\"uint256\"}],\"name\":\"AllocationStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newCode\",\"type\":\"address\"}],\"name\":\"CodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldHatID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newHatID\",\"type\":\"uint256\"}],\"name\":\"HatChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"HatCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InterestPaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hatId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isDistribution\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemableAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"internalSavingsAmount\",\"type\":\"uint256\"}],\"name\":\"LoansTransferred\",\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"INITIAL_SAVING_ASSET_CONVERSION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_NUM_HAT_RECIPIENTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_UINT256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PROPORTION_BASE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SELF_HAT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_guardCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"accountStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cumulativeInterest\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"accounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sInternalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"allocationStrategy_\",\"type\":\"address\"}],\"name\":\"changeAllocationStrategy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"changeHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"changeHatFor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"},{\"internalType\":\"bool\",\"name\":\"doChangeHat\",\"type\":\"bool\"}],\"name\":\"createHat\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getAccountStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sInternalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rInterestPayable\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lRecipientsSum\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.AccountStatsView\",\"name\":\"stats\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentAllocationStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"allocationStrategy\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentSavingStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getGlobalStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSavingsAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.GlobalStats\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getHatByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"getHatByID\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"getHatStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"useCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLoans\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSavings\",\"type\":\"uint256\"}],\"internalType\":\"struct RTokenStructs.HatStatsView\",\"name\":\"stats\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMaximumHatID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSavingAssetBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sOriginalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"hatStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"useCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalLoans\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalInternalSavings\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ias\",\"outputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IAllocationStrategy\",\"name\":\"allocationStrategy\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals_\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"interestPayableOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"proportions\",\"type\":\"uint32[]\"}],\"name\":\"mintWithNewHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hatID\",\"type\":\"uint256\"}],\"name\":\"mintWithSelectedHat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"payInterest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"receivedLoanOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"receivedSavingsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeemAndTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"redeemTo\",\"type\":\"address\"}],\"name\":\"redeemAndTransferAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savingAssetConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savingAssetOrignalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"transferAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"}],\"name\":\"transferAllFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"transferAllowances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCode\",\"type\":\"address\"}],\"name\":\"updateCode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"changeAllocationStrategy(address)\":{\"details\":\"IRToken.changeAllocationStrategy implementation\"},\"changeHat(uint256)\":{\"details\":\"IRToken.changeHat implementation\"},\"changeHatFor(address,uint256)\":{\"details\":\"IRToken.changeHatFor implementation\"},\"createHat(address[],uint32[],bool)\":{\"details\":\"IRToken.createHat implementation\"},\"getAccountStats(address)\":{\"details\":\"IRToken.getAccountStats implementation\"},\"getCurrentAllocationStrategy()\":{\"details\":\"IRToken.changeHatFor implementation\"},\"getCurrentSavingStrategy()\":{\"details\":\"IRToken.getCurrentSavingStrategy implementation\"},\"getGlobalStats()\":{\"details\":\"IRToken.getAccountStats implementation!1\"},\"getHatByAddress(address)\":{\"details\":\"IRToken.getHatByAddress implementation\"},\"getHatByID(uint256)\":{\"details\":\"IRToken.getHatByID implementation\"},\"getHatStats(uint256)\":{\"details\":\"IRToken.getHatStats implementation\"},\"getMaximumHatID()\":{\"details\":\"IRToken.getMaximumHatID implementation\"},\"getSavingAssetBalance()\":{\"details\":\"IRToken.getSavingAssetBalance implementation\"},\"interestPayableOf(address)\":{\"details\":\"IRToken.interestPayableOf implementation\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"mint(uint256)\":{\"details\":\"IRToken.mint implementation\"},\"mintWithNewHat(uint256,address[],uint32[])\":{\"details\":\"IRToken.mintWithNewHat implementation\"},\"mintWithSelectedHat(uint256,uint256)\":{\"details\":\"IRToken.mintWithSelectedHat implementation\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"payInterest(address)\":{\"details\":\"IRToken.payInterest implementation\"},\"receivedLoanOf(address)\":{\"details\":\"IRToken.receivedLoanOf implementation\"},\"receivedSavingsOf(address)\":{\"details\":\"IRToken.receivedSavingsOf implementation\"},\"redeem(uint256)\":{\"details\":\"IRToken.redeem implementation     It withdraws equal amount of initially supplied underlying assets\"},\"redeemAll()\":{\"details\":\"IRToken.redeemAll implementation\"},\"redeemAndTransfer(address,uint256)\":{\"details\":\"IRToken.redeemAndTransfer implementation\"},\"redeemAndTransferAll(address)\":{\"details\":\"IRToken.redeemAndTransferAll implementation\"},\"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.\"},\"transferAll(address)\":{\"details\":\"IRToken.transferAll implementation\"},\"transferAllFrom(address,address)\":{\"details\":\"IRToken.transferAllFrom implementation\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateCode(address)\":{\"details\":\"Update the rToken logic contract code\"}}},\"userdoc\":{\"methods\":{\"allowance(address,address)\":{\"notice\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default.     * This value changes when `approve` or `transferFrom` are called.\"},\"approve(address,uint256)\":{\"notice\":\"Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an `Approval` event.\"},\"balanceOf(address)\":{\"notice\":\"Returns the amount of tokens owned by `account`.\"},\"initialize(address,string,string,uint256)\":{\"notice\":\"Create rToken linked with cToken at `cToken_`\"},\"transfer(address,uint256)\":{\"notice\":\"Moves `amount` tokens from the caller's account to `dst`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event. May also emit `InterestPaid` event.\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event.\"}},\"notice\":\"RToken an ERC20 token that is 1:1 redeemable to its underlying ERC20 token.\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol\":\"RToken\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IAllocationStrategy.sol\":{\"keccak256\":\"0xe6771d9a3f2c4719d6b2c60cd8abf03686d8cdddf5d359ccf7ab58d17d9e1380\",\"urls\":[\"bzz-raw://80f212859923c044b4ef360dc19776149f2aacbb27c994f6b76b9cc8260a41f7\",\"dweb:/ipfs/QmWPsojno4n63Drh9WvBtCM89aovwDuabHppDh1LVgmgkY\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRToken.sol\":{\"keccak256\":\"0xa7e01f9f70c505d624fe31e53b6b766d0d476c2851fadc1c3e3e19b779b4d2fc\",\"urls\":[\"bzz-raw://417316c44a1591fd07c2254097f98fd4ac0bc352e7035cf57f9df9c22ebde63c\",\"dweb:/ipfs/QmVoRFAMjS7GSjtLCoZJsqXCKygqVW7oas9X1G1WrMNZmE\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRTokenAdmin.sol\":{\"keccak256\":\"0x25dba438823ddf59003f7963b49cb3e7c1105e62c19126ccc99aeb39b02c59f9\",\"urls\":[\"bzz-raw://53c52647440910aa820fe4d0ad6a358faf4a6f80562fa0d6cb87b5a22c6fbed8\",\"dweb:/ipfs/QmVFpJKMQpFymdK22v4b4NQcs5yWEN3urTtnRkHFoideNx\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/LibraryLock.sol\":{\"keccak256\":\"0x9195f8c96fd7bb4cdd7696f14c15ff7cece01eca84a38de25693bf45318b018f\",\"urls\":[\"bzz-raw://0bd72dac7bb67467446ddea9fa47c79f9b48ce2c528cbab8fd05bdc19537cbd2\",\"dweb:/ipfs/QmSHK5T1927rf6T7xjRaQMuo1gpPaLVHb947pvPTHwXcwj\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Ownable.sol\":{\"keccak256\":\"0xd2568237b51a02b9d1a1b143b938f664988828145f11d0d0acc44a832803f882\",\"urls\":[\"bzz-raw://4371b65f807c88fb73f3a691ade6ccdc556a28e0f63a8133f011c1f7054c7ffc\",\"dweb:/ipfs/QmVCZSEccoWe9BNFknDXjJviZbGrCUbs32bcwea9jtzpWA\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Proxiable.sol\":{\"keccak256\":\"0xd14d0d1ae8b8ed59af55ac901ec2a60d1087ab7e86fbd389758baf6afb35721f\",\"urls\":[\"bzz-raw://bf892b136580d5241a54c68a942b2e23f0f321700fa1aacd16e0fdb5f01a1ced\",\"dweb:/ipfs/QmRUXF7yXBJVRwqv11dDxWqt8DEJXn3YMWRUZv8escF5ya\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol\":{\"keccak256\":\"0x50016dfcaf825f6a63785635129399429615a3dbda6d668f17fa7034e6bde634\",\"urls\":[\"bzz-raw://b31879e7e8e36197e54c6e8b85b91ac0c61acf5eae05c27a3f995b6c0dd18b82\",\"dweb:/ipfs/QmPJU3oAe6FzjmWZWDa5oiPGTCq9yi681jwxvJkHWjf56i\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStorage.sol\":{\"keccak256\":\"0x2879364f6e821d6d136ec4dc1d70a9ab47f5cecfff5c117d86cce5b5f9e4d79c\",\"urls\":[\"bzz-raw://30a1e2a903b3efdf921270a53f6da3dcbed9a72dd7a63fafc66520c612b52450\",\"dweb:/ipfs/QmPnV6yWW1nCbdXH1nU22wRPRxzUDDr1S6mFhWaoz5fvCR\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStructs.sol\":{\"keccak256\":\"0x5c7c3b26d2f6f8fd489b2a326d4658f67e1f4e3cbe03c3a6831dd5103ead41e0\",\"urls\":[\"bzz-raw://991d8988992e169e0faa0d57f16684cc190b33a5b4e028993c9f74f158a8a16d\",\"dweb:/ipfs/QmVYKkdVLb2yuhDx7fMTY8UNFrskX2w3eSyLMnvoBVD3yU\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x447761b97eb2e13c2a44d868b1e4afd8127c6bfdea4bfbf642cfadd0b106b93b\",\"urls\":[\"bzz-raw://28a8e50952dad7e86a30ec746434adb8b7ed70249488508ead4f271a6f61e74e\",\"dweb:/ipfs/QmNmJkH3DKcQsD9ZRUWzeojLNvgjn8TNVtHkbDRy35X8RY\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}",
  "bytecode": "0x60806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a361477d806100576000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80636b4169c3116101e9578063bf5bfdfb1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b314610739578063f2fde38b1461075b578063fc0c546a1461076e578063fdbbf8ac1461077657610399565b8063d8884795146106f5578063db006a751461070b578063dd62ed3e1461071e578063e192782b1461073157610399565b8063c200659e116100e9578063c200659e146106b4578063d007c644146106bc578063d271be3f146106cf578063d3ac25c4146106e257610399565b8063bf5bfdfb146106ac578063c034d0db146104ea578063c1a2007d1461042657610399565b80638da5cb5b11610187578063a3a7e7f311610156578063a3a7e7f31461066b578063a9059cbb1461067e578063b2bdfa7b14610691578063b5dbfc1a1461069957610399565b80638da5cb5b146106405780638f32d59b1461064857806395d89b4114610650578063a0712d681461065857610399565b806371ee46eb116101c357806371ee46eb1461061257806377ede0511461061a57806381c8d895146103c757806384d4b4101461062d57610399565b80636b4169c3146105e257806370a08231146105f7578063715018a61461060a57610399565b80632f4350c2116102ce578063496cc1641161026c578063556043ef1161023b578063556043ef146105835780635cde5055146105985780635e5c06e2146105ab57806363152a50146105cf57610399565b8063496cc164146105355780634d12d4b6146105485780634fd7c0dd1461055b57806352d1902d1461057b57610399565b8063388c0b8c116102a8578063388c0b8c146104f25780633e20a92914610505578063469519541461050d5780634929fbf71461052257610399565b80632f4350c2146104da578063313ce567146104e257806333a581d2146104ea57610399565b8063158ef93e1161033b578063226e835c11610315578063226e835c1461047f57806323b872dd1461049457806328cdfaeb146104a75780632f2ba814146104c757610399565b8063158ef93e1461044e57806318160ddd146104565780631cda95d51461045e57610399565b806306fdde031161037757806306fdde03146103fe578063095ea7b31461041357806310f3a6d81461042657806313e23e411461043b57610399565b80630290cbc81461039e578063039ab887146103c7578063054ab01a146103dc575b600080fd5b6103b16103ac36600461372c565b610789565b6040516103be9190614348565b60405180910390f35b6103cf6107fc565b6040516103be9190614371565b6103ef6103ea36600461372c565b610808565b6040516103be93929190614559565b610406610837565b6040516103be919061438d565b6103b16104213660046137ef565b6108c2565b61042e610930565b6040516103be91906142b7565b6103cf61044936600461372c565b610940565b6103b1610962565b6103cf610972565b61047161046c366004613972565b610978565b6040516103be929190614323565b61048761098e565b6040516103be91906145fe565b6103b16104a23660046137a2565b610996565b6104ba6104b536600461372c565b6109ee565b6040516103be919061452e565b6103b16104d5366004613972565b610b3f565b6103b1610b84565b6103cf610bec565b6103cf610bf2565b6103b1610500366004613a17565b610bf8565b6103cf610c4d565b61052061051b36600461372c565b610c57565b005b6105206105303660046137ef565b610cec565b6103cf61054336600461372c565b610d43565b6105206105563660046138e1565b610d55565b61056e610569366004613972565b610f92565b6040516103be919061454b565b6103cf610fd4565b61058b610ff8565b6040516103be919061437f565b6103cf6105a636600461381f565b611007565b6105be6105b936600461372c565b6110be565b6040516103be9594939291906145b2565b6103cf6105dd366004613768565b6110ed565b6105ea61110a565b6040516103be919061453d565b6103cf61060536600461372c565b61113a565b610520611158565b6103cf6111c6565b6103cf61062836600461372c565b6111cc565b6103b161063b366004613768565b6111f4565b61042e61123e565b6103b161124d565b61040661125e565b6103b1610666366004613972565b6112b9565b6103b161067936600461372c565b6112cf565b6103b161068c3660046137ef565b61131a565b61042e61136c565b6103b16106a7366004613990565b61137b565b6103cf61143b565b6103cf611441565b6103b16106ca36600461372c565b611447565b6103b16106dd3660046137ef565b61145d565b6105206106f036600461372c565b61147e565b6106fd6118ba565b6040516103be929190614596565b6103b1610719366004613972565b6118cf565b6103cf61072c366004613768565b6118f0565b6103cf61191b565b61074c610747366004613972565b611920565b6040516103be939291906145a4565b61052061076936600461372c565b611941565b61058b611971565b6103cf61078436600461372c565b611980565b60018054810190819055600090336107a0816119b0565b6001600160a01b0381166000908152600c60205260409020600101546107c7908590611b59565b600192505060015481146107f65760405162461bcd60e51b81526004016107ed9061450e565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061082d83611cb3565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061091c908790614371565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b60608061098483611cb3565b9094909350915050565b63ffffffff81565b600180548101908190556000906109ac856119b0565b6109b833868686611e15565b6109c1846119b0565b6001915060015481146109e65760405162461bcd60e51b81526004016107ed9061450e565b509392505050565b6109f66133c3565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a4b81612091565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610a86578354610a89565b60005b81548110610a9357fe5b90600052602060002090600202019050826000015460001480610ab857508254600019145b15610ad957610acf846020015185604001516120e4565b60e0850152610b37565b60005b6001820154811015610b3557836003016000836000018381548110610afd57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610adc565b505b505050919050565b60018054810190819055600090610b5633846120ff565b610b5f336119b0565b6001915060015481146107f65760405162461bcd60e51b81526004016107ed9061450e565b6001805481019081905560009033610b9b816119b0565b6001600160a01b0381166000908152600c6020526040902060010154610bc2908290611b59565b60019250506001548114610be85760405162461bcd60e51b81526004016107ed9061450e565b5090565b60045481565b60001981565b60018054810190819055600090610c0f33846120ff565b610c18846121e5565b610c21336119b0565b600191506001548114610c465760405162461bcd60e51b81526004016107ed9061450e565b5092915050565b600b546000190190565b610c5f61124d565b610c7b5760405162461bcd60e51b81526004016107ed9061449e565b600054600160a01b900460ff161515600114610ca95760405162461bcd60e51b81526004016107ed906144ee565b610cb2816124e3565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610ce191906142b7565b60405180910390a150565b610cf461124d565b610d105760405162461bcd60e51b81526004016107ed9061449e565b610d19826125b6565b610d355760405162461bcd60e51b81526004016107ed9061443e565b610d3f82826120ff565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d7f5760405162461bcd60e51b81526004016107ed9061442e565b610d876125bc565b600080546001600160a01b03191633179055600180558251610db0906002906020860190613408565b508151610dc4906003906020850190613408565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e66919081019061374a565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610ef992849290910190613482565b506020828101518051610f1292600185019201906134e3565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610f84926001600160a01b0390911691614308565b60405180910390a150505050565b610f9a61358e565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fc9906125d1565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261108192918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061266f92505050565b915082156110935761109333836120ff565b60015481146110b45760405162461bcd60e51b81526004016107ed9061450e565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b6111126135af565b600061111f6008546128b0565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b61116061124d565b61117c5760405162461bcd60e51b81526004016107ed9061449e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c602052604081206111ed81612091565b9392505050565b6001805481019081905560009061120a846119b0565b6001600160a01b0384166000908152600c602052604090206001015461123590339086908690611e15565b610c21836119b0565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108ba5780601f1061088f576101008083540402835291602001916108ba565b60018054810190819055600090610b56836121e5565b60018054810190819055600090336112e6816119b0565b6001600160a01b0381166000908152600c602052604090206001015461131190829081908790611e15565b6107c7846119b0565b6001805481019081905560009033611331816119b0565b61133d81828787611e15565b611346856119b0565b60019250506001548114610c465760405162461bcd60e51b81526004016107ed9061450e565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926113f79290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061266f92505050565b905061140333826120ff565b61140c886121e5565b611415336119b0565b600192505060015481146110b45760405162461bcd60e51b81526004016107ed9061450e565b60015481565b60095481565b60018054810190819055600090610b5f836119b0565b6001805481019081905560009033611474816119b0565b6113468585611b59565b6001805481019081905561149061124d565b6114ac5760405162461bcd60e51b81526004016107ed9061449e565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b1580156114f757600080fd5b505afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061152f919081019061374a565b6001600160a01b0316146115555760405162461bcd60e51b81526004016107ed9061446e565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b1580156115ae57600080fd5b505af11580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115e69190810190613a36565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061161d9030906004016142b7565b60206040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061166d91908101906138c3565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926116a59216908590600401614308565b602060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116f791908101906138a5565b6117135760405162461bcd60e51b81526004016107ed9061441e565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c090611744908590600401614371565b602060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061179691908101906138c3565b6006549091506001600160a01b0385811691161461181457836001600160a01b031663f2fde38b6117c561123e565b6040518263ffffffff1660e01b81526004016117e191906142b7565b600060405180830381600087803b1580156117fb57600080fd5b505af115801561180f573d6000803e3d6000fd5b505050505b600061182160085461290f565b6009549091506118478361183b878463ffffffff61293216565b9063ffffffff61296c16565b600955611853826129ae565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a9161188a918c9190614308565b60405180910390a1505050505050506001548114610d3f5760405162461bcd60e51b81526004016107ed9061450e565b6008546000906118c9816128b0565b91509091565b60018054810190819055600090336118e6816119b0565b6107c78185611b59565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b61194961124d565b6119655760405162461bcd60e51b81526004016107ed9061449e565b61196e816129d0565b50565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c60205260408120600581015482906119a8906125d1565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611a1057600080fd5b505af1158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a4891908101906138a5565b611a645760405162461bcd60e51b81526004016107ed9061439e565b6000611a6f83612091565b90508015611b53578154611a89908263ffffffff612a5116565b82556002830154611aa0908263ffffffff612a5116565b60028401556001830154611aba908263ffffffff612a5116565b6001840155600554611ad2908263ffffffff612a5116565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611b10908490614371565b60405180910390a2836001600160a01b031660006001600160a01b031660008051602061471b83398151915283604051611b4a9190614371565b60405180910390a35b50505050565b336000908152600c6020526040902081611b855760405162461bcd60e51b81526004016107ed906144be565b8060010154821115611ba95760405162461bcd60e51b81526004016107ed9061445e565b611bb33383612a76565b6001810154611bc8908363ffffffff612b3216565b6001820155600554611be0908363ffffffff612b3216565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611c159086908690600401614308565b602060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c6791908101906138a5565b611c835760405162461bcd60e51b81526004016107ed9061447e565b604051600090339060008051602061471b83398151915290611ca6908690614371565b60405180910390a3505050565b6060808215801590611cc757506000198314155b15611df657611cd46135c9565b600b8481548110611ce157fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611d5357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d35575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611d9a5790505b5050505050815250509050806000015192508060200151915050611e10565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611e475760405162461bcd60e51b81526004016107ed9061444e565b6001600160a01b0383166000908152600c6020526040902060010154811115611e825760405162461bcd60e51b81526004016107ed906144ae565b60006001600160a01b038581169085161415611ea15750600019611ec9565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611ee95760405162461bcd60e51b81526004016107ed906143ae565b6000611efb828463ffffffff612b3216565b6001600160a01b0386166000908152600c602052604081206001015491925090611f2b908563ffffffff612b3216565b6001600160a01b0386166000908152600c602052604081206001015491925090611f5b908663ffffffff612a5116565b90506000198414611f8f576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b6000611f9b8887612b74565b9050611fa8878783612c23565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c168352908220909301859055525415801590611ffe57506001600160a01b0387166000908152600c6020526040902054155b801561202457506001600160a01b0388166000908152600c602052604090205460001914155b1561204d576001600160a01b0388166000908152600c602052604090205461204d9088906120ff565b866001600160a01b0316886001600160a01b031660008051602061471b8339815191528860405161207e9190614371565b60405180910390a3505050505050505050565b6000806120a183600501546125d1565b90506120be83600201548460040154612a5190919063ffffffff16565b8111156120da578260020154836004015482030391505061095d565b600091505061095d565b6000818310156120f65750600061092a565b5080820361092a565b6000198114806121105750600b5481105b61212c5760405162461bcd60e51b81526004016107ed906143ee565b6001600160a01b0382166000908152600c602090815260408083208054808552600e90935281842085855291909320600184015415612192576000612175878660010154612b74565b868655600186015490915061218c90889083612c23565b50612196565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e9061221790339030906004016142c5565b60206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226791908101906138c3565b10156122855760405162461bcd60e51b81526004016107ed906144ce565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd916122ca9190309087906004016142e0565b602060405180830381600087803b1580156122e457600080fd5b505af11580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061231c91908101906138a5565b6123385760405162461bcd60e51b81526004016107ed9061447e565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261236e929116908690600401614308565b602060405180830381600087803b15801561238857600080fd5b505af115801561239c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123c091908101906138a5565b6123dc5760405162461bcd60e51b81526004016107ed9061441e565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061240d908690600401614371565b602060405180830381600087803b15801561242757600080fd5b505af115801561243b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061245f91908101906138c3565b600554909150612475908463ffffffff612a5116565b600555600182015461248d908463ffffffff612a5116565b60018301556008546124a5908263ffffffff612a5116565b60085560006124b38261290f565b90506124c0338583612c23565b604051339060009060008051602061471b83398151915290611b4a908890614371565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561251c57600080fd5b505afa158015612530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061255491908101906138c3565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7146125925760405162461bcd60e51b81526004016107ed906143be565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b600061092a60095461183b600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561262a57600080fd5b505afa15801561263e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061266291908101906138c3565b859063ffffffff61293216565b60008060008451116126935760405162461bcd60e51b81526004016107ed9061451e565b6032845111156126b55760405162461bcd60e51b81526004016107ed906144de565b82518451146126d65760405162461bcd60e51b81526004016107ed906143de565b506000805b845182101561278c5760008483815181106126f257fe5b602002602001015163ffffffff161161271d5760405162461bcd60e51b81526004016107ed906144fe565b60006001600160a01b031685838151811061273457fe5b60200260200101516001600160a01b031614156127635760405162461bcd60e51b81526004016107ed9061440e565b83828151811061276f57fe5b602002602001015163ffffffff16810190508160010191506126db565b600091505b83518210156127f6578063ffffffff80168584815181106127ae57fe5b602002602001015163ffffffff1602816127c457fe5b048483815181106127d157fe5b602002602001019063ffffffff16908163ffffffff1681525050816001019150612791565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9019261285c92849290910190613482565b50602082810151805161287592600185019201906134e3565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b600061092a670de0b6b3a764000061183b600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561262a57600080fd5b600061092a670de0b6b3a764000061183b6009548561293290919063ffffffff16565b6000826129415750600061092a565b8282028284828161294e57fe5b04146111ed5760405162461bcd60e51b81526004016107ed9061448e565b60006111ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ecb565b60095460009061092a9061183b84670de0b6b3a764000063ffffffff61293216565b6001600160a01b0381166129f65760405162461bcd60e51b81526004016107ed906143ce565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156111ed5760405162461bcd60e51b81526004016107ed906143fe565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612aa7908590600401614371565b602060405180830381600087803b158015612ac157600080fd5b505af1158015612ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612af991908101906138c3565b9050612b048161290f565b50612b0f8383612f02565b806008541115612b2757600880548290039055612b2d565b60006008555b505050565b60006111ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131ef565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bf291908101906138a5565b612c0e5760405162461bcd60e51b81526004016107ed9061439e565b612c178261321b565b905061092a8383612f02565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612c52578254612c55565b60005b81548110612c5f57fe5b600091825260208220600290910201805490925015612e7c5750600084845b6001840154831015612e75576000600c6000866000018681548110612c9f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612d2a5763ffffffff8016612d1d886001018881548110612cf057fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff9081169061293216565b81612d2457fe5b04612d2c565b845b9050612d78818960030160008a6000018a81548110612d4757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612a5116565b886003016000896000018981548110612d8d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612dc7908263ffffffff612a5116565b6004840155612dd685826120e4565b9450600082612e055763ffffffff8016612df8896001018981548110612cf057fe5b81612dff57fe5b04612e07565b845b6005850154909150612e1f908263ffffffff612a5116565b6005850155612e2e85826120e4565b9450612e668c896000018981548110612e4357fe5b6000918252602090912001548b546001600160a01b0390911690600186866132ba565b50505050826001019250612c7e565b5050612ec3565b6004830154612e91908663ffffffff612a5116565b60048401556005830154612eab908563ffffffff612a5116565b60058401558254612ec39087908190600189896132ba565b505050505050565b60008183612eec5760405162461bcd60e51b81526004016107ed919061438d565b506000838581612ef857fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612f31578254612f34565b60005b81548110612f3e57fe5b906000526020600020906002020190506000612f62836001015484600201546120e4565b905083811115612f6f5750825b6000612f7a8261321b565b83549091501561317b57818160005b6001860154811015613173576000600c6000886000018481548110612faa57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130355763ffffffff80166130288a6001018681548110612ffb57fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff9081169061293216565b8161302f57fe5b04613037565b855b90506130478360040154826120e4565b83600401819055506130928a60030160008b600001878154811061306757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054826120e4565b8a60030160008b60000187815481106130a757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556130d686826120e4565b95506000826131055763ffffffff80166130f88b6001018781548110612ffb57fe5b816130ff57fe5b04613107565b855b90506131178460050154826120e4565b600585015561312686826120e4565b955061313184613391565b6131648d8b600001878154811061314457fe5b60009182526020822001548e546001600160a01b039091169186866132ba565b50505050806001019050612f89565b5050506131be565b6131898460040154836120e4565b6004850155600584015461319d90826120e4565b60058501556131ab84613391565b6131be86878660000154600086866132ba565b81851115612ec3576131d182860361321b565b90506131e18460050154826120e4565b6005850155612ec384613391565b600081848411156132135760405162461bcd60e51b81526004016107ed919061438d565b505050900390565b600061092a600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561326e57600080fd5b505afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132a691908101906138c3565b60095461183b90859063ffffffff61293216565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d2987878760405161331993929190614356565b60405180910390a4831561336057600181015461333c908463ffffffff612a5116565b60018201556002810154613356908363ffffffff612a5116565b6002820155613388565b61336e8160010154846120e4565b6001820155600281015461338290836120e4565b60028201555b50505050505050565b60006133a082600501546125d1565b90508160040154810382600201541115610d3f5760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061344957805160ff1916838001178555613476565b82800160010185558215613476579182015b8281111561347657825182559160200191906001019061345b565b50610be89291506135e3565b8280548282559060005260206000209081019282156134d7579160200282015b828111156134d757825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906134a2565b50610be89291506135fd565b828054828255906000526020600020906007016008900481019282156135825791602002820160005b8382111561355057835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030261350c565b80156135805782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613550565b505b50610be8929150613621565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61093d91905b80821115610be857600081556001016135e9565b61093d91905b80821115610be85780546001600160a01b0319168155600101613603565b61093d91905b80821115610be857805463ffffffff19168155600101613627565b803561092a816146eb565b805161092a816146eb565b60008083601f84011261366a57600080fd5b50813567ffffffffffffffff81111561368257600080fd5b60208301915083602082028301111561369a57600080fd5b9250929050565b803561092a816146ff565b805161092a816146ff565b805161092a81614708565b803561092a81614711565b600082601f8301126136de57600080fd5b81356136f16136ec82614633565b61460c565b9150808252602083016020830185838301111561370d57600080fd5b6137188382846146a9565b50505092915050565b803561092a81614708565b60006020828403121561373e57600080fd5b60006119a88484613642565b60006020828403121561375c57600080fd5b60006119a8848461364d565b6000806040838503121561377b57600080fd5b60006137878585613642565b925050602061379885828601613642565b9150509250929050565b6000806000606084860312156137b757600080fd5b60006137c38686613642565b93505060206137d486828701613642565b92505060406137e586828701613721565b9150509250925092565b6000806040838503121561380257600080fd5b600061380e8585613642565b925050602061379885828601613721565b60008060008060006060868803121561383757600080fd5b853567ffffffffffffffff81111561384e57600080fd5b61385a88828901613658565b9550955050602086013567ffffffffffffffff81111561387957600080fd5b61388588828901613658565b93509350506040613898888289016136a1565b9150509295509295909350565b6000602082840312156138b757600080fd5b60006119a884846136ac565b6000602082840312156138d557600080fd5b60006119a884846136b7565b600080600080608085870312156138f757600080fd5b600061390387876136c2565b945050602085013567ffffffffffffffff81111561392057600080fd5b61392c878288016136cd565b935050604085013567ffffffffffffffff81111561394957600080fd5b613955878288016136cd565b925050606061396687828801613721565b91505092959194509250565b60006020828403121561398457600080fd5b60006119a88484613721565b6000806000806000606086880312156139a857600080fd5b60006139b48888613721565b955050602086013567ffffffffffffffff8111156139d157600080fd5b6139dd88828901613658565b9450945050604086013567ffffffffffffffff8111156139fc57600080fd5b613a0888828901613658565b92509250509295509295909350565b60008060408385031215613a2a57600080fd5b600061380e8585613721565b60008060408385031215613a4957600080fd5b6000613a5585856136b7565b9250506020613798858286016136b7565b6000613a728383613a95565b505060200190565b6000613a7283836142ae565b613a8f8161469e565b82525050565b613a8f8161466e565b6000613aa982614661565b613ab38185614665565b9350613abe8361465b565b8060005b83811015613aec578151613ad68882613a66565b9750613ae18361465b565b925050600101613ac2565b509495945050505050565b6000613b0282614661565b613b0c8185614665565b9350613b178361465b565b8060005b83811015613aec578151613b2f8882613a7a565b9750613b3a8361465b565b925050600101613b1b565b613a8f81614679565b613a8f8161093d565b613a8f8161467e565b6000613b6b82614661565b613b758185614665565b9350613b858185602086016146b5565b613b8e816146e1565b9093019392505050565b6000613ba5601583614665565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613bd6602183614665565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613c19600e83614665565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613c43602683614665565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613c8b602083614665565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613cc4600e83614665565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613cee601b83614665565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613d27602883614665565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613d71601483614665565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613da1602983614665565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613dec602e83614665565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613e3c601883614665565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613e75601c83614665565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613eae603283614665565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f02601583614665565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613f33602183614665565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000613f76602083614665565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000613faf601e83614665565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000613fe8601c83614665565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b6000614021601483614665565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b6000614051603283614665565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b60006140a5603383614665565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b60006140fa602f83614665565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b600061414b601f83614665565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000614184602383614665565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906141ce8482613b4e565b5060208201516141e16020850182613b4e565b5060408201516141f46040850182613b4e565b5060608201516142076060850182613b4e565b50608082015161421a6080850182613b4e565b5060a082015161422d60a0850182613b4e565b5060c082015161424060c0850182613b4e565b5060e0820151611b5360e0850182613b4e565b805160408301906142648482613b4e565b506020820151611b536020850182613b4e565b805160608301906142888482613b4e565b50602082015161429b6020850182613b4e565b506040820151611b536040850182613b4e565b613a8f81614695565b6020810161092a8284613a95565b604081016142d38285613a86565b6111ed6020830184613a95565b606081016142ee8286613a86565b6142fb6020830185613a95565b6119a86040830184613b4e565b604081016143168285613a95565b6111ed6020830184613b4e565b604080825281016143348185613a9e565b905081810360208301526119a88184613af7565b6020810161092a8284613b45565b606081016143648286613b45565b6142fb6020830185613b4e565b6020810161092a8284613b4e565b6020810161092a8284613b57565b602080825281016111ed8184613b60565b6020808252810161092a81613b98565b6020808252810161092a81613bc9565b6020808252810161092a81613c0c565b6020808252810161092a81613c36565b6020808252810161092a81613c7e565b6020808252810161092a81613cb7565b6020808252810161092a81613ce1565b6020808252810161092a81613d1a565b6020808252810161092a81613d64565b6020808252810161092a81613d94565b6020808252810161092a81613ddf565b6020808252810161092a81613e2f565b6020808252810161092a81613e68565b6020808252810161092a81613ea1565b6020808252810161092a81613ef5565b6020808252810161092a81613f26565b6020808252810161092a81613f69565b6020808252810161092a81613fa2565b6020808252810161092a81613fdb565b6020808252810161092a81614014565b6020808252810161092a81614044565b6020808252810161092a81614098565b6020808252810161092a816140ed565b6020808252810161092a8161413e565b6020808252810161092a81614177565b610100810161092a82846141bc565b6040810161092a8284614253565b6060810161092a8284614277565b606081016145678286613b4e565b81810360208301526145798185613a9e565b9050818103604083015261458d8184613af7565b95945050505050565b604081016143168285613b4e565b606081016143648286613b4e565b60a081016145c08288613b4e565b6145cd6020830187613b4e565b6145da6040830186613b4e565b6145e76060830185613b4e565b6145f46080830184613b4e565b9695505050505050565b6020810161092a82846142ae565b60405181810167ffffffffffffffff8111828210171561462b57600080fd5b604052919050565b600067ffffffffffffffff82111561464a57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061092a82614689565b151590565b600061092a8261466e565b6001600160a01b031690565b63ffffffff1690565b600061092a8261467e565b82818337506000910152565b60005b838110156146d05781810151838201526020016146b8565b83811115611b535750506000910152565b601f01601f191690565b6146f48161466e565b811461196e57600080fd5b6146f481614679565b6146f48161093d565b6146f48161467e56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a72315820c35e0cfd4d2c38a65fcb6687b2bd335ace4bd111757bdd7dc14dfc9552c542c46c6578706572696d656e74616cf564736f6c634300050c0040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103995760003560e01c80636b4169c3116101e9578063bf5bfdfb1161010f578063d8884795116100ad578063f04bf8b31161007c578063f04bf8b314610739578063f2fde38b1461075b578063fc0c546a1461076e578063fdbbf8ac1461077657610399565b8063d8884795146106f5578063db006a751461070b578063dd62ed3e1461071e578063e192782b1461073157610399565b8063c200659e116100e9578063c200659e146106b4578063d007c644146106bc578063d271be3f146106cf578063d3ac25c4146106e257610399565b8063bf5bfdfb146106ac578063c034d0db146104ea578063c1a2007d1461042657610399565b80638da5cb5b11610187578063a3a7e7f311610156578063a3a7e7f31461066b578063a9059cbb1461067e578063b2bdfa7b14610691578063b5dbfc1a1461069957610399565b80638da5cb5b146106405780638f32d59b1461064857806395d89b4114610650578063a0712d681461065857610399565b806371ee46eb116101c357806371ee46eb1461061257806377ede0511461061a57806381c8d895146103c757806384d4b4101461062d57610399565b80636b4169c3146105e257806370a08231146105f7578063715018a61461060a57610399565b80632f4350c2116102ce578063496cc1641161026c578063556043ef1161023b578063556043ef146105835780635cde5055146105985780635e5c06e2146105ab57806363152a50146105cf57610399565b8063496cc164146105355780634d12d4b6146105485780634fd7c0dd1461055b57806352d1902d1461057b57610399565b8063388c0b8c116102a8578063388c0b8c146104f25780633e20a92914610505578063469519541461050d5780634929fbf71461052257610399565b80632f4350c2146104da578063313ce567146104e257806333a581d2146104ea57610399565b8063158ef93e1161033b578063226e835c11610315578063226e835c1461047f57806323b872dd1461049457806328cdfaeb146104a75780632f2ba814146104c757610399565b8063158ef93e1461044e57806318160ddd146104565780631cda95d51461045e57610399565b806306fdde031161037757806306fdde03146103fe578063095ea7b31461041357806310f3a6d81461042657806313e23e411461043b57610399565b80630290cbc81461039e578063039ab887146103c7578063054ab01a146103dc575b600080fd5b6103b16103ac36600461372c565b610789565b6040516103be9190614348565b60405180910390f35b6103cf6107fc565b6040516103be9190614371565b6103ef6103ea36600461372c565b610808565b6040516103be93929190614559565b610406610837565b6040516103be919061438d565b6103b16104213660046137ef565b6108c2565b61042e610930565b6040516103be91906142b7565b6103cf61044936600461372c565b610940565b6103b1610962565b6103cf610972565b61047161046c366004613972565b610978565b6040516103be929190614323565b61048761098e565b6040516103be91906145fe565b6103b16104a23660046137a2565b610996565b6104ba6104b536600461372c565b6109ee565b6040516103be919061452e565b6103b16104d5366004613972565b610b3f565b6103b1610b84565b6103cf610bec565b6103cf610bf2565b6103b1610500366004613a17565b610bf8565b6103cf610c4d565b61052061051b36600461372c565b610c57565b005b6105206105303660046137ef565b610cec565b6103cf61054336600461372c565b610d43565b6105206105563660046138e1565b610d55565b61056e610569366004613972565b610f92565b6040516103be919061454b565b6103cf610fd4565b61058b610ff8565b6040516103be919061437f565b6103cf6105a636600461381f565b611007565b6105be6105b936600461372c565b6110be565b6040516103be9594939291906145b2565b6103cf6105dd366004613768565b6110ed565b6105ea61110a565b6040516103be919061453d565b6103cf61060536600461372c565b61113a565b610520611158565b6103cf6111c6565b6103cf61062836600461372c565b6111cc565b6103b161063b366004613768565b6111f4565b61042e61123e565b6103b161124d565b61040661125e565b6103b1610666366004613972565b6112b9565b6103b161067936600461372c565b6112cf565b6103b161068c3660046137ef565b61131a565b61042e61136c565b6103b16106a7366004613990565b61137b565b6103cf61143b565b6103cf611441565b6103b16106ca36600461372c565b611447565b6103b16106dd3660046137ef565b61145d565b6105206106f036600461372c565b61147e565b6106fd6118ba565b6040516103be929190614596565b6103b1610719366004613972565b6118cf565b6103cf61072c366004613768565b6118f0565b6103cf61191b565b61074c610747366004613972565b611920565b6040516103be939291906145a4565b61052061076936600461372c565b611941565b61058b611971565b6103cf61078436600461372c565b611980565b60018054810190819055600090336107a0816119b0565b6001600160a01b0381166000908152600c60205260409020600101546107c7908590611b59565b600192505060015481146107f65760405162461bcd60e51b81526004016107ed9061450e565b60405180910390fd5b50919050565b670de0b6b3a764000081565b6001600160a01b0381166000908152600c602052604090205460608061082d83611cb3565b9395909450915050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061091c908790614371565b60405180910390a360019150505b92915050565b6006546001600160a01b03165b90565b6001600160a01b0381166000908152600c60205260409020600401545b919050565b600054600160a01b900460ff1681565b60055481565b60608061098483611cb3565b9094909350915050565b63ffffffff81565b600180548101908190556000906109ac856119b0565b6109b833868686611e15565b6109c1846119b0565b6001915060015481146109e65760405162461bcd60e51b81526004016107ed9061450e565b509392505050565b6109f66133c3565b6001600160a01b0382166000908152600c6020908152604091829020805484526001810154918401919091526002810154918301919091526004810154606083015260058101546080830152610a4b81612091565b60a08301526001600160a01b0383166000908152600d60205260408120805460c08501528254909190600b9060001914610a86578354610a89565b60005b81548110610a9357fe5b90600052602060002090600202019050826000015460001480610ab857508254600019145b15610ad957610acf846020015185604001516120e4565b60e0850152610b37565b60005b6001820154811015610b3557836003016000836000018381548110610afd57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460e0860180519091019052600101610adc565b505b505050919050565b60018054810190819055600090610b5633846120ff565b610b5f336119b0565b6001915060015481146107f65760405162461bcd60e51b81526004016107ed9061450e565b6001805481019081905560009033610b9b816119b0565b6001600160a01b0381166000908152600c6020526040902060010154610bc2908290611b59565b60019250506001548114610be85760405162461bcd60e51b81526004016107ed9061450e565b5090565b60045481565b60001981565b60018054810190819055600090610c0f33846120ff565b610c18846121e5565b610c21336119b0565b600191506001548114610c465760405162461bcd60e51b81526004016107ed9061450e565b5092915050565b600b546000190190565b610c5f61124d565b610c7b5760405162461bcd60e51b81526004016107ed9061449e565b600054600160a01b900460ff161515600114610ca95760405162461bcd60e51b81526004016107ed906144ee565b610cb2816124e3565b7f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6881604051610ce191906142b7565b60405180910390a150565b610cf461124d565b610d105760405162461bcd60e51b81526004016107ed9061449e565b610d19826125b6565b610d355760405162461bcd60e51b81526004016107ed9061443e565b610d3f82826120ff565b5050565b600d6020526000908152604090205481565b600054600160a01b900460ff1615610d7f5760405162461bcd60e51b81526004016107ed9061442e565b610d876125bc565b600080546001600160a01b03191633179055600180558251610db0906002906020860190613408565b508151610dc4906003906020850190613408565b506004818155670de0b6b3a7640000600955600680546001600160a01b0319166001600160a01b03878116919091179182905560408051636f307dc360e01b815290519290911692636f307dc3928282019260209290829003018186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e66919081019061374a565b600780546001600160a01b03929092166001600160a01b031990921691909117905560408051600081830181815260608301845282528251818152602080820190945283830152600b8054600181018083559190925282518051919460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90192610ef992849290910190613482565b506020828101518051610f1292600185019201906134e3565b5050600080525050600e6020526000197fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c556006546009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a92610f84926001600160a01b0390911691614308565b60405180910390a150505050565b610f9a61358e565b6000828152600e60209081526040909120805483526001810154918301919091526002810154610fc9906125d1565b604083015250919050565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf790565b6006546001600160a01b031681565b6001805481019081905560408051602080880282810182019093528782526000939261108192918a918a9182919085019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061266f92505050565b915082156110935761109333836120ff565b60015481146110b45760405162461bcd60e51b81526004016107ed9061450e565b5095945050505050565b600c60205260009081526040902080546001820154600283015460048401546005909401549293919290919085565b600a60209081526000928352604080842090915290825290205481565b6111126135af565b600061111f6008546128b0565b60408051808201909152600554815291016020820152905090565b6001600160a01b03166000908152600c602052604090206001015490565b61116061124d565b61117c5760405162461bcd60e51b81526004016107ed9061449e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b6001600160a01b0381166000908152600c602052604081206111ed81612091565b9392505050565b6001805481019081905560009061120a846119b0565b6001600160a01b0384166000908152600c602052604090206001015461123590339086908690611e15565b610c21836119b0565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108ba5780601f1061088f576101008083540402835291602001916108ba565b60018054810190819055600090610b56836121e5565b60018054810190819055600090336112e6816119b0565b6001600160a01b0381166000908152600c602052604090206001015461131190829081908790611e15565b6107c7846119b0565b6001805481019081905560009033611331816119b0565b61133d81828787611e15565b611346856119b0565b60019250506001548114610c465760405162461bcd60e51b81526004016107ed9061450e565b6000546001600160a01b031681565b6001805481019081905560408051602080870282810182019093528682526000939284926113f79290918a918a91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525061266f92505050565b905061140333826120ff565b61140c886121e5565b611415336119b0565b600192505060015481146110b45760405162461bcd60e51b81526004016107ed9061450e565b60015481565b60095481565b60018054810190819055600090610b5f836119b0565b6001805481019081905560009033611474816119b0565b6113468585611b59565b6001805481019081905561149061124d565b6114ac5760405162461bcd60e51b81526004016107ed9061449e565b60075460408051636f307dc360e01b8152905184926001600160a01b039081169290841691636f307dc391600480820192602092909190829003018186803b1580156114f757600080fd5b505afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061152f919081019061374a565b6001600160a01b0316146115555760405162461bcd60e51b81526004016107ed9061446e565b600680546001600160a01b038381166001600160a01b0319831617909255604080516317a1a86160e11b8152815193909216926000928492632f4350c29260048084019382900301818787803b1580156115ae57600080fd5b505af11580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115e69190810190613a36565b506007546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061161d9030906004016142b7565b60206040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061166d91908101906138c3565b60075460065460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926116a59216908590600401614308565b602060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116f791908101906138a5565b6117135760405162461bcd60e51b81526004016107ed9061441e565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c090611744908590600401614371565b602060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061179691908101906138c3565b6006549091506001600160a01b0385811691161461181457836001600160a01b031663f2fde38b6117c561123e565b6040518263ffffffff1660e01b81526004016117e191906142b7565b600060405180830381600087803b1580156117fb57600080fd5b505af115801561180f573d6000803e3d6000fd5b505050505b600061182160085461290f565b6009549091506118478361183b878463ffffffff61293216565b9063ffffffff61296c16565b600955611853826129ae565b6008556009546040517faa54229fa6d6451d2cd5d13b5bc60f1230a0f79091118926e9b95d8f4811713a9161188a918c9190614308565b60405180910390a1505050505050506001548114610d3f5760405162461bcd60e51b81526004016107ed9061450e565b6008546000906118c9816128b0565b91509091565b60018054810190819055600090336118e6816119b0565b6107c78185611b59565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b603281565b600e6020526000908152604090208054600182015460029092015490919083565b61194961124d565b6119655760405162461bcd60e51b81526004016107ed9061449e565b61196e816129d0565b50565b6007546001600160a01b031681565b6001600160a01b0381166000908152600c60205260408120600581015482906119a8906125d1565b949350505050565b6001600160a01b038082166000908152600c60209081526040808320600d8352818420600654835163a6afed9560e01b815293519296919591169363a6afed95936004808201949293918390030190829087803b158015611a1057600080fd5b505af1158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a4891908101906138a5565b611a645760405162461bcd60e51b81526004016107ed9061439e565b6000611a6f83612091565b90508015611b53578154611a89908263ffffffff612a5116565b82556002830154611aa0908263ffffffff612a5116565b60028401556001830154611aba908263ffffffff612a5116565b6001840155600554611ad2908263ffffffff612a5116565b6005556040516001600160a01b038516907f16cbc685358ca7d4e6b273dcdf2cb5d18c80b950aa2319b519756cd016233a6c90611b10908490614371565b60405180910390a2836001600160a01b031660006001600160a01b031660008051602061471b83398151915283604051611b4a9190614371565b60405180910390a35b50505050565b336000908152600c6020526040902081611b855760405162461bcd60e51b81526004016107ed906144be565b8060010154821115611ba95760405162461bcd60e51b81526004016107ed9061445e565b611bb33383612a76565b6001810154611bc8908363ffffffff612b3216565b6001820155600554611be0908363ffffffff612b3216565b60055560075460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611c159086908690600401614308565b602060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c6791908101906138a5565b611c835760405162461bcd60e51b81526004016107ed9061447e565b604051600090339060008051602061471b83398151915290611ca6908690614371565b60405180910390a3505050565b6060808215801590611cc757506000198314155b15611df657611cd46135c9565b600b8481548110611ce157fe5b906000526020600020906002020160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611d5357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d35575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611dd757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611d9a5790505b5050505050815250509050806000015192508060200151915050611e10565b505060408051600080825260208201908152818301909252905b915091565b816001600160a01b0316836001600160a01b03161415611e475760405162461bcd60e51b81526004016107ed9061444e565b6001600160a01b0383166000908152600c6020526040902060010154811115611e825760405162461bcd60e51b81526004016107ed906144ae565b60006001600160a01b038581169085161415611ea15750600019611ec9565b506001600160a01b038084166000908152600a60209081526040808320938816835292905220545b81811015611ee95760405162461bcd60e51b81526004016107ed906143ae565b6000611efb828463ffffffff612b3216565b6001600160a01b0386166000908152600c602052604081206001015491925090611f2b908563ffffffff612b3216565b6001600160a01b0386166000908152600c602052604081206001015491925090611f5b908663ffffffff612a5116565b90506000198414611f8f576001600160a01b038088166000908152600a60209081526040808320938c168352929052208390555b6000611f9b8887612b74565b9050611fa8878783612c23565b6001600160a01b038089166000818152600c60205260408082206001808201899055948c168352908220909301859055525415801590611ffe57506001600160a01b0387166000908152600c6020526040902054155b801561202457506001600160a01b0388166000908152600c602052604090205460001914155b1561204d576001600160a01b0388166000908152600c602052604090205461204d9088906120ff565b866001600160a01b0316886001600160a01b031660008051602061471b8339815191528860405161207e9190614371565b60405180910390a3505050505050505050565b6000806120a183600501546125d1565b90506120be83600201548460040154612a5190919063ffffffff16565b8111156120da578260020154836004015482030391505061095d565b600091505061095d565b6000818310156120f65750600061092a565b5080820361092a565b6000198114806121105750600b5481105b61212c5760405162461bcd60e51b81526004016107ed906143ee565b6001600160a01b0382166000908152600c602090815260408083208054808552600e90935281842085855291909320600184015415612192576000612175878660010154612b74565b868655600186015490915061218c90889083612c23565b50612196565b8484555b815460001901825580546001018155604051859084906001600160a01b038916907f356f094000bcd3968ad51bf92c9d115ed7294626dea8ae4cc5b24273702e111390600090a4505050505050565b600754604051636eb1769f60e11b815282916001600160a01b03169063dd62ed3e9061221790339030906004016142c5565b60206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226791908101906138c3565b10156122855760405162461bcd60e51b81526004016107ed906144ce565b336000818152600c60205260409081902060075491516323b872dd60e01b815290926001600160a01b03909216916323b872dd916122ca9190309087906004016142e0565b602060405180830381600087803b1580156122e457600080fd5b505af11580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061231c91908101906138a5565b6123385760405162461bcd60e51b81526004016107ed9061447e565b60075460065460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261236e929116908690600401614308565b602060405180830381600087803b15801561238857600080fd5b505af115801561239c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123c091908101906138a5565b6123dc5760405162461bcd60e51b81526004016107ed9061441e565b600654604051630305da4f60e61b81526000916001600160a01b03169063c17693c09061240d908690600401614371565b602060405180830381600087803b15801561242757600080fd5b505af115801561243b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061245f91908101906138c3565b600554909150612475908463ffffffff612a5116565b600555600182015461248d908463ffffffff612a5116565b60018301556008546124a5908263ffffffff612a5116565b60085560006124b38261290f565b90506124c0338583612c23565b604051339060009060008051602061471b83398151915290611b4a908890614371565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561251c57600080fd5b505afa158015612530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061255491908101906138c3565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7146125925760405162461bcd60e51b81526004016107ed906143be565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755565b3b151590565b6000805460ff60a01b1916600160a01b179055565b600061092a60095461183b600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561262a57600080fd5b505afa15801561263e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061266291908101906138c3565b859063ffffffff61293216565b60008060008451116126935760405162461bcd60e51b81526004016107ed9061451e565b6032845111156126b55760405162461bcd60e51b81526004016107ed906144de565b82518451146126d65760405162461bcd60e51b81526004016107ed906143de565b506000805b845182101561278c5760008483815181106126f257fe5b602002602001015163ffffffff161161271d5760405162461bcd60e51b81526004016107ed906144fe565b60006001600160a01b031685838151811061273457fe5b60200260200101516001600160a01b031614156127635760405162461bcd60e51b81526004016107ed9061440e565b83828151811061276f57fe5b602002602001015163ffffffff16810190508160010191506126db565b600091505b83518210156127f6578063ffffffff80168584815181106127ae57fe5b602002602001015163ffffffff1602816127c457fe5b048483815181106127d157fe5b602002602001019063ffffffff16908163ffffffff1681525050816001019150612791565b604080518082019091528581526020808201869052600b80546001818101808455600093909352845180519195939460029093027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9019261285c92849290910190613482565b50602082810151805161287592600185019201906134e3565b505050039250827f755babe5551737dcd4c723af196cff0ed1fa99a4c6957c62262d6b1425f864aa60405160405180910390a2505092915050565b600061092a670de0b6b3a764000061183b600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561262a57600080fd5b600061092a670de0b6b3a764000061183b6009548561293290919063ffffffff16565b6000826129415750600061092a565b8282028284828161294e57fe5b04146111ed5760405162461bcd60e51b81526004016107ed9061448e565b60006111ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ecb565b60095460009061092a9061183b84670de0b6b3a764000063ffffffff61293216565b6001600160a01b0381166129f65760405162461bcd60e51b81526004016107ed906143ce565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156111ed5760405162461bcd60e51b81526004016107ed906143fe565b60065460405163852a12e360e01b81526000916001600160a01b03169063852a12e390612aa7908590600401614371565b602060405180830381600087803b158015612ac157600080fd5b505af1158015612ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612af991908101906138c3565b9050612b048161290f565b50612b0f8383612f02565b806008541115612b2757600880548290039055612b2d565b60006008555b505050565b60006111ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131ef565b6006546040805163a6afed9560e01b815290516000926001600160a01b03169163a6afed9591600480830192602092919082900301818787803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bf291908101906138a5565b612c0e5760405162461bcd60e51b81526004016107ed9061439e565b612c178261321b565b905061092a8383612f02565b6001600160a01b0383166000908152600c602052604081208054909190600b9060001914612c52578254612c55565b60005b81548110612c5f57fe5b600091825260208220600290910201805490925015612e7c5750600084845b6001840154831015612e75576000600c6000866000018681548110612c9f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060018701549092506000190185149081612d2a5763ffffffff8016612d1d886001018881548110612cf057fe5b600091825260209091206008820401548d916007166004026101000a900463ffffffff9081169061293216565b81612d2457fe5b04612d2c565b845b9050612d78818960030160008a6000018a81548110612d4757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff612a5116565b886003016000896000018981548110612d8d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004830154612dc7908263ffffffff612a5116565b6004840155612dd685826120e4565b9450600082612e055763ffffffff8016612df8896001018981548110612cf057fe5b81612dff57fe5b04612e07565b845b6005850154909150612e1f908263ffffffff612a5116565b6005850155612e2e85826120e4565b9450612e668c896000018981548110612e4357fe5b6000918252602090912001548b546001600160a01b0390911690600186866132ba565b50505050826001019250612c7e565b5050612ec3565b6004830154612e91908663ffffffff612a5116565b60048401556005830154612eab908563ffffffff612a5116565b60058401558254612ec39087908190600189896132ba565b505050505050565b60008183612eec5760405162461bcd60e51b81526004016107ed919061438d565b506000838581612ef857fe5b0495945050505050565b6001600160a01b0382166000908152600c602052604081208054909190600b9060001914612f31578254612f34565b60005b81548110612f3e57fe5b906000526020600020906002020190506000612f62836001015484600201546120e4565b905083811115612f6f5750825b6000612f7a8261321b565b83549091501561317b57818160005b6001860154811015613173576000600c6000886000018481548110612faa57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120600189015490925060001901831490816130355763ffffffff80166130288a6001018681548110612ffb57fe5b600091825260209091206008820401548b916007166004026101000a900463ffffffff9081169061293216565b8161302f57fe5b04613037565b855b90506130478360040154826120e4565b83600401819055506130928a60030160008b600001878154811061306757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054826120e4565b8a60030160008b60000187815481106130a757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556130d686826120e4565b95506000826131055763ffffffff80166130f88b6001018781548110612ffb57fe5b816130ff57fe5b04613107565b855b90506131178460050154826120e4565b600585015561312686826120e4565b955061313184613391565b6131648d8b600001878154811061314457fe5b60009182526020822001548e546001600160a01b039091169186866132ba565b50505050806001019050612f89565b5050506131be565b6131898460040154836120e4565b6004850155600584015461319d90826120e4565b60058501556131ab84613391565b6131be86878660000154600086866132ba565b81851115612ec3576131d182860361321b565b90506131e18460050154826120e4565b6005850155612ec384613391565b600081848411156132135760405162461bcd60e51b81526004016107ed919061438d565b505050900390565b600061092a600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561326e57600080fd5b505afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132a691908101906138c3565b60095461183b90859063ffffffff61293216565b6000600e6000868152602001908152602001600020905084866001600160a01b0316886001600160a01b03167f7fb238306664f9cc50083b666d8979f411dd72154c6e9bf558c76b39e14e7d2987878760405161331993929190614356565b60405180910390a4831561336057600181015461333c908463ffffffff612a5116565b60018201556002810154613356908363ffffffff612a5116565b6002820155613388565b61336e8160010154846120e4565b6001820155600281015461338290836120e4565b60028201555b50505050505050565b60006133a082600501546125d1565b90508160040154810382600201541115610d3f5760048201549003600290910155565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061344957805160ff1916838001178555613476565b82800160010185558215613476579182015b8281111561347657825182559160200191906001019061345b565b50610be89291506135e3565b8280548282559060005260206000209081019282156134d7579160200282015b828111156134d757825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906134a2565b50610be89291506135fd565b828054828255906000526020600020906007016008900481019282156135825791602002820160005b8382111561355057835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030261350c565b80156135805782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613550565b505b50610be8929150613621565b60405180606001604052806000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001606081525090565b61093d91905b80821115610be857600081556001016135e9565b61093d91905b80821115610be85780546001600160a01b0319168155600101613603565b61093d91905b80821115610be857805463ffffffff19168155600101613627565b803561092a816146eb565b805161092a816146eb565b60008083601f84011261366a57600080fd5b50813567ffffffffffffffff81111561368257600080fd5b60208301915083602082028301111561369a57600080fd5b9250929050565b803561092a816146ff565b805161092a816146ff565b805161092a81614708565b803561092a81614711565b600082601f8301126136de57600080fd5b81356136f16136ec82614633565b61460c565b9150808252602083016020830185838301111561370d57600080fd5b6137188382846146a9565b50505092915050565b803561092a81614708565b60006020828403121561373e57600080fd5b60006119a88484613642565b60006020828403121561375c57600080fd5b60006119a8848461364d565b6000806040838503121561377b57600080fd5b60006137878585613642565b925050602061379885828601613642565b9150509250929050565b6000806000606084860312156137b757600080fd5b60006137c38686613642565b93505060206137d486828701613642565b92505060406137e586828701613721565b9150509250925092565b6000806040838503121561380257600080fd5b600061380e8585613642565b925050602061379885828601613721565b60008060008060006060868803121561383757600080fd5b853567ffffffffffffffff81111561384e57600080fd5b61385a88828901613658565b9550955050602086013567ffffffffffffffff81111561387957600080fd5b61388588828901613658565b93509350506040613898888289016136a1565b9150509295509295909350565b6000602082840312156138b757600080fd5b60006119a884846136ac565b6000602082840312156138d557600080fd5b60006119a884846136b7565b600080600080608085870312156138f757600080fd5b600061390387876136c2565b945050602085013567ffffffffffffffff81111561392057600080fd5b61392c878288016136cd565b935050604085013567ffffffffffffffff81111561394957600080fd5b613955878288016136cd565b925050606061396687828801613721565b91505092959194509250565b60006020828403121561398457600080fd5b60006119a88484613721565b6000806000806000606086880312156139a857600080fd5b60006139b48888613721565b955050602086013567ffffffffffffffff8111156139d157600080fd5b6139dd88828901613658565b9450945050604086013567ffffffffffffffff8111156139fc57600080fd5b613a0888828901613658565b92509250509295509295909350565b60008060408385031215613a2a57600080fd5b600061380e8585613721565b60008060408385031215613a4957600080fd5b6000613a5585856136b7565b9250506020613798858286016136b7565b6000613a728383613a95565b505060200190565b6000613a7283836142ae565b613a8f8161469e565b82525050565b613a8f8161466e565b6000613aa982614661565b613ab38185614665565b9350613abe8361465b565b8060005b83811015613aec578151613ad68882613a66565b9750613ae18361465b565b925050600101613ac2565b509495945050505050565b6000613b0282614661565b613b0c8185614665565b9350613b178361465b565b8060005b83811015613aec578151613b2f8882613a7a565b9750613b3a8361465b565b925050600101613b1b565b613a8f81614679565b613a8f8161093d565b613a8f8161467e565b6000613b6b82614661565b613b758185614665565b9350613b858185602086016146b5565b613b8e816146e1565b9093019392505050565b6000613ba5601583614665565b741858d8dc9d59525b9d195c995cdd0819985a5b1959605a1b815260200192915050565b6000613bd6602183614665565b7f4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e7366658152603960f91b602082015260400192915050565b6000613c19600e83614665565b6d4e6f7420636f6d70617469626c6560901b815260200192915050565b6000613c43602683614665565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000613c8b602083614665565b7f496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67815260200192915050565b6000613cc4600e83614665565b6d125b9d985b1a59081a185d08125160921b815260200192915050565b6000613cee601b83614665565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000613d27602883614665565b7f496e76616c6964206861743a20726563697069656e742073686f756c64206e6f815267074206265203078360c41b602082015260400192915050565b6000613d71601483614665565b731d1bdad95b88185c1c1c9bdd994819985a5b195960621b815260200192915050565b6000613da1602983614665565b7f546865206c6962726172792068617320616c7265616479206265656e20696e698152683a34b0b634bd32b21760b91b602082015260400192915050565b6000613dec602e83614665565b7f41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f81526d6e7472616374206164647265737360901b602082015260400192915050565b6000613e3c601883614665565b7f7372632073686f756c64206e6f7420657175616c206473740000000000000000815260200192915050565b6000613e75601c83614665565b7f4e6f7420656e6f7567682062616c616e636520746f2072656465656d00000000815260200192915050565b6000613eae603283614665565b7f4e65772073747261746567792073686f756c642068617665207468652073616d81527119481d5b99195c9b1e5a5b99c8185cdcd95d60721b602082015260400192915050565b6000613f02601583614665565b741d1bdad95b881d1c985b9cd9995c8819985a5b1959605a1b815260200192915050565b6000613f33602183614665565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000613f76602083614665565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000613faf601e83614665565b7f4e6f7420656e6f7567682062616c616e636520746f207472616e736665720000815260200192915050565b6000613fe8601c83614665565b7f52656465656d20616d6f756e742063616e6e6f74206265207a65726f00000000815260200192915050565b6000614021601483614665565b734e6f7420656e6f75676820616c6c6f77616e636560601b815260200192915050565b6000614051603283614665565b7f496e76616c696c64206861743a206d6178696d756d206e756d626572206f66208152711c9958da5c1a595b9d1cc81c995858da195960721b602082015260400192915050565b60006140a5603383614665565b7f546865206c696272617279206973206c6f636b65642e204e6f206469726563748152721013b1b0b636139034b99030b63637bbb2b21760691b602082015260400192915050565b60006140fa602f83614665565b7f496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206281526e065206c6172676572207468616e203608c1b602082015260400192915050565b600061414b601f83614665565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b6000614184602383614665565b7f496e76616c6964206861743a206174206c65617374206f6e6520726563697069815262195b9d60ea1b602082015260400192915050565b80516101008301906141ce8482613b4e565b5060208201516141e16020850182613b4e565b5060408201516141f46040850182613b4e565b5060608201516142076060850182613b4e565b50608082015161421a6080850182613b4e565b5060a082015161422d60a0850182613b4e565b5060c082015161424060c0850182613b4e565b5060e0820151611b5360e0850182613b4e565b805160408301906142648482613b4e565b506020820151611b536020850182613b4e565b805160608301906142888482613b4e565b50602082015161429b6020850182613b4e565b506040820151611b536040850182613b4e565b613a8f81614695565b6020810161092a8284613a95565b604081016142d38285613a86565b6111ed6020830184613a95565b606081016142ee8286613a86565b6142fb6020830185613a95565b6119a86040830184613b4e565b604081016143168285613a95565b6111ed6020830184613b4e565b604080825281016143348185613a9e565b905081810360208301526119a88184613af7565b6020810161092a8284613b45565b606081016143648286613b45565b6142fb6020830185613b4e565b6020810161092a8284613b4e565b6020810161092a8284613b57565b602080825281016111ed8184613b60565b6020808252810161092a81613b98565b6020808252810161092a81613bc9565b6020808252810161092a81613c0c565b6020808252810161092a81613c36565b6020808252810161092a81613c7e565b6020808252810161092a81613cb7565b6020808252810161092a81613ce1565b6020808252810161092a81613d1a565b6020808252810161092a81613d64565b6020808252810161092a81613d94565b6020808252810161092a81613ddf565b6020808252810161092a81613e2f565b6020808252810161092a81613e68565b6020808252810161092a81613ea1565b6020808252810161092a81613ef5565b6020808252810161092a81613f26565b6020808252810161092a81613f69565b6020808252810161092a81613fa2565b6020808252810161092a81613fdb565b6020808252810161092a81614014565b6020808252810161092a81614044565b6020808252810161092a81614098565b6020808252810161092a816140ed565b6020808252810161092a8161413e565b6020808252810161092a81614177565b610100810161092a82846141bc565b6040810161092a8284614253565b6060810161092a8284614277565b606081016145678286613b4e565b81810360208301526145798185613a9e565b9050818103604083015261458d8184613af7565b95945050505050565b604081016143168285613b4e565b606081016143648286613b4e565b60a081016145c08288613b4e565b6145cd6020830187613b4e565b6145da6040830186613b4e565b6145e76060830185613b4e565b6145f46080830184613b4e565b9695505050505050565b6020810161092a82846142ae565b60405181810167ffffffffffffffff8111828210171561462b57600080fd5b604052919050565b600067ffffffffffffffff82111561464a57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b600061092a82614689565b151590565b600061092a8261466e565b6001600160a01b031690565b63ffffffff1690565b600061092a8261467e565b82818337506000910152565b60005b838110156146d05781810151838201526020016146b8565b83811115611b535750506000910152565b601f01601f191690565b6146f48161466e565b811461196e57600080fd5b6146f481614679565b6146f48161093d565b6146f48161467e56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa365627a7a72315820c35e0cfd4d2c38a65fcb6687b2bd335ace4bd111757bdd7dc14dfc9552c542c46c6578706572696d656e74616cf564736f6c634300050c0040",
  "sourceMap": "879:36316:19:-;;;;;358:6:16;:19;;-1:-1:-1;;;;;;358:19:16;367:10;358:19;;;;-1:-1:-1;;;;;425:6:16;;392:40;;358:6;;392:40;879:36316:19;;;;;;",
  "deployedSourceMap": "879:36316:19:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;879:36316:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7796:266;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1129:67;;;:::i;:::-;;;;;;;;8901:312;;;;;;;;;:::i;:::-;;;;;;;;;;882:18:20;;;:::i;:::-;;;;;;;;3687:232:19;;;;;;;;;:::i;16132:135::-;;;:::i;:::-;;;;;;;;10282:194;;;;;;;;;:::i;683:23:20:-;;;:::i;1164:26::-;;;:::i;9266:203:19:-;;;;;;;;;:::i;:::-;;;;;;;;;1320:51;;;:::i;:::-;;;;;;;;5440:281;;;;;;;;;:::i;11394:1329::-;;;;;;;;;:::i;:::-;;;;;;;;8495:186;;;;;;;;;:::i;7191:206::-;;;:::i;1066:23:20:-;;;:::i;1202:57:19:-;;;:::i;6043:278::-;;;;;;;;;:::i;8739:104::-;;;:::i;16615:148::-;;;;;;;;;:::i;:::-;;16322:236;;;;;;;;;:::i;1899:58:20:-;;;;;;;;;:::i;1512:844:19:-;;;;;;;;;:::i;12777:377::-;;;;;;;;;:::i;:::-;;;;;;;;698:157:17;;;:::i;1233:30:20:-;;;:::i;:::-;;;;;;;;8114:329:19;;;;;;;;;:::i;1816:43:20:-;;;;;;;;;:::i;:::-;;;;;;;;;;;;1661:73;;;;;;;;;:::i;11000:336:19:-;;;:::i;:::-;;;;;;;;2480:113;;;;;;;;;:::i;1300:137:16:-;;;:::i;1435:39:20:-;;;:::i;10536:213:19:-;;;;;;;;;:::i;4847:283::-;;;;;;;;;:::i;515:77:16:-;;;:::i;866:90::-;;;:::i;972:20:20:-;;;:::i;5807:174:19:-;;;;;;;;;:::i;4524:265::-;;;;;;;;;:::i;4179:291::-;;;;;;;;;:::i;656:21:20:-;;;:::i;6393:390:19:-;;;;;;;;;:::i;784:28:20:-;;;:::i;1550:40::-;;;:::i;10803:137:19:-;;;;;;;;;:::i;7457:276::-;;;;;;;;;:::i;13690:2387::-;;;;;;;;;:::i;13389:234::-;;;:::i;:::-;;;;;;;;;6925:214;;;;;;;;;:::i;2871:169::-;;;;;;;;;:::i;1377:51::-;;;:::i;1993:50:20:-;;;;;;;;;:::i;:::-;;;;;;;;;;1586:107:16;;;;;;;;;:::i;1299:19:20:-;;;:::i;9971:254:19:-;;;;;;;;;:::i;7796:266::-;545:1:22;528:18;;;;;;;;7899:4:19;;7933:10;7953:24;7933:10;7953:19;:24::i;:::-;-1:-1:-1;;;;;8012:13:19;;;;;;:8;:13;;;;;:21;;;7987:47;;8002:8;;7987:14;:47::i;:::-;8051:4;8044:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;;;;;;;;;7796:266:19;;;;:::o;1129:67::-;1192:4;1129:67;:::o;8901:312::-;-1:-1:-1;;;;;9129:15:19;;9001:13;9129:15;;;:8;:15;;;;;:21;9028:27;;9188:18;9129:21;9188:11;:18::i;:::-;8901:312;;9160:46;;-1:-1:-1;8901:312:19;-1:-1:-1;;8901:312:19:o;882:18:20:-;;;;;;;;;;;;;;-1:-1:-1;;882:18:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3687:232:19:-;3785:10;3755:4;3805:23;;;:18;:23;;;;;;;;-1:-1:-1;;;;;3805:32:19;;;;;;;;;;:41;;;3861:30;3755:4;;3785:10;;;3861:30;;;;3840:6;;3861:30;;;;;;;;;;3908:4;3901:11;;;3687:232;;;;;:::o;16132:135::-;16256:3;;-1:-1:-1;;;;;16256:3:19;16132:135;;:::o;10282:194::-;-1:-1:-1;;;;;10424:15:19;;10368:14;10424:15;;;:8;:15;;;;;10456:13;;;10282:194;;;;:::o;683:23:20:-;;;-1:-1:-1;;;683:23:20;;;;;:::o;1164:26::-;;;;:::o;9266:203:19:-;9348:27;9377;9444:18;9456:5;9444:11;:18::i;:::-;9416:46;;;;-1:-1:-1;9266:203:19;-1:-1:-1;;9266:203:19:o;1320:51::-;1361:10;1320:51;:::o;5440:281::-;545:1:22;528:18;;;;;;;;5559:4:19;;5579:24;5599:3;5579:19;:24::i;:::-;5613:46;5630:10;5642:3;5647;5652:6;5613:16;:46::i;:::-;5669:24;5689:3;5669:19;:24::i;:::-;5710:4;5703:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;5440:281:19;;;;;;:::o;11394:1329::-;11481:29;;:::i;:::-;-1:-1:-1;;;;;11552:15:19;;11526:23;11552:15;;;:8;:15;;;;;;;;;11591:13;;11577:27;;11630:15;;;;11614:13;;;:31;;;;11673:17;;;;11655:15;;;:35;;;;11714:13;;;;11700:11;;;:27;11761:23;;;;11737:21;;;:47;11820:29;11552:15;11820:20;:29::i;:::-;11795:22;;;:54;-1:-1:-1;;;;;11901:19:19;;11860:38;11901:19;;;:12;:19;;;;;11957:30;;11930:24;;;:57;12021:13;;11901:19;;11860:38;12016:4;;-1:-1:-1;;12021:28:19;:72;;12080:13;;12021:72;;;12064:1;12021:72;12016:78;;;;;;;;;;;;;;;;;;11998:96;;12108:7;:13;;;12125:1;12108:18;:50;;;-1:-1:-1;12130:13:19;;-1:-1:-1;;12130:28:19;12108:50;12104:590;;;12464:41;12474:5;:13;;;12489:5;:15;;;12464:9;:41::i;:::-;12441:20;;;:64;12104:590;;;12541:9;12536:148;12560:15;;;:22;12556:26;;12536:148;;;12631:7;:19;;:38;12651:3;:14;;12666:1;12651:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12651:17:19;12631:38;;;;;;;;;;;;;12607:20;;;:62;;;;;;;12651:17;12584:3;12536:148;;;;12104:590;-1:-1:-1;;;11394:1329:19;;;:::o;8495:186::-;545:1:22;528:18;;;;;;;;8560:4:19;;8576:36;8594:10;8606:5;8576:17;:36::i;:::-;8622:31;8642:10;8622:19;:31::i;:::-;8670:4;8663:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;7191:206:19;545:1:22;528:18;;;;;;;;7243:4:19;;7273:10;7293:24;7273:10;7293:19;:24::i;:::-;-1:-1:-1;;;;;7347:13:19;;;;;;:8;:13;;;;;:21;;;7327:42;;7342:3;;7327:14;:42::i;:::-;7386:4;7379:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;7191:206:19;;:::o;1066:23:20:-;;;;:::o;1202:57:19:-;-1:-1:-1;;1202:57:19;:::o;6043:278::-;545:1:22;528:18;;;;;;;;6162:4:19;;6182:36;6200:10;6212:5;6182:17;:36::i;:::-;6228:24;6241:10;6228:12;:24::i;:::-;6262:31;6282:10;6262:19;:31::i;:::-;6310:4;6303:11;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;6043:278:19;;;;;:::o;8739:104::-;8821:4;:11;-1:-1:-1;;8821:15:19;8739:104;:::o;16615:148::-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;292:11:15;;-1:-1:-1;;;292:11:15;;;;:19;;307:4;292:19;271:117;;;;-1:-1:-1;;;271:117:15;;;;;;;;;16695:26:19;16713:7;16695:17;:26::i;:::-;16736:20;16748:7;16736:20;;;;;;;;;;;;;;;16615:148;:::o;16322:236::-;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;16421:28:19;16433:15;16421:11;:28::i;:::-;16413:87;;;;-1:-1:-1;;;16413:87:19;;;;;;;;;16510:41;16528:15;16545:5;16510:17;:41::i;:::-;16322:236;;:::o;1899:58:20:-;;;;;;;;;;;;;:::o;1512:844:19:-;1694:11;;-1:-1:-1;;;1694:11:19;;;;1693:12;1685:66;;;;-1:-1:-1;;;1685:66:19;;;;;;;;;1761:24;:22;:24::i;:::-;1795:6;:19;;-1:-1:-1;;;;;;1795:19:19;1804:10;1795:19;;;;1824:17;;1851:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;1873:16:19;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;1899:8:19;:20;;;1192:4;1929:25;:64;2003:3;:24;;-1:-1:-1;;;;;;2003:24:19;-1:-1:-1;;;;;2003:24:19;;;;;;;;;;;2052:16;;;-1:-1:-1;;;2052:16:19;;;;:3;;;;;:14;;:16;;;;;;;;;;;;:3;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;2052:16:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2052:16:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2052:16:19;;;;;;;;;2037:5;:32;;-1:-1:-1;;;;;2037:32:19;;;;-1:-1:-1;;;;;;2037:32:19;;;;;;;;;2139:38;;;-1:-1:-1;2139:38:19;;;2143:16;;;;;;;;2139:38;;2161:15;;;;;2139:38;2161:15;;;;;;2139:38;;;;2129:4;27:10:-1;;-1:-1;23:18;;45:23;;;2129:49:19;;;;;;;;23:18:-1;;2129:49:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2129:49:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2233:11:19;;;-1:-1:-1;;2233:8:19;:11;;-1:-1:-1;;2233:11:19;:34;2317:3;;2323:25;;2233:11;2283:66;;;;;-1:-1:-1;;;;;2317:3:19;;;;2283:66;;;;;;;;;;1512:844;;;;:::o;12777:377::-;12860:25;;:::i;:::-;12897:34;12934:15;;;:8;:15;;;;;;;;12976:20;;12959:37;;13025:22;;;;13006:16;;;:41;;;;13092:32;;;;13079:46;;:12;:46::i;:::-;13058:18;;;:67;-1:-1:-1;12777:377:19;;;:::o;698:157:17:-;782:66;698:157;:::o;1233:30:20:-;;;-1:-1:-1;;;;;1233:30:20;;:::o;8114:329:19:-;545:1:22;528:18;;;;;;;;8307:42:19;;;;;;;;;;;;;;;;;;8274:13;;528:18:22;8307:42:19;;;8325:10;;;;;;8307:42;;;;8325:10;;8307:42;8325:10;8307:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;8307:42:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8337:11:19;;-1:-1:-1;8337:11:19;;;;8307:42;;;8337:11;;8307:42;8337:11;8307:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;8307:17:19;;-1:-1:-1;;;8307:42:19:i;:::-;8299:50;;8363:11;8359:78;;;8390:36;8408:10;8420:5;8390:17;:36::i;:::-;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;;8114:329:19;;;;;;;;:::o;1816:43:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1661:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;11000:336:19:-;11049:18;;:::i;:::-;11079:26;11137:38;11150:24;;11137:12;:38::i;:::-;11204:125;;;;;;;;;11247:11;;11204:125;;11115:60;;11204:125;;;;;-1:-1:-1;11000:336:19;:::o;2480:113::-;-1:-1:-1;;;;;2563:15:19;2537:7;2563:15;;;:8;:15;;;;;:23;;;;2480:113::o;1300:137:16:-;719:9;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;1398:1;1382:6;;1361:40;;-1:-1:-1;;;;;1382:6:16;;;;1361:40;;1398:1;;1361:40;1428:1;1411:19;;-1:-1:-1;;;;;;1411:19:16;;;1300:137::o;1435:39:20:-;;;;:::o;10536:213:19:-;-1:-1:-1;;;;;10681:15:19;;10625:14;10681:15;;;:8;:15;;;;;10713:29;10681:15;10713:20;:29::i;:::-;10706:36;10536:213;-1:-1:-1;;;10536:213:19:o;4847:283::-;545:1:22;528:18;;;;;;;;4953:4:19;;4973:24;4993:3;4973:19;:24::i;:::-;-1:-1:-1;;;;;5046:13:19;;;;;;:8;:13;;;;;:21;;;5007:61;;5024:10;;5036:3;;5041;;5007:16;:61::i;:::-;5078:24;5098:3;5078:19;:24::i;515:77:16:-;553:7;579:6;-1:-1:-1;;;;;579:6:16;515:77;:::o;866:90::-;906:4;943:6;-1:-1:-1;;;;;943:6:16;929:10;:20;;866:90::o;972:20:20:-;;;;;;;;;;;;;;;-1:-1:-1;;972:20:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5807:174:19;545:1:22;528:18;;;;;;;;5872:4:19;;5888:24;5901:10;5888:12;:24::i;4524:265::-;545:1:22;528:18;;;;;;;;4589:4:19;;4619:10;4639:24;4619:10;4639:19;:24::i;:::-;-1:-1:-1;;;;;4705:13:19;;;;;;:8;:13;;;;;:21;;;4673:54;;4690:3;;;;4700;;4673:16;:54::i;:::-;4737:24;4757:3;4737:19;:24::i;4179:291::-;545:1:22;528:18;;;;;;;;4281:4:19;;4315:10;4335:24;4315:10;4335:19;:24::i;:::-;4369:39;4386:3;4391;4396;4401:6;4369:16;:39::i;:::-;4418:24;4438:3;4418:19;:24::i;:::-;4459:4;4452:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;656:21:20;;;-1:-1:-1;;;;;656:21:20;;:::o;6393:390:19:-;545:1:22;528:18;;;;;;;;6592:42:19;;;;;;;;;;;;;;;;;;6560:4;;528:18:22;6560:4:19;;6592:42;;;;6610:10;;;;;;6592:42;;;6610:10;;6592:42;6610:10;6592:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6592:42:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6622:11:19;;-1:-1:-1;6622:11:19;;;;6592:42;;;6622:11;;6592:42;6622:11;6592:42;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6592:17:19;;-1:-1:-1;;;6592:42:19:i;:::-;6576:58;;6644:36;6662:10;6674:5;6644:17;:36::i;:::-;6690:24;6703:10;6690:12;:24::i;:::-;6724:31;6744:10;6724:19;:31::i;:::-;6772:4;6765:11;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;784:28:20;;;;:::o;1550:40::-;;;;:::o;10803:137:19:-;545:1:22;528:18;;;;;;;;10870:4:19;;10886:26;10906:5;10886:19;:26::i;7457:276::-;545:1:22;528:18;;;;;;;;7579:4:19;;7613:10;7633:24;7613:10;7633:19;:24::i;:::-;7667:38;7682:8;7692:12;7667:14;:38::i;13690:2387::-;545:1:22;528:18;;;;;;;;719:9:16;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;13978:5:19;;13935:31;;;-1:-1:-1;;;13935:31:19;;;;13884:19;;-1:-1:-1;;;;;13978:5:19;;;;13935:29;;;;;;:31;;;;;;;;;;;;;;;:29;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;13935:31:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13935:31:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13935:31:19;;;;;;;;;-1:-1:-1;;;;;13935:49:19;;13914:146;;;;-1:-1:-1;;;13914:146:19;;;;;;;;;14099:3;;;-1:-1:-1;;;;;14112:24:19;;;-1:-1:-1;;;;;;14112:24:19;;;;;;14227:18;;;-1:-1:-1;;;14227:18:19;;;;14099:3;;;;;14070:26;;14099:3;;14227:16;;:18;;;;;;;;;;14070:26;14099:3;14227:18;;;5:2:-1;;;;30:1;27;20:12;5:2;14227:18:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14227:18:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14227:18:19;;;;;;;;;-1:-1:-1;14277:5:19;;:30;;-1:-1:-1;;;14277:30:19;;14197:48;;-1:-1:-1;14255:19:19;;-1:-1:-1;;;;;14277:5:19;;;;:15;;:30;;14301:4;;14277:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14277:30:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14277:30:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14277:30:19;;;;;;;;;14376:5;;14398:3;;14376:40;;-1:-1:-1;;;14376:40:19;;14255:52;;-1:-1:-1;;;;;;14376:5:19;;;;:13;;:40;;14398:3;;14255:52;;14376:40;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14376:40:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14376:40:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14376:40:19;;;;;;;;;14368:73;;;;-1:-1:-1;;;14368:73:19;;;;;;;;;14478:3;;:33;;-1:-1:-1;;;14478:33:19;;14451:24;;-1:-1:-1;;;;;14478:3:19;;:20;;:33;;14499:11;;14478:33;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14478:33:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14478:33:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14478:33:19;;;;;;;;;14964:3;;14451:60;;-1:-1:-1;;;;;;14956:31:19;;;14964:3;;14956:31;14952:122;;15019:6;-1:-1:-1;;;;;15003:42:19;;15054:7;:5;:7::i;:::-;15003:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15003:60:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15003:60:19;;;;14952:122;15626:23;15652:46;15673:24;;15652:20;:46::i;:::-;15747:25;;15626:72;;-1:-1:-1;15810:97:19;15890:16;15810:62;:15;15747:25;15810:62;:32;:62;:::i;:::-;:79;:97;:79;:97;:::i;:::-;15782:25;:125;15944:37;15965:15;15944:20;:37::i;:::-;15917:24;:64;16044:25;;15997:73;;;;;;16023:19;;16044:25;15997:73;;;;;;;;;;775:1:16;;;;;;;650:13:22;;634:12;:29;613:107;;;;-1:-1:-1;;;613:107:22;;;;;;;;13389:234:19;13543:24;;13469:15;;13587:29;13543:24;13587:12;:29::i;:::-;13577:39;;13389:234;;:::o;6925:214::-;545:1:22;528:18;;;;;;;;6994:4:19;;7024:10;7044:24;7024:10;7044:19;:24::i;:::-;7078:33;7093:3;7098:12;7078:14;:33::i;2871:169::-;-1:-1:-1;;;;;2999:25:19;;;2969:7;2999:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;2871:169::o;1377:51::-;1426:2;1377:51;:::o;1993:50:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1586:107:16:-;719:9;:7;:9::i;:::-;711:54;;;;-1:-1:-1;;;711:54:16;;;;;;;;;1658:28;1677:8;1658:18;:28::i;:::-;1586:107;:::o;1299:19:20:-;;;-1:-1:-1;;;;;1299:19:20;;:::o;9971:254:19:-;-1:-1:-1;;;;;10116:15:19;;10060:14;10116:15;;;:8;:15;;;;;10171:23;;;;10060:14;;10158:37;;:12;:37::i;:::-;10141:54;9971:254;-1:-1:-1;;;;9971:254:19:o;32554:781::-;-1:-1:-1;;;;;32643:15:19;;;32617:23;32643:15;;;:8;:15;;;;;;;;32703:12;:19;;;;;32741:3;;:20;;-1:-1:-1;;;32741:20:19;;;;32643:15;;32703:19;;32741:3;;;:18;;:20;;;;;32643:15;;32741:20;;;;;;;;:3;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;32741:20:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32741:20:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32741:20:19;;;;;;;;;32733:54;;;;-1:-1:-1;;;32733:54:19;;;;;;;;;32797:22;32822:29;32843:7;32822:20;:29::i;:::-;32797:54;-1:-1:-1;32866:18:19;;32862:467;;32927:41;;:78;;32990:14;32927:78;:62;:78;:::i;:::-;32900:105;;33039:17;;;;:37;;33061:14;33039:37;:21;:37;:::i;:::-;33019:17;;;:57;33108:15;;;;:35;;33128:14;33108:35;:19;:35;:::i;:::-;33090:15;;;:53;33171:11;;:31;;33187:14;33171:31;:15;:31;:::i;:::-;33157:11;:45;33221:35;;-1:-1:-1;;;;;33221:35:19;;;;;;;33241:14;;33221:35;;;;;;;;;;33296:5;-1:-1:-1;;;;;33275:43:19;33292:1;-1:-1:-1;;;;;33275:43:19;-1:-1:-1;;;;;;;;;;;33303:14:19;33275:43;;;;;;;;;;;;;;;32862:467;32554:781;;;;:::o;20586:733::-;20704:10;20669:23;20695:20;;;:8;:20;;;;;20733:16;20725:57;;;;-1:-1:-1;;;20725:57:19;;;;;;;;;20829:7;:15;;;20813:12;:31;;20792:106;;;;-1:-1:-1;;;20792:106:19;;;;;;;;;20909:49;20933:10;20945:12;20909:23;:49::i;:::-;21046:15;;;;:33;;21066:12;21046:33;:19;:33;:::i;:::-;21028:15;;;:51;21103:11;;:29;;21119:12;21103:29;:15;:29;:::i;:::-;21089:11;:43;21186:5;;:38;;-1:-1:-1;;;21186:38:19;;-1:-1:-1;;;;;21186:5:19;;;;:14;;:38;;21201:8;;21211:12;;21186:38;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21186:38:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21186:38:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21186:38:19;;;;;;;;;21178:72;;;;-1:-1:-1;;;21178:72:19;;;;;;;;;21266:46;;21295:1;;21275:10;;-1:-1:-1;;;;;;;;;;;21266:46:19;;;21299:12;;21266:46;;;;;;;;;;20586:733;;;:::o;9475:436::-;9557:27;;9629:10;;;;;:34;;;-1:-1:-1;;9643:5:19;:20;;9629:34;9625:280;;;9679:14;;:::i;:::-;9696:4;9701:5;9696:11;;;;;;;;;;;;;;;;;;9679:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9679:28:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9734:3;:14;;;9721:27;;9776:3;:15;;;9762:29;;9625:280;;;;-1:-1:-1;;9835:16:19;;;9849:1;9835:16;;;;;;9879:15;;;;;;;;;9835:16;9625:280;9475:436;;;:::o;17212:1755::-;17369:3;-1:-1:-1;;;;;17362:10:19;:3;-1:-1:-1;;;;;17362:10:19;;;17354:47;;;;-1:-1:-1;;;17354:47:19;;;;;;;;;-1:-1:-1;;;;;17433:13:19;;;;;;:8;:13;;;;;:21;;;:31;-1:-1:-1;17433:31:19;17412:108;;;;-1:-1:-1;;;17412:108:19;;;;;;;;;17595:25;-1:-1:-1;;;;;17638:14:19;;;;;;;17634:159;;;-1:-1:-1;;;17634:159:19;;;-1:-1:-1;;;;;;17750:23:19;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;17634:159;17844:6;17823:17;:27;;17802:107;;;;-1:-1:-1;;;17802:107:19;;;;;;;;;17985:20;18008:29;:17;18030:6;18008:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;18070:13:19;;18047:20;18070:13;;;:8;:13;;;;;:21;;;17985:52;;-1:-1:-1;18047:20:19;18070:33;;18096:6;18070:33;:25;:33;:::i;:::-;-1:-1:-1;;;;;18136:13:19;;18113:20;18136:13;;;:8;:13;;;;;:21;;;18047:56;;-1:-1:-1;18113:20:19;18136:33;;18162:6;18136:33;:25;:33;:::i;:::-;18113:56;;-1:-1:-1;;18239:17:19;:32;18235:110;;-1:-1:-1;;;;;18287:23:19;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;18235:110;18390:26;18419:38;18445:3;18450:6;18419:25;:38::i;:::-;18390:67;;18467:48;18483:3;18488:6;18496:18;18467:15;:48::i;:::-;-1:-1:-1;;;;;18559:13:19;;;;;;;:8;:13;;;;;;:21;;;;:36;;;18605:13;;;;;;;;:21;;;:36;;;18695:13;:19;:24;;;;:64;;-1:-1:-1;;;;;;18735:13:19;;;;;;:8;:13;;;;;:19;:24;18695:64;:114;;;;-1:-1:-1;;;;;;18775:13:19;;;;;;:8;:13;;;;;:19;-1:-1:-1;;18775:34:19;;18695:114;18690:190;;;-1:-1:-1;;;;;18849:13:19;;;;;;:8;:13;;;;;:19;18826:43;;18844:3;;18826:17;:43::i;:::-;18948:3;-1:-1:-1;;;;;18934:26:19;18943:3;-1:-1:-1;;;;;18934:26:19;-1:-1:-1;;;;;;;;;;;18953:6:19;18934:26;;;;;;;;;;;;;;;17212:1755;;;;;;;;;:::o;23968:518::-;24070:7;24093:14;24110:37;24123:7;:23;;;24110:12;:37::i;:::-;24093:54;;24171:36;24189:7;:17;;;24171:7;:13;;;:17;;:36;;;;:::i;:::-;24161:6;:47;24157:323;;;24337:7;:17;;;24321:7;:13;;;24312:6;:22;:42;24305:49;;;;;24157:323;24468:1;24461:8;;;;;34616:135;34679:7;34706:1;34702;:5;34698:46;;;-1:-1:-1;34716:1:19;34709:8;;34698:46;-1:-1:-1;34739:5:19;;;34732:12;;23109:789;-1:-1:-1;;23193:5:19;:20;:43;;;-1:-1:-1;23225:4:19;:11;23217:19;;23193:43;23185:70;;;;-1:-1:-1;;;23185:70:19;;;;;;;;;-1:-1:-1;;;;;23291:15:19;;23265:23;23291:15;;;:8;:15;;;;;;;;23335:13;;23395:18;;;:8;:18;;;;;;23460:15;;;;;;;23489;;;;:19;23485:288;;23524:26;23553:49;23579:5;23586:7;:15;;;23553:25;:49::i;:::-;23616:21;;;23674:15;;;;23524:78;;-1:-1:-1;23651:59:19;;23667:5;;23524:78;23651:15;:59::i;:::-;23485:288;;;;23741:21;;;23485:288;23782:25;;-1:-1:-1;;23782:25:19;;;23817;;23806:1;23817:25;;;23857:34;;23885:5;;23875:8;;-1:-1:-1;;;;;23857:34:19;;;;;23782:20;;23857:34;23109:789;;;;;;:::o;19197:1069::-;19279:5;;:42;;-1:-1:-1;;;19279:42:19;;19325:10;;-1:-1:-1;;;;;19279:5:19;;:15;;:42;;19295:10;;19315:4;;19279:42;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19279:42:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19279:42:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19279:42:19;;;;;;;;;:56;;19258:123;;;;-1:-1:-1;;;19258:123:19;;;;;;;;;19427:10;19392:23;19418:20;;;:8;:20;;;;;;;19489:5;;:57;;-1:-1:-1;;;19489:57:19;;19418:20;;-1:-1:-1;;;;;19489:5:19;;;;:18;;:57;;19427:10;19528:4;;19535:10;;19489:57;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19489:57:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19489:57:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19489:57:19;;;;;;;;;19481:91;;;;-1:-1:-1;;;19481:91:19;;;;;;;;;19590:5;;19612:3;;19590:39;;-1:-1:-1;;;19590:39:19;;-1:-1:-1;;;;;19590:5:19;;;;:13;;:39;;19612:3;;;19618:10;;19590:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19590:39:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19590:39:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19590:39:19;;;;;;;;;19582:72;;;;-1:-1:-1;;;19582:72:19;;;;;;;;;19691:3;;:32;;-1:-1:-1;;;19691:32:19;;19664:24;;-1:-1:-1;;;;;19691:3:19;;:20;;:32;;19712:10;;19691:32;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19691:32:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19691:32:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19691:32:19;;;;;;;;;19796:11;;19664:59;;-1:-1:-1;19796:27:19;;19812:10;19796:27;:15;:27;:::i;:::-;19782:11;:41;19851:15;;;;:31;;19871:10;19851:31;:19;:31;:::i;:::-;19833:15;;;:49;19951:24;;:46;;19980:16;19951:46;:28;:46;:::i;:::-;19924:24;:73;20067:24;20094:38;20115:16;20094:20;:38::i;:::-;20067:65;;20142:57;20158:10;20170;20182:16;20142:15;:57::i;:::-;20215:44;;20236:10;;20232:1;;-1:-1:-1;;;;;;;;;;;20215:44:19;;;20248:10;;20215:44;;180:513:17;410:10;-1:-1:-1;;;;;400:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;400:37:17;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;400:37:17;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;400:37:17;;;;;;;;;296:66;267:170;246:231;;;;-1:-1:-1;;;246:231:17;;;;;;;;;569:66;545:132;496:191::o;34229:155:19:-;34336:17;34369:8;;;34229:155::o;411:66:15:-;452:11;:18;;-1:-1:-1;;;;452:18:15;-1:-1:-1;;;452:18:15;;;411:66::o;34823:605:19:-;34908:15;35319:102;35395:25;;35319:58;35352:3;;;;;;;;;-1:-1:-1;;;;;35352:3:19;-1:-1:-1;;;;;35352:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35352:24:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35352:24:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35352:24:19;;;;;;;;;35319:15;;:58;:32;:58;:::i;21511:1465::-;21636:13;21661:9;21709:1;21689:10;:17;:21;21681:69;;;;-1:-1:-1;;;21681:69:19;;;;;;;;;1426:2;21768:10;:17;:43;;21760:106;;;;-1:-1:-1;;;21760:106:19;;;;;;;;;21918:11;:18;21897:10;:17;:39;21876:118;;;;-1:-1:-1;;;21876:118:19;;;;;;;;;-1:-1:-1;22153:24:19;;22191:400;22207:10;:17;22203:1;:21;22191:400;;;22287:1;22270:11;22282:1;22270:14;;;;;;;;;;;;;;:18;;;22245:124;;;;-1:-1:-1;;;22245:124:19;;;;;;;;;22416:1;-1:-1:-1;;;;;22391:27:19;:10;22402:1;22391:13;;;;;;;;;;;;;;-1:-1:-1;;;;;22391:27:19;;;22383:80;;;;-1:-1:-1;;;22383:80:19;;;;;;;;;22565:11;22577:1;22565:14;;;;;;;;;;;;;;22557:23;;22537:43;;;;22226:3;;;;;22191:400;;;22609:1;22605:5;;22600:276;22616:11;:18;22612:1;:22;22600:276;;;22835:16;1361:10;22787:24;;22769:11;22781:1;22769:14;;;;;;;;;;;;;;22761:23;;:50;22760:91;;;;;;22655:11;22667:1;22655:14;;;;;;;;;;;;;:210;;;;;;;;;;;22636:3;;;;;22600:276;;;22904:28;;;;;;;;;;;;;;;;;;;22894:4;27:10:-1;;22936:1:19;23:18:-1;;;45:23;;;-1:-1;22894:39:19;;;;;;;;22936:1;;23:18:-1;;22894:39:19;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22894:39:19;;;;;;;;;;;;;;;;:::i;:::-;;;;:43;22886:51;;22963:5;22952:17;;;;;;;;;;21511:1465;;;;;;:::o;35792:247::-;35874:23;35916:116;1119:4;35916:58;35949:3;;;;;;;;;-1:-1:-1;;;;;35949:3:19;-1:-1:-1;;;;;35949:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;36121:311:19;36211:23;36308:117;1119:4;36308:59;36341:25;;36308:15;:32;;:59;;;;:::i;2159:459:33:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:33;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;-1:-1:-1;;;2536:56:33;;;;;;;;3073:130;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;36514:311:19:-;36792:25;;36604:23;;36701:117;;:73;:15;1119:4;36701:73;:32;:73;:::i;1794:259:16:-;-1:-1:-1;;;;;1880:22:16;;1859:107;;;;-1:-1:-1;;;1859:107:16;;;;;;;;;2002:6;;;1981:38;;-1:-1:-1;;;;;1981:38:16;;;;2002:6;;;1981:38;;;2029:6;:17;;-1:-1:-1;;;;;;2029:17:16;-1:-1:-1;;;;;2029:17:16;;;;;;;;;;1794:259::o;834:176:33:-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:33;;;;;;;;28480:461:19;28602:3;;:29;;-1:-1:-1;;;28602:29:19;;28576:23;;-1:-1:-1;;;;;28602:3:19;;:20;;:29;;28623:7;;28602:29;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28602:29:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28602:29:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28602:29:19;;;;;;;;;28576:55;;28641:37;28662:15;28641:20;:37::i;:::-;;28688:30;28703:5;28710:7;28688:14;:30::i;:::-;28791:15;28764:24;;:42;28760:175;;;28822:24;:43;;;;;;;28760:175;;;28923:1;28896:24;:28;28760:175;28480:461;;;:::o;1274:134:33:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;27721:341:19:-;27917:3;;:20;;;-1:-1:-1;;;27917:20:19;;;;27814:26;;-1:-1:-1;;;;;27917:3:19;;:18;;:20;;;;;;;;;;;;;;27814:26;27917:3;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;27917:20:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27917:20:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27917:20:19;;;;;;;;;27909:54;;;;-1:-1:-1;;;27909:54:19;;;;;;;;;27994:21;28007:7;27994:12;:21::i;:::-;27973:42;;28025:30;28040:5;28047:7;28025:14;:30::i;25005:2289::-;-1:-1:-1;;;;;25162:15:19;;25136:23;25162:15;;;:8;:15;;;;;25210:13;;25162:15;;25136:23;25205:4;;-1:-1:-1;;25210:28:19;:72;;25269:13;;25210:72;;;25253:1;25210:72;25205:78;;;;;;;;;;;;;;;;;;;;25316:21;;25205:78;;-1:-1:-1;25316:25:19;25312:1976;;-1:-1:-1;25357:13:19;25373:7;25418:15;25447:1487;25463:15;;;:22;25459:26;;25447:1487;;;25510:32;25545:8;:27;25554:3;:14;;25569:1;25554:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25554:17:19;25545:27;;;;;;;;;;;;25554:17;25619:15;;:22;25545:27;;-1:-1:-1;;;25619:26:19;25613:33;;;;25752:117;;1361:10;25818:51;;25819:31;25831:3;:15;;25847:1;25831:18;;;;;;;;;;;;;;;;;;;;;25819:7;;25831:18;;;;;;;;;;;;;25819:11;:31;:::i;:::-;25818:51;;;;;;25752:117;;;25790:5;25752:117;25727:142;;25984:79;26048:14;25984:7;:19;;:38;26004:3;:14;;26019:1;26004:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26004:17:19;25984:38;;;;;;;;;;;;;;:79;:63;:79;:::i;:::-;25943:7;:19;;:38;25963:3;:14;;25978:1;25963:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25963:17:19;25943:38;;;;;;;;;;;;:120;26106:22;;;;:63;;26154:14;26106:63;:47;:63;:::i;:::-;26081:22;;;:88;26242:32;26252:5;26259:14;26242:9;:32::i;:::-;26234:40;;26360:32;26395:15;:133;;1361:10;26469:59;;26470:39;26490:3;:15;;26506:1;26490:18;;;;;;;26470:39;26469:59;;;;;;26395:133;;;26433:13;26395:133;26581:32;;;;26360:168;;-1:-1:-1;26581:83:19;;26360:168;26581:83;:57;:83;:::i;:::-;26546:32;;;:118;26745:50;26755:13;26770:24;26745:9;:50::i;:::-;26729:66;;26814:105;26831:5;26838:3;:14;;26853:1;26838:17;;;;;;;;;;;;;;;;;;26857:13;;-1:-1:-1;;;;;26838:17:19;;;;;26878:14;26894:24;26814:16;:105::i;:::-;25447:1487;;;;25487:3;;;;;25447:1487;;;25312:1976;;;;;27058:13;;;;:26;;27076:7;27058:26;:17;:26;:::i;:::-;27042:13;;;:42;27124:23;;;;:61;;27169:15;27124:61;:44;:61;:::i;:::-;27098:23;;;:87;27231:13;;27200:77;;27217:5;;;;27246:4;27252:7;27261:15;27200:16;:77::i;:::-;25005:2289;;;;;;:::o;3718:338:33:-;3804:7;3904:12;3897:5;3889:28;;;;-1:-1:-1;;;3889:28:33;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:33:o;29126:3326:19:-;-1:-1:-1;;;;;29249:15:19;;29223:23;29249:15;;;:8;:15;;;;;29297:13;;29249:15;;29223:23;29292:4;;-1:-1:-1;;29297:28:19;:72;;29356:13;;29297:72;;;29340:1;29297:72;29292:78;;;;;;;;;;;;;;;;;;29274:96;;29489:21;29513:45;29523:7;:15;;;29540:7;:17;;;29513:9;:45::i;:::-;29489:69;;29644:7;29628:13;:23;29624:77;;;-1:-1:-1;29683:7:19;29624:77;29710:26;29739:27;29752:13;29739:12;:27::i;:::-;29780:21;;29710:56;;-1:-1:-1;29780:25:19;29776:2341;;29973:13;30016:18;29821:13;30048:1586;30064:15;;;:22;30060:26;;30048:1586;;;30111:32;30146:8;:27;30155:3;:14;;30170:1;30155:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30155:17:19;30146:27;;;;;;;;;;;;30155:17;30220:15;;:22;30146:27;;-1:-1:-1;;;30220:26:19;30214:33;;;;30360:123;;1361:10;30426:57;;30427:37;30445:3;:15;;30461:1;30445:18;;;;;;;;;;;;;;;;;;;;;30427:13;;30445:18;;;;;;;;;;;;;30427:17;:37;:::i;:::-;30426:57;;;;;;30360:123;;;30398:5;30360:123;30335:148;;30526:90;30557:16;:22;;;30601:14;30526:9;:90::i;:::-;30501:16;:22;;:115;;;;30675:106;30706:7;:19;;:38;30726:3;:14;;30741:1;30726:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30726:17:19;30706:38;;;;;;;;;;;;;30766:14;30675:9;:106::i;:::-;30634:7;:19;;:38;30654:3;:14;;30669:1;30654:17;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30654:17:19;30634:38;;;;;;;;;;;;:147;30853:32;30863:5;30870:14;30853:9;:32::i;:::-;30845:40;;30976:32;31011:15;:136;;1361:10;31085:62;;31086:42;31109:3;:15;;31125:1;31109:18;;;;;;;31086:42;31085:62;;;;;;31011:136;;;31049:13;31011:136;30976:171;;31200:110;31231:16;:32;;;31285:24;31200:9;:110::i;:::-;31165:32;;;:145;31392:50;31402:13;31417:24;31392:9;:50::i;:::-;31376:66;;31461:33;31477:16;31461:15;:33::i;:::-;31513:106;31530:5;31537:3;:14;;31552:1;31537:17;;;;;;;;;;;;;;;;;31556:13;;-1:-1:-1;;;;;31537:17:19;;;;31578:14;31594:24;31513:16;:106::i;:::-;30048:1586;;;;30088:3;;;;;30048:1586;;;29776:2341;;;;;;31800:39;31810:7;:13;;;31825;31800:9;:39::i;:::-;31784:13;;;:55;31921:23;;;;31911:54;;31946:18;31911:9;:54::i;:::-;31885:23;;;:80;31980:24;31885:7;31980:15;:24::i;:::-;32019:87;32036:5;32043;32050:7;:13;;;32065:5;32072:13;32087:18;32019:16;:87::i;:::-;32216:13;32206:7;:23;32202:244;;;32266:37;32289:13;32279:7;:23;32266:12;:37::i;:::-;32245:58;;32343:54;32353:7;:23;;;32378:18;32343:9;:54::i;:::-;32317:23;;;:80;32411:24;32317:7;32411:15;:24::i;1732:187:33:-;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:33;;;;;;;;;;-1:-1:-1;;;1888:5:33;;;1732:187::o;35500:220:19:-;35577:23;35619:94;35688:3;;;;;;;;;-1:-1:-1;;;;;35688:3:19;-1:-1:-1;;;;;35688:22:19;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35688:24:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35688:24:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;35688:24:19;;;;;;;;;35644:25;;35619:51;;:7;;:51;:24;:51;:::i;33341:882::-;33555:31;33589:8;:15;33598:5;33589:15;;;;;;;;;;;33555:49;;33655:5;33644:9;-1:-1:-1;;;;;33620:128:19;33637:5;-1:-1:-1;;;;;33620:128:19;;33674:14;33702:16;33732:15;33620:128;;;;;;;;;;;;;;;;;33763:14;33759:458;;;33815:19;;;;:41;;33839:16;33815:41;:23;:41;:::i;:::-;33793:19;;;:63;33902:29;;;;:67;;33953:15;33902:67;:50;:67;:::i;:::-;33870:29;;;:99;33759:458;;;34022:48;34032:8;:19;;;34053:16;34022:9;:48::i;:::-;34000:19;;;:70;34143:29;;;;34116:90;;34190:15;34116:9;:90::i;:::-;34084:29;;;:122;33759:458;33341:882;;;;;;;:::o;36940:253::-;37008:14;37025:37;37038:7;:23;;;37025:12;:37::i;:::-;37008:54;;37105:7;:13;;;37096:6;:22;37076:7;:17;;;:42;37072:115;;;37163:13;;;;37154:22;;37134:17;;;;:42;36940:253::o;879:36316::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;879:36316:19;;;-1:-1:-1;879:36316:19;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;879:36316:19;-1:-1:-1;;;;;879:36316:19;;;;;;;;;;;-1:-1:-1;879:36316:19;;;;;;;-1:-1:-1;879:36316:19;;;-1:-1:-1;879:36316:19;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;879:36316:19;;;-1:-1:-1;879:36316:19;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;879:36316:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;879:36316:19;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;-1:-1;469:20;;509:18;498:30;;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;1037:124;1101:20;;1126:30;1101:20;1126:30;;1168:128;1243:13;;1261:30;1243:13;1261:30;;1303:134;1381:13;;1399:33;1381:13;1399:33;;1444:186;1539:20;;1564:61;1539:20;1564:61;;1638:442;;1740:3;1733:4;1725:6;1721:17;1717:27;1707:2;;1758:1;1755;1748:12;1707:2;1795:6;1782:20;1817:65;1832:49;1874:6;1832:49;;;1817:65;;;1808:74;;1902:6;1895:5;1888:21;1938:4;1930:6;1926:17;1971:4;1964:5;1960:16;2006:3;1997:6;1992:3;1988:16;1985:25;1982:2;;;2023:1;2020;2013:12;1982:2;2033:41;2067:6;2062:3;2057;2033:41;;;1700:380;;;;;;;;2088:130;2155:20;;2180:33;2155:20;2180:33;;2366:241;;2470:2;2458:9;2449:7;2445:23;2441:32;2438:2;;;2486:1;2483;2476:12;2438:2;2521:1;2538:53;2583:7;2563:9;2538:53;;2614:263;;2729:2;2717:9;2708:7;2704:23;2700:32;2697:2;;;2745:1;2742;2735:12;2697:2;2780:1;2797:64;2853:7;2833:9;2797:64;;2884:366;;;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3021:1;3018;3011:12;2973:2;3056:1;3073:53;3118:7;3098:9;3073:53;;;3063:63;;3035:97;3163:2;3181:53;3226:7;3217:6;3206:9;3202:22;3181:53;;;3171:63;;3142:98;2967:283;;;;;;3257:491;;;;3395:2;3383:9;3374:7;3370:23;3366:32;3363:2;;;3411:1;3408;3401:12;3363:2;3446:1;3463:53;3508:7;3488:9;3463:53;;;3453:63;;3425:97;3553:2;3571:53;3616:7;3607:6;3596:9;3592:22;3571:53;;;3561:63;;3532:98;3661:2;3679:53;3724:7;3715:6;3704:9;3700:22;3679:53;;;3669:63;;3640:98;3357:391;;;;;;3755:366;;;3876:2;3864:9;3855:7;3851:23;3847:32;3844:2;;;3892:1;3889;3882:12;3844:2;3927:1;3944:53;3989:7;3969:9;3944:53;;;3934:63;;3906:97;4034:2;4052:53;4097:7;4088:6;4077:9;4073:22;4052:53;;4128:795;;;;;;4332:2;4320:9;4311:7;4307:23;4303:32;4300:2;;;4348:1;4345;4338:12;4300:2;4383:31;;4434:18;4423:30;;4420:2;;;4466:1;4463;4456:12;4420:2;4494:80;4566:7;4557:6;4546:9;4542:22;4494:80;;;4484:90;;;;4362:218;4639:2;4628:9;4624:18;4611:32;4663:18;4655:6;4652:30;4649:2;;;4695:1;4692;4685:12;4649:2;4723:79;4794:7;4785:6;4774:9;4770:22;4723:79;;;4713:89;;;;4590:218;4839:2;4857:50;4899:7;4890:6;4879:9;4875:22;4857:50;;;4847:60;;4818:95;4294:629;;;;;;;;;4930:257;;5042:2;5030:9;5021:7;5017:23;5013:32;5010:2;;;5058:1;5055;5048:12;5010:2;5093:1;5110:61;5163:7;5143:9;5110:61;;5194:263;;5309:2;5297:9;5288:7;5284:23;5280:32;5277:2;;;5325:1;5322;5315:12;5277:2;5360:1;5377:64;5433:7;5413:9;5377:64;;5464:885;;;;;5667:3;5655:9;5646:7;5642:23;5638:33;5635:2;;;5684:1;5681;5674:12;5635:2;5719:1;5736:81;5809:7;5789:9;5736:81;;;5726:91;;5698:125;5882:2;5871:9;5867:18;5854:32;5906:18;5898:6;5895:30;5892:2;;;5938:1;5935;5928:12;5892:2;5958:63;6013:7;6004:6;5993:9;5989:22;5958:63;;;5948:73;;5833:194;6086:2;6075:9;6071:18;6058:32;6110:18;6102:6;6099:30;6096:2;;;6142:1;6139;6132:12;6096:2;6162:63;6217:7;6208:6;6197:9;6193:22;6162:63;;;6152:73;;6037:194;6262:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;;;6270:63;;6241:98;5629:720;;;;;;;;6356:241;;6460:2;6448:9;6439:7;6435:23;6431:32;6428:2;;;6476:1;6473;6466:12;6428:2;6511:1;6528:53;6573:7;6553:9;6528:53;;6874:801;;;;;;7081:2;7069:9;7060:7;7056:23;7052:32;7049:2;;;7097:1;7094;7087:12;7049:2;7132:1;7149:53;7194:7;7174:9;7149:53;;;7139:63;;7111:97;7267:2;7256:9;7252:18;7239:32;7291:18;7283:6;7280:30;7277:2;;;7323:1;7320;7313:12;7277:2;7351:80;7423:7;7414:6;7403:9;7399:22;7351:80;;;7341:90;;;;7218:219;7496:2;7485:9;7481:18;7468:32;7520:18;7512:6;7509:30;7506:2;;;7552:1;7549;7542:12;7506:2;7580:79;7651:7;7642:6;7631:9;7627:22;7580:79;;;7570:89;;;;7447:218;7043:632;;;;;;;;;7682:366;;;7803:2;7791:9;7782:7;7778:23;7774:32;7771:2;;;7819:1;7816;7809:12;7771:2;7854:1;7871:53;7916:7;7896:9;7871:53;;8055:399;;;8187:2;8175:9;8166:7;8162:23;8158:32;8155:2;;;8203:1;8200;8193:12;8155:2;8238:1;8255:64;8311:7;8291:9;8255:64;;;8245:74;;8217:108;8356:2;8374:64;8430:7;8421:6;8410:9;8406:22;8374:64;;8462:173;;8549:46;8591:3;8583:6;8549:46;;;-1:-1;;8624:4;8615:14;;8542:93;8644:169;;8729:44;8769:3;8761:6;8729:44;;8821:142;8912:45;8951:5;8912:45;;;8907:3;8900:58;8894:69;;;8970:103;9043:24;9061:5;9043:24;;9231:690;;9376:54;9424:5;9376:54;;;9443:86;9522:6;9517:3;9443:86;;;9436:93;;9550:56;9600:5;9550:56;;;9626:7;9654:1;9639:260;9664:6;9661:1;9658:13;9639:260;;;9731:6;9725:13;9752:63;9811:3;9796:13;9752:63;;;9745:70;;9832:60;9885:6;9832:60;;;9822:70;-1:-1;;9686:1;9679:9;9639:260;;;-1:-1;9912:3;;9355:566;-1:-1;;;;;9355:566;9958:682;;10101:53;10148:5;10101:53;;;10167:85;10245:6;10240:3;10167:85;;;10160:92;;10273:55;10322:5;10273:55;;;10348:7;10376:1;10361:257;10386:6;10383:1;10380:13;10361:257;;;10453:6;10447:13;10474:61;10531:3;10516:13;10474:61;;;10467:68;;10552:59;10604:6;10552:59;;;10542:69;-1:-1;;10408:1;10401:9;10361:257;;10648:104;10725:21;10740:5;10725:21;;10759:113;10842:24;10860:5;10842:24;;10879:182;10990:65;11049:5;10990:65;;11233:347;;11345:39;11378:5;11345:39;;;11396:71;11460:6;11455:3;11396:71;;;11389:78;;11472:52;11517:6;11512:3;11505:4;11498:5;11494:16;11472:52;;;11545:29;11567:6;11545:29;;;11536:39;;;;11325:255;-1:-1;;;11325:255;11934:364;;12094:67;12158:2;12153:3;12094:67;;;-1:-1;;;12174:87;;12289:2;12280:12;;12080:218;-1:-1;;12080:218;12307:465;;12467:67;12531:2;12526:3;12467:67;;;12567:66;12547:87;;-1:-1;;;12663:2;12654:12;;12647:88;12763:2;12754:12;;12453:319;-1:-1;;12453:319;12781:364;;12941:67;13005:2;13000:3;12941:67;;;-1:-1;;;13021:87;;13136:2;13127:12;;12927:218;-1:-1;;12927:218;13154:465;;13314:67;13378:2;13373:3;13314:67;;;13414:66;13394:87;;-1:-1;;;13510:2;13501:12;;13494:88;13610:2;13601:12;;13300:319;-1:-1;;13300:319;13628:364;;13788:67;13852:2;13847:3;13788:67;;;13888:66;13868:87;;13983:2;13974:12;;13774:218;-1:-1;;13774:218;14001:364;;14161:67;14225:2;14220:3;14161:67;;;-1:-1;;;14241:87;;14356:2;14347:12;;14147:218;-1:-1;;14147:218;14374:364;;14534:67;14598:2;14593:3;14534:67;;;14634:66;14614:87;;14729:2;14720:12;;14520:218;-1:-1;;14520:218;14747:465;;14907:67;14971:2;14966:3;14907:67;;;15007:66;14987:87;;-1:-1;;;15103:2;15094:12;;15087:88;15203:2;15194:12;;14893:319;-1:-1;;14893:319;15221:364;;15381:67;15445:2;15440:3;15381:67;;;-1:-1;;;15461:87;;15576:2;15567:12;;15367:218;-1:-1;;15367:218;15594:465;;15754:67;15818:2;15813:3;15754:67;;;15854:66;15834:87;;-1:-1;;;15950:2;15941:12;;15934:88;16050:2;16041:12;;15740:319;-1:-1;;15740:319;16068:465;;16228:67;16292:2;16287:3;16228:67;;;16328:66;16308:87;;-1:-1;;;16424:2;16415:12;;16408:88;16524:2;16515:12;;16214:319;-1:-1;;16214:319;16542:364;;16702:67;16766:2;16761:3;16702:67;;;16802:66;16782:87;;16897:2;16888:12;;16688:218;-1:-1;;16688:218;16915:364;;17075:67;17139:2;17134:3;17075:67;;;17175:66;17155:87;;17270:2;17261:12;;17061:218;-1:-1;;17061:218;17288:465;;17448:67;17512:2;17507:3;17448:67;;;17548:66;17528:87;;-1:-1;;;17644:2;17635:12;;17628:88;17744:2;17735:12;;17434:319;-1:-1;;17434:319;17762:364;;17922:67;17986:2;17981:3;17922:67;;;-1:-1;;;18002:87;;18117:2;18108:12;;17908:218;-1:-1;;17908:218;18135:465;;18295:67;18359:2;18354:3;18295:67;;;18395:66;18375:87;;-1:-1;;;18491:2;18482:12;;18475:88;18591:2;18582:12;;18281:319;-1:-1;;18281:319;18609:364;;18769:67;18833:2;18828:3;18769:67;;;18869:66;18849:87;;18964:2;18955:12;;18755:218;-1:-1;;18755:218;18982:364;;19142:67;19206:2;19201:3;19142:67;;;19242:66;19222:87;;19337:2;19328:12;;19128:218;-1:-1;;19128:218;19355:364;;19515:67;19579:2;19574:3;19515:67;;;19615:66;19595:87;;19710:2;19701:12;;19501:218;-1:-1;;19501:218;19728:364;;19888:67;19952:2;19947:3;19888:67;;;-1:-1;;;19968:87;;20083:2;20074:12;;19874:218;-1:-1;;19874:218;20101:465;;20261:67;20325:2;20320:3;20261:67;;;20361:66;20341:87;;-1:-1;;;20457:2;20448:12;;20441:88;20557:2;20548:12;;20247:319;-1:-1;;20247:319;20575:465;;20735:67;20799:2;20794:3;20735:67;;;20835:66;20815:87;;-1:-1;;;20931:2;20922:12;;20915:88;21031:2;21022:12;;20721:319;-1:-1;;20721:319;21049:465;;21209:67;21273:2;21268:3;21209:67;;;21309:66;21289:87;;-1:-1;;;21405:2;21396:12;;21389:88;21505:2;21496:12;;21195:319;-1:-1;;21195:319;21523:364;;21683:67;21747:2;21742:3;21683:67;;;21783:66;21763:87;;21878:2;21869:12;;21669:218;-1:-1;;21669:218;21896:465;;22056:67;22120:2;22115:3;22056:67;;;22156:66;22136:87;;-1:-1;;;22252:2;22243:12;;22236:88;22352:2;22343:12;;22042:319;-1:-1;;22042:319;22454:1474;22683:22;;22615:5;22606:15;;;22711:62;22610:3;22683:22;22711:62;;;22636:143;22855:4;22848:5;22844:16;22838:23;22867:63;22924:4;22919:3;22915:14;22901:12;22867:63;;;22789:147;23014:4;23007:5;23003:16;22997:23;23026:63;23083:4;23078:3;23074:14;23060:12;23026:63;;;22946:149;23169:4;23162:5;23158:16;23152:23;23181:63;23238:4;23233:3;23229:14;23215:12;23181:63;;;23105:145;23334:4;23327:5;23323:16;23317:23;23346:63;23403:4;23398:3;23394:14;23380:12;23346:63;;;23260:155;23500:4;23493:5;23489:16;23483:23;23512:63;23569:4;23564:3;23560:14;23546:12;23512:63;;;23425:156;23668:4;23661:5;23657:16;23651:23;23680:63;23737:4;23732:3;23728:14;23714:12;23680:63;;;23591:158;23832:4;23825:5;23821:16;23815:23;23844:63;23901:4;23896:3;23892:14;23878:12;23844:63;;24010:503;24234:22;;24161:4;24152:14;;;24262:62;24156:3;24234:22;24262:62;;;24181:149;24417:4;24410:5;24406:16;24400:23;24429:63;24486:4;24481:3;24477:14;24463:12;24429:63;;24597:656;24820:22;;24750:4;24741:14;;;24848:62;24745:3;24820:22;24848:62;;;24770:146;24995:4;24988:5;24984:16;24978:23;25007:63;25064:4;25059:3;25055:14;25041:12;25007:63;;;24926:150;25157:4;25150:5;25146:16;25140:23;25169:63;25226:4;25221:3;25217:14;25203:12;25169:63;;25490:100;25561:23;25578:5;25561:23;;25714:213;25832:2;25817:18;;25846:71;25821:9;25890:6;25846:71;;25934:340;26088:2;26073:18;;26102:79;26077:9;26154:6;26102:79;;;26192:72;26260:2;26249:9;26245:18;26236:6;26192:72;;26281:451;26463:2;26448:18;;26477:79;26452:9;26529:6;26477:79;;;26567:72;26635:2;26624:9;26620:18;26611:6;26567:72;;;26650;26718:2;26707:9;26703:18;26694:6;26650:72;;26739:324;26885:2;26870:18;;26899:71;26874:9;26943:6;26899:71;;;26981:72;27049:2;27038:9;27034:18;27025:6;26981:72;;27070:616;27314:2;27328:47;;;27299:18;;27389:108;27299:18;27483:6;27389:108;;;27381:116;;27545:9;27539:4;27535:20;27530:2;27519:9;27515:18;27508:48;27570:106;27671:4;27662:6;27570:106;;27693:201;27805:2;27790:18;;27819:65;27794:9;27857:6;27819:65;;27901:423;28069:2;28054:18;;28083:65;28058:9;28121:6;28083:65;;;28159:72;28227:2;28216:9;28212:18;28203:6;28159:72;;28331:213;28449:2;28434:18;;28463:71;28438:9;28507:6;28463:71;;28551:269;28697:2;28682:18;;28711:99;28686:9;28783:6;28711:99;;29079:293;29213:2;29227:47;;;29198:18;;29288:74;29198:18;29348:6;29288:74;;29687:407;29878:2;29892:47;;;29863:18;;29953:131;29863:18;29953:131;;30101:407;30292:2;30306:47;;;30277:18;;30367:131;30277:18;30367:131;;30515:407;30706:2;30720:47;;;30691:18;;30781:131;30691:18;30781:131;;30929:407;31120:2;31134:47;;;31105:18;;31195:131;31105:18;31195:131;;31343:407;31534:2;31548:47;;;31519:18;;31609:131;31519:18;31609:131;;31757:407;31948:2;31962:47;;;31933:18;;32023:131;31933:18;32023:131;;32171:407;32362:2;32376:47;;;32347:18;;32437:131;32347:18;32437:131;;32585:407;32776:2;32790:47;;;32761:18;;32851:131;32761:18;32851:131;;32999:407;33190:2;33204:47;;;33175:18;;33265:131;33175:18;33265:131;;33413:407;33604:2;33618:47;;;33589:18;;33679:131;33589:18;33679:131;;33827:407;34018:2;34032:47;;;34003:18;;34093:131;34003:18;34093:131;;34241:407;34432:2;34446:47;;;34417:18;;34507:131;34417:18;34507:131;;34655:407;34846:2;34860:47;;;34831:18;;34921:131;34831:18;34921:131;;35069:407;35260:2;35274:47;;;35245:18;;35335:131;35245:18;35335:131;;35483:407;35674:2;35688:47;;;35659:18;;35749:131;35659:18;35749:131;;35897:407;36088:2;36102:47;;;36073:18;;36163:131;36073:18;36163:131;;36311:407;36502:2;36516:47;;;36487:18;;36577:131;36487:18;36577:131;;36725:407;36916:2;36930:47;;;36901:18;;36991:131;36901:18;36991:131;;37139:407;37330:2;37344:47;;;37315:18;;37405:131;37315:18;37405:131;;37553:407;37744:2;37758:47;;;37729:18;;37819:131;37729:18;37819:131;;37967:407;38158:2;38172:47;;;38143:18;;38233:131;38143:18;38233:131;;38381:407;38572:2;38586:47;;;38557:18;;38647:131;38557:18;38647:131;;38795:407;38986:2;39000:47;;;38971:18;;39061:131;38971:18;39061:131;;39209:407;39400:2;39414:47;;;39385:18;;39475:131;39385:18;39475:131;;39623:407;39814:2;39828:47;;;39799:18;;39889:131;39799:18;39889:131;;40037:350;40223:3;40208:19;;40238:139;40212:9;40350:6;40238:139;;40394:329;40570:2;40555:18;;40584:129;40559:9;40686:6;40584:129;;40730:333;40908:2;40893:18;;40922:131;40897:9;41026:6;40922:131;;41290:727;41562:2;41547:18;;41576:71;41551:9;41620:6;41576:71;;;41695:9;41689:4;41685:20;41680:2;41669:9;41665:18;41658:48;41720:108;41823:4;41814:6;41720:108;;;41712:116;;41876:9;41870:4;41866:20;41861:2;41850:9;41846:18;41839:48;41901:106;42002:4;41993:6;41901:106;;;41893:114;41533:484;-1:-1;;;;;41533:484;42024:324;42170:2;42155:18;;42184:71;42159:9;42228:6;42184:71;;42355:435;42529:2;42514:18;;42543:71;42518:9;42587:6;42543:71;;42797:659;43027:3;43012:19;;43042:71;43016:9;43086:6;43042:71;;;43124:72;43192:2;43181:9;43177:18;43168:6;43124:72;;;43207;43275:2;43264:9;43260:18;43251:6;43207:72;;;43290;43358:2;43347:9;43343:18;43334:6;43290:72;;;43373:73;43441:3;43430:9;43426:19;43417:6;43373:73;;;42998:458;;;;;;;;;43463:209;43579:2;43564:18;;43593:69;43568:9;43635:6;43593:69;;43679:256;43741:2;43735:9;43767:17;;;43842:18;43827:34;;43863:22;;;43824:62;43821:2;;;43899:1;43896;43889:12;43821:2;43915;43908:22;43719:216;;-1:-1;43719:216;43942:322;;44086:18;44078:6;44075:30;44072:2;;;44118:1;44115;44108:12;44072:2;-1:-1;44249:4;44185;44162:17;;;;-1:-1;;44158:33;44239:15;;44009:255;44271:151;44395:4;44386:14;;44343:79;44586:137;44689:12;;44660:63;45357:178;45475:19;;;45524:4;45515:14;;45468:67;45901:91;;45963:24;45981:5;45963:24;;45999:85;46065:13;46058:21;;46041:43;46170:119;;46260:24;46278:5;46260:24;;46296:121;-1:-1;;;;;46358:54;;46341:76;46503:88;46575:10;46564:22;;46547:44;46598:129;;46685:37;46716:5;46685:37;;47596:145;47677:6;47672:3;47667;47654:30;-1:-1;47733:1;47715:16;;47708:27;47647:94;47750:268;47815:1;47822:101;47836:6;47833:1;47830:13;47822:101;;;47903:11;;;47897:18;47884:11;;;47877:39;47858:2;47851:10;47822:101;;;47938:6;47935:1;47932:13;47929:2;;;-1:-1;;48003:1;47985:16;;47978:27;47799:219;48026:97;48114:2;48094:14;-1:-1;;48090:28;;48074:49;48131:117;48200:24;48218:5;48200:24;;;48193:5;48190:35;48180:2;;48239:1;48236;48229:12;48255:111;48321:21;48336:5;48321:21;;48373:117;48442:24;48460:5;48442:24;;48497:173;48594:52;48640:5;48594:52;",
  "source": "/**\n * Because the use of ABIEncoderV2 , the pragma should be locked above 0.5.10 ,\n * as there is a known bug in array storage:\n * https://blog.ethereum.org/2019/06/25/solidity-storage-array-bugs/\n */\npragma solidity >=0.5.10 <0.6.0;\npragma experimental ABIEncoderV2;\n\nimport {Proxiable} from \"./Proxiable.sol\";\nimport {Ownable} from \"./Ownable.sol\";\nimport {LibraryLock} from \"./LibraryLock.sol\";\nimport {SafeMath} from \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport {ReentrancyGuard} from \"./ReentrancyGuard.sol\";\nimport {RTokenStructs} from \"./RTokenStructs.sol\";\nimport {RTokenStorage} from \"./RTokenStorage.sol\";\nimport {IERC20, IRToken} from \"./IRToken.sol\";\nimport {IRTokenAdmin} from \"./IRTokenAdmin.sol\";\nimport {IAllocationStrategy} from \"./IAllocationStrategy.sol\";\n\n/**\n * @notice RToken an ERC20 token that is 1:1 redeemable to its underlying ERC20 token.\n */\ncontract RToken is\n    IRToken,\n    IRTokenAdmin,\n    RTokenStorage,\n    Ownable,\n    Proxiable,\n    LibraryLock,\n    ReentrancyGuard {\n    using SafeMath for uint256;\n\n\n    uint256 public constant ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE = 1e18;\n    uint256 public constant INITIAL_SAVING_ASSET_CONVERSION_RATE = 1e18;\n    uint256 public constant MAX_UINT256 = uint256(int256(-1));\n    uint256 public constant SELF_HAT_ID = MAX_UINT256;\n    uint32 public constant PROPORTION_BASE = 0xFFFFFFFF;\n    uint256 public constant MAX_NUM_HAT_RECIPIENTS = 50;\n\n    /**\n     * @notice Create rToken linked with cToken at `cToken_`\n     */\n    function initialize(\n        IAllocationStrategy allocationStrategy,\n        string memory name_,\n        string memory symbol_,\n        uint256 decimals_) public {\n        require(!initialized, \"The library has already been initialized.\");\n        LibraryLock.initialize();\n        _owner = msg.sender;\n        _guardCounter = 1;\n        name = name_;\n        symbol = symbol_;\n        decimals = decimals_;\n        savingAssetConversionRate = INITIAL_SAVING_ASSET_CONVERSION_RATE;\n        ias = allocationStrategy;\n        token = IERC20(ias.underlying());\n\n        // special hat aka. zero hat : hatID = 0\n        hats.push(Hat(new address[](0), new uint32[](0)));\n\n        // everyone is using it by default!\n        hatStats[0].useCount = MAX_UINT256;\n\n        emit AllocationStrategyChanged(address(ias), savingAssetConversionRate);\n    }\n\n    //\n    // ERC20 Interface\n    //\n\n    /**\n     * @notice Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address owner) external view returns (uint256) {\n        return accounts[owner].rAmount;\n    }\n\n    /**\n     * @notice Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through `transferFrom`. This is\n     * zero by default.\n     *\n     * This value changes when `approve` or `transferFrom` are called.\n     */\n    function allowance(address owner, address spender)\n        external\n        view\n        returns (uint256)\n    {\n        return transferAllowances[owner][spender];\n    }\n\n    /**\n     * @notice Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * > Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an `Approval` event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool) {\n        address src = msg.sender;\n        transferAllowances[src][spender] = amount;\n        emit Approval(src, spender, amount);\n        return true;\n    }\n\n    /**\n     * @notice Moves `amount` tokens from the caller's account to `dst`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a `Transfer` event.\n     * May also emit `InterestPaid` event.\n     */\n    function transfer(address dst, uint256 amount)\n        external\n        nonReentrant\n        returns (bool)\n    {\n        address src = msg.sender;\n        payInterestInternal(src);\n        transferInternal(src, src, dst, amount);\n        payInterestInternal(dst);\n        return true;\n    }\n\n    /// @dev IRToken.transferAll implementation\n    function transferAll(address dst) external nonReentrant returns (bool) {\n        address src = msg.sender;\n        payInterestInternal(src);\n        transferInternal(src, src, dst, accounts[src].rAmount);\n        payInterestInternal(dst);\n        return true;\n    }\n\n    /// @dev IRToken.transferAllFrom implementation\n    function transferAllFrom(address src, address dst)\n        external\n        nonReentrant\n        returns (bool)\n    {\n        payInterestInternal(src);\n        transferInternal(msg.sender, src, dst, accounts[src].rAmount);\n        payInterestInternal(dst);\n        return true;\n    }\n\n    /**\n     * @notice Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a `Transfer` event.\n     */\n    function transferFrom(address src, address dst, uint256 amount)\n        external\n        nonReentrant\n        returns (bool)\n    {\n        payInterestInternal(src);\n        transferInternal(msg.sender, src, dst, amount);\n        payInterestInternal(dst);\n        return true;\n    }\n\n    //\n    // rToken interface\n    //\n\n    /// @dev IRToken.mint implementation\n    function mint(uint256 mintAmount) external nonReentrant returns (bool) {\n        mintInternal(mintAmount);\n        payInterestInternal(msg.sender);\n        return true;\n    }\n\n    /// @dev IRToken.mintWithSelectedHat implementation\n    function mintWithSelectedHat(uint256 mintAmount, uint256 hatID)\n        external\n        nonReentrant\n        returns (bool)\n    {\n        changeHatInternal(msg.sender, hatID);\n        mintInternal(mintAmount);\n        payInterestInternal(msg.sender);\n        return true;\n    }\n\n    /**\n     * @dev IRToken.mintWithNewHat implementation\n     */\n    function mintWithNewHat(\n        uint256 mintAmount,\n        address[] calldata recipients,\n        uint32[] calldata proportions\n    ) external nonReentrant returns (bool) {\n        uint256 hatID = createHatInternal(recipients, proportions);\n        changeHatInternal(msg.sender, hatID);\n        mintInternal(mintAmount);\n        payInterestInternal(msg.sender);\n        return true;\n    }\n\n    /**\n     * @dev IRToken.redeem implementation\n     *      It withdraws equal amount of initially supplied underlying assets\n     */\n    function redeem(uint256 redeemTokens) external nonReentrant returns (bool) {\n        address src = msg.sender;\n        payInterestInternal(src);\n        redeemInternal(src, redeemTokens);\n        return true;\n    }\n\n    /// @dev IRToken.redeemAll implementation\n    function redeemAll() external nonReentrant returns (bool) {\n        address src = msg.sender;\n        payInterestInternal(src);\n        redeemInternal(src, accounts[src].rAmount);\n        return true;\n    }\n\n    /// @dev IRToken.redeemAndTransfer implementation\n    function redeemAndTransfer(address redeemTo, uint256 redeemTokens)\n        external\n        nonReentrant\n        returns (bool)\n    {\n        address src = msg.sender;\n        payInterestInternal(src);\n        redeemInternal(redeemTo, redeemTokens);\n        return true;\n    }\n\n    /// @dev IRToken.redeemAndTransferAll implementation\n    function redeemAndTransferAll(address redeemTo)\n        external\n        nonReentrant\n        returns (bool)\n    {\n        address src = msg.sender;\n        payInterestInternal(src);\n        redeemInternal(redeemTo, accounts[src].rAmount);\n        return true;\n    }\n\n    /// @dev IRToken.createHat implementation\n    function createHat(\n        address[] calldata recipients,\n        uint32[] calldata proportions,\n        bool doChangeHat\n    ) external nonReentrant returns (uint256 hatID) {\n        hatID = createHatInternal(recipients, proportions);\n        if (doChangeHat) {\n            changeHatInternal(msg.sender, hatID);\n        }\n    }\n\n    /// @dev IRToken.changeHat implementation\n    function changeHat(uint256 hatID) external nonReentrant returns (bool) {\n        changeHatInternal(msg.sender, hatID);\n        payInterestInternal(msg.sender);\n        return true;\n    }\n\n    /// @dev IRToken.getMaximumHatID implementation\n    function getMaximumHatID() external view returns (uint256 hatID) {\n        return hats.length - 1;\n    }\n\n    /// @dev IRToken.getHatByAddress implementation\n    function getHatByAddress(address owner)\n        external\n        view\n        returns (\n            uint256 hatID,\n            address[] memory recipients,\n            uint32[] memory proportions\n        )\n    {\n        hatID = accounts[owner].hatID;\n        (recipients, proportions) = _getHatByID(hatID);\n    }\n\n    /// @dev IRToken.getHatByID implementation\n    function getHatByID(uint256 hatID)\n        external\n        view\n        returns (address[] memory recipients, uint32[] memory proportions) {\n        (recipients, proportions) = _getHatByID(hatID);\n    }\n\n    function _getHatByID(uint256 hatID)\n        private\n        view\n        returns (address[] memory recipients, uint32[] memory proportions) {\n        if (hatID != 0 && hatID != SELF_HAT_ID) {\n            Hat memory hat = hats[hatID];\n            recipients = hat.recipients;\n            proportions = hat.proportions;\n        } else {\n            recipients = new address[](0);\n            proportions = new uint32[](0);\n        }\n    }\n\n    /// @dev IRToken.receivedSavingsOf implementation\n    function receivedSavingsOf(address owner)\n        external\n        view\n        returns (uint256 amount)\n    {\n        Account storage account = accounts[owner];\n        uint256 rGross = sInternalToR(account.sInternalAmount);\n        return rGross;\n    }\n\n    /// @dev IRToken.receivedLoanOf implementation\n    function receivedLoanOf(address owner)\n        external\n        view\n        returns (uint256 amount)\n    {\n        Account storage account = accounts[owner];\n        return account.lDebt;\n    }\n\n    /// @dev IRToken.interestPayableOf implementation\n    function interestPayableOf(address owner)\n        external\n        view\n        returns (uint256 amount)\n    {\n        Account storage account = accounts[owner];\n        return getInterestPayableOf(account);\n    }\n\n    /// @dev IRToken.payInterest implementation\n    function payInterest(address owner) external nonReentrant returns (bool) {\n        payInterestInternal(owner);\n        return true;\n    }\n\n    /// @dev IRToken.getAccountStats implementation!1\n    function getGlobalStats() external view returns (GlobalStats memory) {\n        uint256 totalSavingsAmount;\n        totalSavingsAmount += sOriginalToR(savingAssetOrignalAmount);\n        return\n            GlobalStats({\n                totalSupply: totalSupply,\n                totalSavingsAmount: totalSavingsAmount\n            });\n    }\n\n    /// @dev IRToken.getAccountStats implementation\n    function getAccountStats(address owner)\n        external\n        view\n        returns (AccountStatsView memory stats)\n    {\n        Account storage account = accounts[owner];\n        stats.hatID = account.hatID;\n        stats.rAmount = account.rAmount;\n        stats.rInterest = account.rInterest;\n        stats.lDebt = account.lDebt;\n        stats.sInternalAmount = account.sInternalAmount;\n\n        stats.rInterestPayable = getInterestPayableOf(account);\n\n        AccountStatsStored storage statsStored = accountStats[owner];\n        stats.cumulativeInterest = statsStored.cumulativeInterest;\n\n        Hat storage hat = hats[account.hatID == SELF_HAT_ID\n            ? 0\n            : account.hatID];\n        if (account.hatID == 0 || account.hatID == SELF_HAT_ID) {\n            // Self-hat has storage optimization for lRecipients.\n            // We use the account invariant to calculate lRecipientsSum instead,\n            // so it does look like a tautology indeed.\n            // Check RTokenStructs documentation for more info.\n            stats.lRecipientsSum = gentleSub(stats.rAmount, stats.rInterest);\n        } else {\n            for (uint256 i = 0; i < hat.proportions.length; ++i) {\n                stats.lRecipientsSum += account.lRecipients[hat.recipients[i]];\n            }\n        }\n\n        return stats;\n    }\n\n    /// @dev IRToken.getHatStats implementation\n    function getHatStats(uint256 hatID)\n        external\n        view\n        returns (HatStatsView memory stats) {\n        HatStatsStored storage statsStored = hatStats[hatID];\n        stats.useCount = statsStored.useCount;\n        stats.totalLoans = statsStored.totalLoans;\n\n        stats.totalSavings = sInternalToR(statsStored.totalInternalSavings);\n        return stats;\n    }\n\n    /// @dev IRToken.getCurrentSavingStrategy implementation\n    function getCurrentSavingStrategy() external view returns (address) {\n        return address(ias);\n    }\n\n    /// @dev IRToken.getSavingAssetBalance implementation\n    function getSavingAssetBalance()\n        external\n        view\n        returns (uint256 rAmount, uint256 sOriginalAmount)\n    {\n        sOriginalAmount = savingAssetOrignalAmount;\n        rAmount = sOriginalToR(sOriginalAmount);\n    }\n\n    /// @dev IRToken.changeAllocationStrategy implementation\n    function changeAllocationStrategy(address allocationStrategy_)\n        external\n        nonReentrant\n        onlyOwner\n    {\n        IAllocationStrategy allocationStrategy = IAllocationStrategy(allocationStrategy_);\n        require(\n            allocationStrategy.underlying() == address(token),\n            \"New strategy should have the same underlying asset\"\n        );\n        IAllocationStrategy oldIas = ias;\n        ias = allocationStrategy;\n        // redeem everything from the old strategy\n        (uint256 sOriginalBurned, ) = oldIas.redeemAll();\n        uint256 totalAmount = token.balanceOf(address(this));\n        // invest everything into the new strategy\n        require(token.approve(address(ias), totalAmount), \"token approve failed\");\n        uint256 sOriginalCreated = ias.investUnderlying(totalAmount);\n\n        // give back the ownership of the old allocation strategy to the admin\n        // unless we are simply switching to the same allocaiton Strategy\n        //\n        //  - But why would we switch to the same allocation strategy?\n        //  - This is a special case where one could pick up the unsoliciated\n        //    savings from the allocation srategy contract as extra \"interest\"\n        //    for all rToken holders.\n        if (address(ias) != address(oldIas)) {\n            Ownable(address(oldIas)).transferOwnership(address(owner()));\n        }\n\n        // calculate new saving asset conversion rate\n        //\n        // NOTE:\n        //   - savingAssetConversionRate should be scaled by 1e18\n        //   - to keep internalSavings constant:\n        //     internalSavings == sOriginalBurned * savingAssetConversionRateOld\n        //     internalSavings == sOriginalCreated * savingAssetConversionRateNew\n        //     =>\n        //     savingAssetConversionRateNew = sOriginalBurned\n        //          * savingAssetConversionRateOld\n        //          / sOriginalCreated\n        //\n\n        uint256 sInternalAmount = sOriginalToSInternal(savingAssetOrignalAmount);\n        uint256 savingAssetConversionRateOld = savingAssetConversionRate;\n        savingAssetConversionRate = sOriginalBurned\n            .mul(savingAssetConversionRateOld)\n            .div(sOriginalCreated);\n        savingAssetOrignalAmount = sInternalToSOriginal(sInternalAmount);\n\n        emit AllocationStrategyChanged(allocationStrategy_, savingAssetConversionRate);\n    }\n\n    /// @dev IRToken.changeHatFor implementation\n    function getCurrentAllocationStrategy()\n        external view returns (address allocationStrategy) {\n        return address(ias);\n    }\n\n    /// @dev IRToken.changeHatFor implementation\n    function changeHatFor(address contractAddress, uint256 hatID) external onlyOwner {\n        require(_isContract(contractAddress), \"Admin can only change hat for contract address\");\n        changeHatInternal(contractAddress, hatID);\n    }\n\n    /// @dev Update the rToken logic contract code\n    function updateCode(address newCode) external onlyOwner delegatedOnly {\n        updateCodeAddress(newCode);\n        emit CodeUpdated(newCode);\n    }\n\n    /**\n     * @dev Transfer `tokens` tokens from `src` to `dst` by `spender`\n            Called by both `transfer` and `transferFrom` internally\n     * @param spender The address of the account performing the transfer\n     * @param src The address of the source account\n     * @param dst The address of the destination account\n     * @param tokens The number of tokens to transfer\n     * @return Whether or not the transfer succeeded\n     */\n    function transferInternal(\n        address spender,\n        address src,\n        address dst,\n        uint256 tokens\n    ) internal {\n        require(src != dst, \"src should not equal dst\");\n\n        require(\n            accounts[src].rAmount >= tokens,\n            \"Not enough balance to transfer\"\n        );\n\n        /* Get the allowance, infinite for the account owner */\n        uint256 startingAllowance = 0;\n        if (spender == src) {\n            startingAllowance = MAX_UINT256;\n        } else {\n            startingAllowance = transferAllowances[src][spender];\n        }\n        require(\n            startingAllowance >= tokens,\n            \"Not enough allowance for transfer\"\n        );\n\n        /* Do the calculations, checking for {under,over}flow */\n        uint256 allowanceNew = startingAllowance.sub(tokens);\n        uint256 srcTokensNew = accounts[src].rAmount.sub(tokens);\n        uint256 dstTokensNew = accounts[dst].rAmount.add(tokens);\n\n        /* Eat some of the allowance (if necessary) */\n        if (startingAllowance != MAX_UINT256) {\n            transferAllowances[src][spender] = allowanceNew;\n        }\n\n        // lRecipients adjustments\n        uint256 sInternalEstimated = estimateAndRecollectLoans(src, tokens);\n        distributeLoans(dst, tokens, sInternalEstimated);\n\n        // update token balances\n        accounts[src].rAmount = srcTokensNew;\n        accounts[dst].rAmount = dstTokensNew;\n\n        // apply hat inheritance rule\n        if ((accounts[src].hatID != 0 &&\n            accounts[dst].hatID == 0 &&\n            accounts[src].hatID != SELF_HAT_ID)) {\n            changeHatInternal(dst, accounts[src].hatID);\n        }\n\n        /* We emit a Transfer event */\n        emit Transfer(src, dst, tokens);\n    }\n\n    /**\n     * @dev Sender supplies assets into the market and receives rTokens in exchange\n     * @dev Invest into underlying assets immediately\n     * @param mintAmount The amount of the underlying asset to supply\n     */\n    function mintInternal(uint256 mintAmount) internal {\n        require(\n            token.allowance(msg.sender, address(this)) >= mintAmount,\n            \"Not enough allowance\"\n        );\n\n        Account storage account = accounts[msg.sender];\n\n        // create saving assets\n        require(token.transferFrom(msg.sender, address(this), mintAmount), \"token transfer failed\");\n        require(token.approve(address(ias), mintAmount), \"token approve failed\");\n        uint256 sOriginalCreated = ias.investUnderlying(mintAmount);\n\n        // update global and account r balances\n        totalSupply = totalSupply.add(mintAmount);\n        account.rAmount = account.rAmount.add(mintAmount);\n\n        // update global stats\n        savingAssetOrignalAmount = savingAssetOrignalAmount.add(sOriginalCreated);\n\n        // distribute saving assets as loans to recipients\n        uint256 sInternalCreated = sOriginalToSInternal(sOriginalCreated);\n        distributeLoans(msg.sender, mintAmount, sInternalCreated);\n\n        emit Transfer(address(0), msg.sender, mintAmount);\n    }\n\n    /**\n     * @notice Sender redeems rTokens in exchange for the underlying asset\n     * @dev Withdraw equal amount of initially supplied underlying assets\n     * @param redeemTo Destination address to send the redeemed tokens to\n     * @param redeemAmount The number of rTokens to redeem into underlying\n     */\n    function redeemInternal(address redeemTo, uint256 redeemAmount) internal {\n        Account storage account = accounts[msg.sender];\n        require(redeemAmount > 0, \"Redeem amount cannot be zero\");\n        require(\n            redeemAmount <= account.rAmount,\n            \"Not enough balance to redeem\"\n        );\n\n        redeemAndRecollectLoans(msg.sender, redeemAmount);\n\n        // update Account r balances and global statistics\n        account.rAmount = account.rAmount.sub(redeemAmount);\n        totalSupply = totalSupply.sub(redeemAmount);\n\n        // transfer the token back\n        require(token.transfer(redeemTo, redeemAmount), \"token transfer failed\");\n\n        emit Transfer(msg.sender, address(0), redeemAmount);\n    }\n\n    /**\n     * @dev Create a new Hat\n     * @param recipients List of beneficial recipients\n*    * @param proportions Relative proportions of benefits received by the recipients\n     */\n    function createHatInternal(\n        address[] memory recipients,\n        uint32[] memory proportions\n    ) internal returns (uint256 hatID) {\n        uint256 i;\n\n        require(recipients.length > 0, \"Invalid hat: at least one recipient\");\n        require(recipients.length <= MAX_NUM_HAT_RECIPIENTS, \"Invalild hat: maximum number of recipients reached\");\n        require(\n            recipients.length == proportions.length,\n            \"Invalid hat: length not matching\"\n        );\n\n        // normalize the proportions\n        // safemath is not used here, because:\n        // proportions are uint32, there is no overflow concern\n        uint256 totalProportions = 0;\n        for (i = 0; i < recipients.length; ++i) {\n            require(\n                proportions[i] > 0,\n                \"Invalid hat: proportion should be larger than 0\"\n            );\n            require(recipients[i] != address(0), \"Invalid hat: recipient should not be 0x0\");\n            // don't panic, no safemath, look above comment\n            totalProportions += uint256(proportions[i]);\n        }\n        for (i = 0; i < proportions.length; ++i) {\n            proportions[i] = uint32(\n                // don't panic, no safemath, look above comment\n                (uint256(proportions[i]) * uint256(PROPORTION_BASE)) /\n                    totalProportions\n            );\n        }\n\n        hatID = hats.push(Hat(recipients, proportions)) - 1;\n        emit HatCreated(hatID);\n    }\n\n    /**\n     * @dev Change the hat for `owner`\n     * @param owner Account owner\n     * @param hatID The id of the Hat\n     */\n    function changeHatInternal(address owner, uint256 hatID) internal {\n        require(hatID == SELF_HAT_ID || hatID < hats.length, \"Invalid hat ID\");\n        Account storage account = accounts[owner];\n        uint256 oldHatID = account.hatID;\n        HatStatsStored storage oldHatStats = hatStats[oldHatID];\n        HatStatsStored storage newHatStats = hatStats[hatID];\n        if (account.rAmount > 0) {\n            uint256 sInternalEstimated = estimateAndRecollectLoans(owner, account.rAmount);\n            account.hatID = hatID;\n            distributeLoans(owner, account.rAmount, sInternalEstimated);\n        } else {\n            account.hatID = hatID;\n        }\n        oldHatStats.useCount -= 1;\n        newHatStats.useCount += 1;\n        emit HatChanged(owner, oldHatID, hatID);\n    }\n\n    /**\n     * @dev Get interest payable of the account\n     */\n    function getInterestPayableOf(Account storage account)\n        internal\n        view\n        returns (uint256)\n    {\n        uint256 rGross = sInternalToR(account.sInternalAmount);\n        if (rGross > (account.lDebt.add(account.rInterest))) {\n            // don't panic, the condition guarantees that safemath is not needed\n            return rGross - account.lDebt - account.rInterest;\n        } else {\n            // no interest accumulated yet or even negative interest rate!?\n            return 0;\n        }\n    }\n\n    /**\n     * @dev Distribute the incoming tokens to the recipients as loans.\n     *      The tokens are immediately invested into the saving strategy and\n     *      add to the sAmount of the recipient account.\n     *      Recipient also inherits the owner's hat if it does already have one.\n     * @param owner Owner account address\n     * @param rAmount rToken amount being loaned to the recipients\n     * @param sInternalAmount Amount of saving assets (internal amount) being given to the recipients\n     */\n    function distributeLoans(\n        address owner,\n        uint256 rAmount,\n        uint256 sInternalAmount\n    ) internal {\n        Account storage account = accounts[owner];\n        Hat storage hat = hats[account.hatID == SELF_HAT_ID\n            ? 0\n            : account.hatID];\n        uint256 i;\n        if (hat.recipients.length > 0) {\n            uint256 rLeft = rAmount;\n            uint256 sInternalLeft = sInternalAmount;\n            for (i = 0; i < hat.proportions.length; ++i) {\n                Account storage recipientAccount = accounts[hat.recipients[i]];\n                bool isLastRecipient = i == (hat.proportions.length - 1);\n\n                // calculate the loan amount of the recipient\n                uint256 lDebtRecipient = isLastRecipient\n                    ? rLeft\n                    : (rAmount.mul(hat.proportions[i])) / PROPORTION_BASE;\n                // distribute the loan to the recipient\n                account.lRecipients[hat.recipients[i]] = account.lRecipients[hat.recipients[i]]\n                    .add(lDebtRecipient);\n                recipientAccount.lDebt = recipientAccount.lDebt\n                    .add(lDebtRecipient);\n                // remaining value adjustments\n                rLeft = gentleSub(rLeft, lDebtRecipient);\n\n                // calculate the savings holdings of the recipient\n                uint256 sInternalAmountRecipient = isLastRecipient\n                    ? sInternalLeft\n                    : (sInternalAmount.mul(hat.proportions[i])) / PROPORTION_BASE;\n                recipientAccount.sInternalAmount = recipientAccount.sInternalAmount\n                    .add(sInternalAmountRecipient);\n                // remaining value adjustments\n                sInternalLeft = gentleSub(sInternalLeft, sInternalAmountRecipient);\n\n                _updateLoanStats(owner, hat.recipients[i], account.hatID, true, lDebtRecipient, sInternalAmountRecipient);\n            }\n        } else {\n            // Account uses the zero/self hat, give all interest to the owner\n            account.lDebt = account.lDebt.add(rAmount);\n            account.sInternalAmount = account.sInternalAmount\n                .add(sInternalAmount);\n\n            _updateLoanStats(owner, owner, account.hatID, true, rAmount, sInternalAmount);\n        }\n    }\n\n    /**\n     * @dev Recollect loans from the recipients for further distribution\n     *      without actually redeeming the saving assets\n     * @param owner Owner account address\n     * @param rAmount rToken amount neeeds to be recollected from the recipients\n     *                by giving back estimated amount of saving assets\n     * @return Estimated amount of saving assets (internal) needs to recollected\n     */\n    function estimateAndRecollectLoans(address owner, uint256 rAmount)\n        internal returns (uint256 sInternalEstimated)\n    {\n        // accrue interest so estimate is up to date\n        require(ias.accrueInterest(), \"accrueInterest failed\");\n        sInternalEstimated = rToSInternal(rAmount);\n        recollectLoans(owner, rAmount);\n    }\n\n    /**\n     * @dev Recollect loans from the recipients for further distribution\n     *      by redeeming the saving assets in `rAmount`\n     * @param owner Owner account address\n     * @param rAmount rToken amount neeeds to be recollected from the recipients\n     *                by redeeming equivalent value of the saving assets\n     * @return Amount of saving assets redeemed for rAmount of tokens.\n     */\n    function redeemAndRecollectLoans(address owner, uint256 rAmount)\n        internal\n    {\n        uint256 sOriginalBurned = ias.redeemUnderlying(rAmount);\n        sOriginalToSInternal(sOriginalBurned);\n        recollectLoans(owner, rAmount);\n\n        // update global stats\n        if (savingAssetOrignalAmount > sOriginalBurned) {\n            savingAssetOrignalAmount -= sOriginalBurned;\n        } else {\n            savingAssetOrignalAmount = 0;\n        }\n    }\n\n    /**\n     * @dev Recollect loan from the recipients\n     * @param owner   Owner address\n     * @param rAmount rToken amount of debt to be collected from the recipients\n     */\n    function recollectLoans(\n        address owner,\n        uint256 rAmount\n    ) internal {\n        Account storage account = accounts[owner];\n        Hat storage hat = hats[account.hatID == SELF_HAT_ID\n            ? 0\n            : account.hatID];\n        // interest part of the balance is not debt\n        // hence maximum amount debt to be collected is:\n        uint256 debtToCollect = gentleSub(account.rAmount, account.rInterest);\n        // only a portion of debt needs to be collected\n        if (debtToCollect > rAmount) {\n            debtToCollect = rAmount;\n        }\n        uint256 sInternalToCollect = rToSInternal(debtToCollect);\n        if (hat.recipients.length > 0) {\n            uint256 rLeft = 0;\n            uint256 sInternalLeft = 0;\n            uint256 i;\n            // adjust recipients' debt and savings\n            rLeft = debtToCollect;\n            sInternalLeft = sInternalToCollect;\n            for (i = 0; i < hat.proportions.length; ++i) {\n                Account storage recipientAccount = accounts[hat.recipients[i]];\n                bool isLastRecipient = i == (hat.proportions.length - 1);\n\n                // calulate loans to be collected from the recipient\n                uint256 lDebtRecipient = isLastRecipient\n                    ? rLeft\n                    : (debtToCollect.mul(hat.proportions[i])) / PROPORTION_BASE;\n                recipientAccount.lDebt = gentleSub(\n                    recipientAccount.lDebt,\n                    lDebtRecipient);\n                account.lRecipients[hat.recipients[i]] = gentleSub(\n                    account.lRecipients[hat.recipients[i]],\n                    lDebtRecipient);\n                // loans leftover adjustments\n                rLeft = gentleSub(rLeft, lDebtRecipient);\n\n                // calculate savings to be collected from the recipient\n                uint256 sInternalAmountRecipient = isLastRecipient\n                    ? sInternalLeft\n                    : (sInternalToCollect.mul(hat.proportions[i])) / PROPORTION_BASE;\n                recipientAccount.sInternalAmount = gentleSub(\n                    recipientAccount.sInternalAmount,\n                    sInternalAmountRecipient);\n                // savings leftover adjustments\n                sInternalLeft = gentleSub(sInternalLeft, sInternalAmountRecipient);\n\n                adjustRInterest(recipientAccount);\n\n                _updateLoanStats(owner, hat.recipients[i], account.hatID, false, lDebtRecipient, sInternalAmountRecipient);\n            }\n        } else {\n            // Account uses the zero hat, recollect interests from the owner\n\n            // collect debt from self hat\n            account.lDebt = gentleSub(account.lDebt, debtToCollect);\n\n            // collect savings\n            account.sInternalAmount = gentleSub(account.sInternalAmount, sInternalToCollect);\n\n            adjustRInterest(account);\n\n            _updateLoanStats(owner, owner, account.hatID, false, debtToCollect, sInternalToCollect);\n        }\n\n        // debt-free portion of internal savings needs to be collected too\n        if (rAmount > debtToCollect) {\n            sInternalToCollect = rToSInternal(rAmount - debtToCollect);\n            account.sInternalAmount = gentleSub(account.sInternalAmount, sInternalToCollect);\n            adjustRInterest(account);\n        }\n    }\n\n    /**\n     * @dev pay interest to the owner\n     * @param owner Account owner address\n     */\n    function payInterestInternal(address owner) internal {\n        Account storage account = accounts[owner];\n        AccountStatsStored storage stats = accountStats[owner];\n\n        require(ias.accrueInterest(), \"accrueInterest failed\");\n        uint256 interestAmount = getInterestPayableOf(account);\n\n        if (interestAmount > 0) {\n            stats.cumulativeInterest = stats\n                .cumulativeInterest\n                .add(interestAmount);\n            account.rInterest = account.rInterest.add(interestAmount);\n            account.rAmount = account.rAmount.add(interestAmount);\n            totalSupply = totalSupply.add(interestAmount);\n            emit InterestPaid(owner, interestAmount);\n            emit Transfer(address(0), owner, interestAmount);\n        }\n    }\n\n    function _updateLoanStats(\n        address owner,\n        address recipient,\n        uint256 hatID,\n        bool isDistribution,\n        uint256 redeemableAmount,\n        uint256 sInternalAmount) private {\n        HatStatsStored storage hatStats = hatStats[hatID];\n\n        emit LoansTransferred(owner, recipient, hatID,\n            isDistribution,\n            redeemableAmount,\n            sInternalAmount);\n\n        if (isDistribution) {\n            hatStats.totalLoans = hatStats.totalLoans.add(redeemableAmount);\n            hatStats.totalInternalSavings = hatStats.totalInternalSavings\n                .add(sInternalAmount);\n        } else {\n            hatStats.totalLoans = gentleSub(hatStats.totalLoans, redeemableAmount);\n            hatStats.totalInternalSavings = gentleSub(\n                hatStats.totalInternalSavings,\n                sInternalAmount);\n        }\n    }\n\n    function _isContract(address addr) private view returns (bool) {\n      uint size;\n      assembly { size := extcodesize(addr) }\n      return size > 0;\n    }\n\n    /**\n     * @dev Gently subtract b from a without revert\n     *\n     * Due to the use of integer arithmatic, imprecision may cause a tiny\n     * amount to be off when substracting the otherwise precise proportions.\n     */\n    function gentleSub(uint256 a, uint256 b) private pure returns (uint256) {\n        if (a < b) return 0;\n        else return a - b;\n    }\n\n    /// @dev convert internal savings amount to redeemable amount\n    function sInternalToR(uint256 sInternalAmount)\n        private view\n        returns (uint256 rAmount) {\n        // - rGross is in underlying(redeemable) asset unit\n        // - Both ias.exchangeRateStored and savingAssetConversionRate are scaled by 1e18\n        //   they should cancel out\n        // - Formula:\n        //   savingsOriginalAmount = sInternalAmount / savingAssetConversionRate\n        //   rGross = savingAssetOrignalAmount * ias.exchangeRateStored\n        //   =>\n        return sInternalAmount\n            .mul(ias.exchangeRateStored())\n            .div(savingAssetConversionRate);\n    }\n\n    /// @dev convert redeemable amount to internal savings amount\n    function rToSInternal(uint256 rAmount)\n        private view\n        returns (uint256 sInternalAmount) {\n        return rAmount\n            .mul(savingAssetConversionRate)\n            .div(ias.exchangeRateStored());\n    }\n\n    /// @dev convert original savings amount to redeemable amount\n    function sOriginalToR(uint sOriginalAmount)\n        private view\n        returns (uint256 sInternalAmount) {\n        return sOriginalAmount\n            .mul(ias.exchangeRateStored())\n            .div(ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE);\n    }\n\n    // @dev convert from original savings amount to internal savings amount\n    function sOriginalToSInternal(uint sOriginalAmount)\n        private view\n        returns (uint256 sInternalAmount) {\n        // savingAssetConversionRate is scaled by 1e18\n        return sOriginalAmount\n            .mul(savingAssetConversionRate)\n            .div(ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE);\n    }\n\n    // @dev convert from internal savings amount to original savings amount\n    function sInternalToSOriginal(uint sInternalAmount)\n        private view\n        returns (uint256 sOriginalAmount) {\n        // savingAssetConversionRate is scaled by 1e18\n        return sInternalAmount\n            .mul(ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE)\n            .div(savingAssetConversionRate);\n    }\n\n    // @dev adjust rInterest value\n    //      if savings are transferred, rInterest should be also adjusted\n    function adjustRInterest(Account storage account) private {\n        uint256 rGross = sInternalToR(account.sInternalAmount);\n        if (account.rInterest > rGross - account.lDebt) {\n            account.rInterest = rGross - account.lDebt;\n        }\n    }\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
    "exportedSymbols": {
      "RToken": [
        9287
      ]
    },
    "id": 9288,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6636,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "202:32:19"
      },
      {
        "id": 6637,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "235:33:19"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Proxiable.sol",
        "file": "./Proxiable.sol",
        "id": 6639,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6606,
        "src": "270:42:19",
        "symbolAliases": [
          {
            "foreign": 6638,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Ownable.sol",
        "file": "./Ownable.sol",
        "id": 6641,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6575,
        "src": "313:38:19",
        "symbolAliases": [
          {
            "foreign": 6640,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/LibraryLock.sol",
        "file": "./LibraryLock.sol",
        "id": 6643,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6462,
        "src": "352:46:19",
        "symbolAliases": [
          {
            "foreign": 6642,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 6645,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 10855,
        "src": "399:67:19",
        "symbolAliases": [
          {
            "foreign": 6644,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 6647,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 9435,
        "src": "467:54:19",
        "symbolAliases": [
          {
            "foreign": 6646,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStructs.sol",
        "file": "./RTokenStructs.sol",
        "id": 6649,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 9409,
        "src": "522:50:19",
        "symbolAliases": [
          {
            "foreign": 6648,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStorage.sol",
        "file": "./RTokenStorage.sol",
        "id": 6651,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 9345,
        "src": "573:50:19",
        "symbolAliases": [
          {
            "foreign": 6650,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRToken.sol",
        "file": "./IRToken.sol",
        "id": 6654,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6391,
        "src": "624:46:19",
        "symbolAliases": [
          {
            "foreign": 6652,
            "local": null
          },
          {
            "foreign": 6653,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRTokenAdmin.sol",
        "file": "./IRTokenAdmin.sol",
        "id": 6656,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6436,
        "src": "671:48:19",
        "symbolAliases": [
          {
            "foreign": 6655,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IAllocationStrategy.sol",
        "file": "./IAllocationStrategy.sol",
        "id": 6658,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6134,
        "src": "720:62:19",
        "symbolAliases": [
          {
            "foreign": 6657,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6659,
              "name": "IRToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6390,
              "src": "902:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRToken_$6390",
                "typeString": "contract IRToken"
              }
            },
            "id": 6660,
            "nodeType": "InheritanceSpecifier",
            "src": "902:7:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6661,
              "name": "IRTokenAdmin",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6435,
              "src": "915:12:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRTokenAdmin_$6435",
                "typeString": "contract IRTokenAdmin"
              }
            },
            "id": 6662,
            "nodeType": "InheritanceSpecifier",
            "src": "915:12:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6663,
              "name": "RTokenStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9344,
              "src": "933:13:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RTokenStorage_$9344",
                "typeString": "contract RTokenStorage"
              }
            },
            "id": 6664,
            "nodeType": "InheritanceSpecifier",
            "src": "933:13:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6665,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6574,
              "src": "952:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$6574",
                "typeString": "contract Ownable"
              }
            },
            "id": 6666,
            "nodeType": "InheritanceSpecifier",
            "src": "952:7:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6667,
              "name": "Proxiable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6605,
              "src": "965:9:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxiable_$6605",
                "typeString": "contract Proxiable"
              }
            },
            "id": 6668,
            "nodeType": "InheritanceSpecifier",
            "src": "965:9:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6669,
              "name": "LibraryLock",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6461,
              "src": "980:11:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LibraryLock_$6461",
                "typeString": "contract LibraryLock"
              }
            },
            "id": 6670,
            "nodeType": "InheritanceSpecifier",
            "src": "980:11:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6671,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9434,
              "src": "997:15:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$9434",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 6672,
            "nodeType": "InheritanceSpecifier",
            "src": "997:15:19"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@notice RToken an ERC20 token that is 1:1 redeemable to its underlying ERC20 token.",
        "fullyImplemented": true,
        "id": 9287,
        "linearizedBaseContracts": [
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "RToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6675,
            "libraryName": {
              "contractScope": null,
              "id": 6673,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10854,
              "src": "1025:8:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$10854",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1019:27:19",
            "typeName": {
              "id": 6674,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1038:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 6678,
            "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1053:70:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6676,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1053:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 6677,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1119:4:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6681,
            "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1129:67:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6679,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1129:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 6680,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1192:4:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6689,
            "name": "MAX_UINT256",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1202:57:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6682,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1202:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "id": 6686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "1255:2:19",
                      "subExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 6685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1256:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_minus_1_by_1",
                        "typeString": "int_const -1"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_rational_minus_1_by_1",
                        "typeString": "int_const -1"
                      }
                    ],
                    "id": 6684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1248:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_int256_$",
                      "typeString": "type(int256)"
                    },
                    "typeName": "int256"
                  },
                  "id": 6687,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1248:10:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  }
                ],
                "id": 6683,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1240:7:19",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 6688,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1240:19:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6692,
            "name": "SELF_HAT_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1265:49:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6690,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1265:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "id": 6691,
              "name": "MAX_UINT256",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 6689,
              "src": "1303:11:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6695,
            "name": "PROPORTION_BASE",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1320:51:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 6693,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1320:6:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30784646464646464646",
              "id": 6694,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1361:10:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_4294967295_by_1",
                "typeString": "int_const 4294967295"
              },
              "value": "0xFFFFFFFF"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6698,
            "name": "MAX_NUM_HAT_RECIPIENTS",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1377:51:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6696,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1377:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3530",
              "id": 6697,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1426:2:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50_by_1",
                "typeString": "int_const 50"
              },
              "value": "50"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 6788,
              "nodeType": "Block",
              "src": "1675:681:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "1693:12:19",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 6710,
                          "name": "initialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9304,
                          "src": "1694:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546865206c6962726172792068617320616c7265616479206265656e20696e697469616c697a65642e",
                        "id": 6712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1707:43:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4d5150b31be418954b338a6a4073a64941098cf086ed005585a5da1122e907cf",
                          "typeString": "literal_string \"The library has already been initialized.\""
                        },
                        "value": "The library has already been initialized."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4d5150b31be418954b338a6a4073a64941098cf086ed005585a5da1122e907cf",
                          "typeString": "literal_string \"The library has already been initialized.\""
                        }
                      ],
                      "id": 6709,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1685:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1685:66:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6714,
                  "nodeType": "ExpressionStatement",
                  "src": "1685:66:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6715,
                        "name": "LibraryLock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6461,
                        "src": "1761:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LibraryLock_$6461_$",
                          "typeString": "type(contract LibraryLock)"
                        }
                      },
                      "id": 6717,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6460,
                      "src": "1761:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6718,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1761:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6719,
                  "nodeType": "ExpressionStatement",
                  "src": "1761:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6720,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9302,
                      "src": "1795:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6721,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "1804:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 6722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1804:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1795:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6724,
                  "nodeType": "ExpressionStatement",
                  "src": "1795:19:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6725,
                      "name": "_guardCounter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9306,
                      "src": "1824:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1840:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "1824:17:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6728,
                  "nodeType": "ExpressionStatement",
                  "src": "1824:17:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6729,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9308,
                      "src": "1851:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6730,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6702,
                      "src": "1858:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1851:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6732,
                  "nodeType": "ExpressionStatement",
                  "src": "1851:12:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6733,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9310,
                      "src": "1873:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6734,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6704,
                      "src": "1882:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1873:16:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6736,
                  "nodeType": "ExpressionStatement",
                  "src": "1873:16:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6737,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9312,
                      "src": "1899:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6738,
                      "name": "decimals_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6706,
                      "src": "1910:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1899:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6740,
                  "nodeType": "ExpressionStatement",
                  "src": "1899:20:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6741,
                      "name": "savingAssetConversionRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9322,
                      "src": "1929:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6742,
                      "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6681,
                      "src": "1957:36:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1929:64:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6744,
                  "nodeType": "ExpressionStatement",
                  "src": "1929:64:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6745,
                      "name": "ias",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9316,
                      "src": "2003:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6746,
                      "name": "allocationStrategy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6700,
                      "src": "2009:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "src": "2003:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "id": 6748,
                  "nodeType": "ExpressionStatement",
                  "src": "2003:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6749,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9318,
                      "src": "2037:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$11470",
                        "typeString": "contract IERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6751,
                              "name": "ias",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9316,
                              "src": "2052:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                "typeString": "contract IAllocationStrategy"
                              }
                            },
                            "id": 6752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "underlying",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6101,
                            "src": "2052:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 6753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2052:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 6750,
                        "name": "IERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11470,
                        "src": "2045:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IERC20_$11470_$",
                          "typeString": "type(contract IERC20)"
                        }
                      },
                      "id": 6754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2045:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$11470",
                        "typeString": "contract IERC20"
                      }
                    },
                    "src": "2037:32:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$11470",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 6756,
                  "nodeType": "ExpressionStatement",
                  "src": "2037:32:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6764,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2157:1:19",
                                "subdenomination": null,
                                "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": 6763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "2143:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (address[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 6761,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2147:7:19",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 6762,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "2147:9:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                  "typeString": "address[]"
                                }
                              }
                            },
                            "id": 6765,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2143:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2174:1:19",
                                "subdenomination": null,
                                "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": 6768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "2161:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 6766,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2165:6:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 6767,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "2165:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 6770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2161:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          ],
                          "id": 6760,
                          "name": "Hat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9392,
                          "src": "2139:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Hat_$9392_storage_ptr_$",
                            "typeString": "type(struct RTokenStructs.Hat storage pointer)"
                          }
                        },
                        "id": 6771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2139:38:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_memory",
                          "typeString": "struct RTokenStructs.Hat memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Hat_$9392_memory",
                          "typeString": "struct RTokenStructs.Hat memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6757,
                        "name": "hats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9331,
                        "src": "2129:4:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                          "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                        }
                      },
                      "id": 6759,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2129:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Hat_$9392_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct RTokenStructs.Hat storage ref) returns (uint256)"
                      }
                    },
                    "id": 6772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2129:49:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6773,
                  "nodeType": "ExpressionStatement",
                  "src": "2129:49:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6774,
                          "name": "hatStats",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9343,
                          "src": "2233:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                            "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                          }
                        },
                        "id": 6776,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2242:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2233:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                          "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                        }
                      },
                      "id": 6777,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "2233:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6778,
                      "name": "MAX_UINT256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6689,
                      "src": "2256:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2233:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6780,
                  "nodeType": "ExpressionStatement",
                  "src": "2233:34:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6783,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "2317:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          ],
                          "id": 6782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2309:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2309:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6785,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "2323:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6781,
                      "name": "AllocationStrategyChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6434,
                      "src": "2283:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 6786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2283:66:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6787,
                  "nodeType": "EmitStatement",
                  "src": "2278:71:19"
                }
              ]
            },
            "documentation": "@notice Create rToken linked with cToken at `cToken_`",
            "id": 6789,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6700,
                  "name": "allocationStrategy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1541:38:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                    "typeString": "contract IAllocationStrategy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6699,
                    "name": "IAllocationStrategy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6133,
                    "src": "1541:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6702,
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1589:19:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6701,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1589:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6704,
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1618:21:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6703,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1618:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6706,
                  "name": "decimals_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1649:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6705,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1649:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1531:136:19"
            },
            "returnParameters": {
              "id": 6708,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1675:0:19"
            },
            "scope": 9287,
            "src": "1512:844:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6801,
              "nodeType": "Block",
              "src": "2546:47:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6796,
                        "name": "accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9335,
                        "src": "2563:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                          "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                        }
                      },
                      "id": 6798,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6797,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6791,
                        "src": "2572:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2563:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage",
                        "typeString": "struct RTokenStructs.Account storage ref"
                      }
                    },
                    "id": 6799,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "rAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9396,
                    "src": "2563:23:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6795,
                  "id": 6800,
                  "nodeType": "Return",
                  "src": "2556:30:19"
                }
              ]
            },
            "documentation": "@notice Returns the amount of tokens owned by `account`.",
            "id": 6802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6791,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6802,
                  "src": "2499:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2499:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2498:15:19"
            },
            "returnParameters": {
              "id": 6795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6794,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6802,
                  "src": "2537:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6793,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2537:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2536:9:19"
            },
            "scope": 9287,
            "src": "2480:113:19",
            "stateMutability": "view",
            "superFunction": 11415,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6817,
              "nodeType": "Block",
              "src": "2982:58:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6811,
                        "name": "transferAllowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9328,
                        "src": "2999:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 6813,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6812,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6804,
                        "src": "3018:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2999:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 6815,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6814,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6806,
                      "src": "3025:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2999:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6810,
                  "id": 6816,
                  "nodeType": "Return",
                  "src": "2992:41:19"
                }
              ]
            },
            "documentation": "@notice Returns the remaining number of tokens that `spender` will be\nallowed to spend on behalf of `owner` through `transferFrom`. This is\nzero by default.\n     * This value changes when `approve` or `transferFrom` are called.",
            "id": 6818,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6804,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6818,
                  "src": "2890:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6803,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2890:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6806,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 6818,
                  "src": "2905:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6805,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2905:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2889:32:19"
            },
            "returnParameters": {
              "id": 6810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6809,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6818,
                  "src": "2969:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2969:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2968:9:19"
            },
            "scope": 9287,
            "src": "2871:169:19",
            "stateMutability": "view",
            "superFunction": 11433,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6848,
              "nodeType": "Block",
              "src": "3761:158:19",
              "statements": [
                {
                  "assignments": [
                    6828
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6828,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 6848,
                      "src": "3771:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6827,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3771:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6831,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 6829,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "3785:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 6830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3785:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3771:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6832,
                          "name": "transferAllowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9328,
                          "src": "3805:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 6835,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 6833,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6828,
                          "src": "3824:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3805:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6836,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6834,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6820,
                        "src": "3829:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3805:32:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6837,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6822,
                      "src": "3840:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3805:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6839,
                  "nodeType": "ExpressionStatement",
                  "src": "3805:41:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6841,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6828,
                        "src": "3870:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6842,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6820,
                        "src": "3875:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6843,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6822,
                        "src": "3884:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6840,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11469,
                      "src": "3861:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3861:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6845,
                  "nodeType": "EmitStatement",
                  "src": "3856:35:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3908:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6826,
                  "id": 6847,
                  "nodeType": "Return",
                  "src": "3901:11:19"
                }
              ]
            },
            "documentation": "@notice Sets `amount` as the allowance of `spender` over the caller's tokens.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * > Beware that changing an allowance with this method brings the risk\nthat someone may use both the old and the new allowance by unfortunate\ntransaction ordering. One possible solution to mitigate this race\ncondition is to first reduce the spender's allowance to 0 and set the\ndesired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * Emits an `Approval` event.",
            "id": 6849,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6820,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 6849,
                  "src": "3704:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6819,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3704:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6822,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 6849,
                  "src": "3721:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6821,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3721:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3703:33:19"
            },
            "returnParameters": {
              "id": 6826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6825,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6849,
                  "src": "3755:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6824,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3755:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3754:6:19"
            },
            "scope": 9287,
            "src": "3687:232:19",
            "stateMutability": "nonpayable",
            "superFunction": 11442,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6882,
              "nodeType": "Block",
              "src": "4291:179:19",
              "statements": [
                {
                  "assignments": [
                    6861
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6861,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 6882,
                      "src": "4301:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6860,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4301:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6864,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 6862,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "4315:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 6863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4315:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4301:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6866,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6861,
                        "src": "4355:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6865,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4335:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4335:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6868,
                  "nodeType": "ExpressionStatement",
                  "src": "4335:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6870,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6861,
                        "src": "4386:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6871,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6861,
                        "src": "4391:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6872,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6851,
                        "src": "4396:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6873,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6853,
                        "src": "4401:6:19",
                        "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"
                        }
                      ],
                      "id": 6869,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "4369:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4369:39:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6875,
                  "nodeType": "ExpressionStatement",
                  "src": "4369:39:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6877,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6851,
                        "src": "4438:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6876,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4418:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6878,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4418:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6879,
                  "nodeType": "ExpressionStatement",
                  "src": "4418:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4459:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6859,
                  "id": 6881,
                  "nodeType": "Return",
                  "src": "4452:11:19"
                }
              ]
            },
            "documentation": "@notice Moves `amount` tokens from the caller's account to `dst`.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * Emits a `Transfer` event.\nMay also emit `InterestPaid` event.",
            "id": 6883,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6856,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6855,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "4251:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4251:12:19"
              }
            ],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6851,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6883,
                  "src": "4197:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6850,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4197:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6853,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 6883,
                  "src": "4210:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6852,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4210:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4196:29:19"
            },
            "returnParameters": {
              "id": 6859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6858,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6883,
                  "src": "4281:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6857,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4281:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4280:6:19"
            },
            "scope": 9287,
            "src": "4179:291:19",
            "stateMutability": "nonpayable",
            "superFunction": 11424,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6917,
              "nodeType": "Block",
              "src": "4595:194:19",
              "statements": [
                {
                  "assignments": [
                    6893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6893,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 6917,
                      "src": "4605:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6892,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4605:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6896,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 6894,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "4619:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 6895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4619:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4605:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6898,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6893,
                        "src": "4659:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6897,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4639:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4639:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6900,
                  "nodeType": "ExpressionStatement",
                  "src": "4639:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6902,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6893,
                        "src": "4690:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6903,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6893,
                        "src": "4695:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6904,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6885,
                        "src": "4700:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6905,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "4705:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 6907,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6906,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6893,
                            "src": "4714:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4705:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 6908,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "4705:21:19",
                        "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"
                        }
                      ],
                      "id": 6901,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "4673:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4673:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6910,
                  "nodeType": "ExpressionStatement",
                  "src": "4673:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6912,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6885,
                        "src": "4757:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6911,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4737:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4737:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6914,
                  "nodeType": "ExpressionStatement",
                  "src": "4737:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4778:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6891,
                  "id": 6916,
                  "nodeType": "Return",
                  "src": "4771:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.transferAll implementation",
            "id": 6918,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6888,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6887,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "4567:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4567:12:19"
              }
            ],
            "name": "transferAll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6885,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6918,
                  "src": "4545:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6884,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4545:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4544:13:19"
            },
            "returnParameters": {
              "id": 6891,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6890,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6918,
                  "src": "4589:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6889,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4589:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4588:6:19"
            },
            "scope": 9287,
            "src": "4524:265:19",
            "stateMutability": "nonpayable",
            "superFunction": 6202,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6950,
              "nodeType": "Block",
              "src": "4963:167:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6930,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6920,
                        "src": "4993:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6929,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4973:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4973:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6932,
                  "nodeType": "ExpressionStatement",
                  "src": "4973:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6934,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "5024:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5024:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6936,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6920,
                        "src": "5036:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6937,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6922,
                        "src": "5041:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6938,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "5046:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 6940,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6939,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6920,
                            "src": "5055:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5046:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 6941,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "5046:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6933,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "5007:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5007:61:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6943,
                  "nodeType": "ExpressionStatement",
                  "src": "5007:61:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6945,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6922,
                        "src": "5098:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6944,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5078:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5078:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6947,
                  "nodeType": "ExpressionStatement",
                  "src": "5078:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5119:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6928,
                  "id": 6949,
                  "nodeType": "Return",
                  "src": "5112:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.transferAllFrom implementation",
            "id": 6951,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6925,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6924,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "4923:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4923:12:19"
              }
            ],
            "name": "transferAllFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6923,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6920,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 6951,
                  "src": "4872:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6919,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4872:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6922,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6951,
                  "src": "4885:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6921,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4885:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4871:26:19"
            },
            "returnParameters": {
              "id": 6928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6927,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6951,
                  "src": "4953:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6926,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4953:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4952:6:19"
            },
            "scope": 9287,
            "src": "4847:283:19",
            "stateMutability": "nonpayable",
            "superFunction": 6211,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6982,
              "nodeType": "Block",
              "src": "5569:152:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6965,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6953,
                        "src": "5599:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6964,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5579:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5579:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6967,
                  "nodeType": "ExpressionStatement",
                  "src": "5579:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6969,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "5630:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5630:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6971,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6953,
                        "src": "5642:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6972,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6955,
                        "src": "5647:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6973,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6957,
                        "src": "5652:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6968,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "5613:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5613:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6975,
                  "nodeType": "ExpressionStatement",
                  "src": "5613:46:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6977,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6955,
                        "src": "5689:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6976,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5669:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5669:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6979,
                  "nodeType": "ExpressionStatement",
                  "src": "5669:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5710:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6963,
                  "id": 6981,
                  "nodeType": "Return",
                  "src": "5703:11:19"
                }
              ]
            },
            "documentation": "@notice Moves `amount` tokens from `sender` to `recipient` using the\nallowance mechanism. `amount` is then deducted from the caller's\nallowance.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * Emits a `Transfer` event.",
            "id": 6983,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6960,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6959,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "5529:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5529:12:19"
              }
            ],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6953,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5462:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6952,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5462:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6955,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5475:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6954,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5475:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6957,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5488:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6956,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5488:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5461:42:19"
            },
            "returnParameters": {
              "id": 6963,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6962,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5559:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6961,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5559:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5558:6:19"
            },
            "scope": 9287,
            "src": "5440:281:19",
            "stateMutability": "nonpayable",
            "superFunction": 11453,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7003,
              "nodeType": "Block",
              "src": "5878:103:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6993,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6985,
                        "src": "5901:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6992,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "5888:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 6994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5888:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6995,
                  "nodeType": "ExpressionStatement",
                  "src": "5888:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6997,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "5942:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5942:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6996,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5922:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5922:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7000,
                  "nodeType": "ExpressionStatement",
                  "src": "5922:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5970:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6991,
                  "id": 7002,
                  "nodeType": "Return",
                  "src": "5963:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.mint implementation",
            "id": 7004,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6988,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6987,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "5850:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5850:12:19"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6985,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7004,
                  "src": "5821:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5821:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5820:20:19"
            },
            "returnParameters": {
              "id": 6991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6990,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7004,
                  "src": "5872:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6989,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5872:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5871:6:19"
            },
            "scope": 9287,
            "src": "5807:174:19",
            "stateMutability": "nonpayable",
            "superFunction": 6173,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7032,
              "nodeType": "Block",
              "src": "6172:149:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7016,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6200:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6200:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7018,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7008,
                        "src": "6212:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7015,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "6182:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6182:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7020,
                  "nodeType": "ExpressionStatement",
                  "src": "6182:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7022,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7006,
                        "src": "6241:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7021,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "6228:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6228:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7024,
                  "nodeType": "ExpressionStatement",
                  "src": "6228:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7026,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6282:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6282:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7025,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "6262:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6262:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7029,
                  "nodeType": "ExpressionStatement",
                  "src": "6262:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6310:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7014,
                  "id": 7031,
                  "nodeType": "Return",
                  "src": "6303:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.mintWithSelectedHat implementation",
            "id": 7033,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7011,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7010,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "6132:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6132:12:19"
              }
            ],
            "name": "mintWithSelectedHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7006,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7033,
                  "src": "6072:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7005,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6072:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7008,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7033,
                  "src": "6092:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6092:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6071:35:19"
            },
            "returnParameters": {
              "id": 7014,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7013,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7033,
                  "src": "6162:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7012,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6162:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6161:6:19"
            },
            "scope": 9287,
            "src": "6043:278:19",
            "stateMutability": "nonpayable",
            "superFunction": 6182,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7072,
              "nodeType": "Block",
              "src": "6566:217:19",
              "statements": [
                {
                  "assignments": [
                    7049
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7049,
                      "name": "hatID",
                      "nodeType": "VariableDeclaration",
                      "scope": 7072,
                      "src": "6576:13:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7048,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6576:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7051,
                        "name": "recipients",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7038,
                        "src": "6610:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7052,
                        "name": "proportions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7041,
                        "src": "6622:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[] calldata"
                        }
                      ],
                      "id": 7050,
                      "name": "createHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8287,
                      "src": "6592:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (address[] memory,uint32[] memory) returns (uint256)"
                      }
                    },
                    "id": 7053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6592:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6576:58:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7056,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6662:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6662:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7058,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7049,
                        "src": "6674:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7055,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "6644:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6644:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7060,
                  "nodeType": "ExpressionStatement",
                  "src": "6644:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7062,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7035,
                        "src": "6703:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7061,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "6690:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6690:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7064,
                  "nodeType": "ExpressionStatement",
                  "src": "6690:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7066,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6744:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6744:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7065,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "6724:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6724:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7069,
                  "nodeType": "ExpressionStatement",
                  "src": "6724:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6772:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7047,
                  "id": 7071,
                  "nodeType": "Return",
                  "src": "6765:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.mintWithNewHat implementation",
            "id": 7073,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7044,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7043,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "6538:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6538:12:19"
              }
            ],
            "name": "mintWithNewHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7042,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7035,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6426:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7034,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6426:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7038,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6454:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7036,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6454:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7037,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6454:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7041,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6493:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7039,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "6493:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7040,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6493:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6416:112:19"
            },
            "returnParameters": {
              "id": 7047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7046,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6560:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7045,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6560:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6559:6:19"
            },
            "scope": 9287,
            "src": "6393:390:19",
            "stateMutability": "nonpayable",
            "superFunction": 6195,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7098,
              "nodeType": "Block",
              "src": "7000:139:19",
              "statements": [
                {
                  "assignments": [
                    7083
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7083,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7098,
                      "src": "7010:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7082,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7010:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7086,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7084,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7024:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7024:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7010:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7088,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7083,
                        "src": "7064:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7087,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7044:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7044:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7090,
                  "nodeType": "ExpressionStatement",
                  "src": "7044:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7092,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7083,
                        "src": "7093:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7093,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7075,
                        "src": "7098:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7091,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7078:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7078:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7095,
                  "nodeType": "ExpressionStatement",
                  "src": "7078:33:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7128:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7081,
                  "id": 7097,
                  "nodeType": "Return",
                  "src": "7121:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeem implementation\n     It withdraws equal amount of initially supplied underlying assets",
            "id": 7099,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7078,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7077,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "6972:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6972:12:19"
              }
            ],
            "name": "redeem",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7075,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "6941:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6941:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6940:22:19"
            },
            "returnParameters": {
              "id": 7081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7080,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "6994:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7079,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6994:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6993:6:19"
            },
            "scope": 9287,
            "src": "6925:214:19",
            "stateMutability": "nonpayable",
            "superFunction": 6218,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7125,
              "nodeType": "Block",
              "src": "7249:148:19",
              "statements": [
                {
                  "assignments": [
                    7107
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7107,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7125,
                      "src": "7259:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7106,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7259:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7110,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7108,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7273:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7273:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7259:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7112,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7107,
                        "src": "7313:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7111,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7293:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7293:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7114,
                  "nodeType": "ExpressionStatement",
                  "src": "7293:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7116,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7107,
                        "src": "7342:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7117,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "7347:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7119,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7118,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7107,
                            "src": "7356:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7347:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7120,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "7347:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7115,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7327:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7327:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7122,
                  "nodeType": "ExpressionStatement",
                  "src": "7327:42:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7386:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7105,
                  "id": 7124,
                  "nodeType": "Return",
                  "src": "7379:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeemAll implementation",
            "id": 7126,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7102,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7101,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "7221:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7221:12:19"
              }
            ],
            "name": "redeemAll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7100,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7209:2:19"
            },
            "returnParameters": {
              "id": 7105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7104,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7126,
                  "src": "7243:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7103,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7243:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7242:6:19"
            },
            "scope": 9287,
            "src": "7191:206:19",
            "stateMutability": "nonpayable",
            "superFunction": 6223,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7153,
              "nodeType": "Block",
              "src": "7589:144:19",
              "statements": [
                {
                  "assignments": [
                    7138
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7138,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7153,
                      "src": "7599:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7137,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7599:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7141,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7139,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7613:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7613:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7599:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7143,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7138,
                        "src": "7653:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7142,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7633:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7633:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7145,
                  "nodeType": "ExpressionStatement",
                  "src": "7633:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7147,
                        "name": "redeemTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7128,
                        "src": "7682:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7148,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7130,
                        "src": "7692:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7146,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7667:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7667:38:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7150,
                  "nodeType": "ExpressionStatement",
                  "src": "7667:38:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7722:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7136,
                  "id": 7152,
                  "nodeType": "Return",
                  "src": "7715:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeemAndTransfer implementation",
            "id": 7154,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7133,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7132,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "7549:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7549:12:19"
              }
            ],
            "name": "redeemAndTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7128,
                  "name": "redeemTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "7484:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7484:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7130,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "7502:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7502:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7483:40:19"
            },
            "returnParameters": {
              "id": 7136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7135,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "7579:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7134,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7579:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7578:6:19"
            },
            "scope": 9287,
            "src": "7457:276:19",
            "stateMutability": "nonpayable",
            "superFunction": 6232,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7182,
              "nodeType": "Block",
              "src": "7909:153:19",
              "statements": [
                {
                  "assignments": [
                    7164
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7164,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7182,
                      "src": "7919:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7163,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7919:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7167,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7165,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7933:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7933:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7919:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7169,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7164,
                        "src": "7973:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7168,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7953:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7953:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7171,
                  "nodeType": "ExpressionStatement",
                  "src": "7953:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7173,
                        "name": "redeemTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7156,
                        "src": "8002:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7174,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "8012:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7176,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7175,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7164,
                            "src": "8021:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8012:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7177,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "8012:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7172,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7987:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7987:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7179,
                  "nodeType": "ExpressionStatement",
                  "src": "7987:47:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8051:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7162,
                  "id": 7181,
                  "nodeType": "Return",
                  "src": "8044:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeemAndTransferAll implementation",
            "id": 7183,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7159,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7158,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "7869:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7869:12:19"
              }
            ],
            "name": "redeemAndTransferAll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7156,
                  "name": "redeemTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 7183,
                  "src": "7826:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7826:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7825:18:19"
            },
            "returnParameters": {
              "id": 7162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7161,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7183,
                  "src": "7899:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7160,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7899:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7898:6:19"
            },
            "scope": 9287,
            "src": "7796:266:19",
            "stateMutability": "nonpayable",
            "superFunction": 6239,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7214,
              "nodeType": "Block",
              "src": "8289:154:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7198,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7196,
                      "src": "8299:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7200,
                          "name": "recipients",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7186,
                          "src": "8325:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7201,
                          "name": "proportions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7189,
                          "src": "8337:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        ],
                        "id": 7199,
                        "name": "createHatInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8287,
                        "src": "8307:17:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_uint256_$",
                          "typeString": "function (address[] memory,uint32[] memory) returns (uint256)"
                        }
                      },
                      "id": 7202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8307:42:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8299:50:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7204,
                  "nodeType": "ExpressionStatement",
                  "src": "8299:50:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 7205,
                    "name": "doChangeHat",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7191,
                    "src": "8363:11:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7213,
                  "nodeType": "IfStatement",
                  "src": "8359:78:19",
                  "trueBody": {
                    "id": 7212,
                    "nodeType": "Block",
                    "src": "8376:61:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7207,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11485,
                                "src": "8408:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8408:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7209,
                              "name": "hatID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7196,
                              "src": "8420:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7206,
                            "name": "changeHatInternal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8382,
                            "src": "8390:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8390:36:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7211,
                        "nodeType": "ExpressionStatement",
                        "src": "8390:36:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev IRToken.createHat implementation",
            "id": 7215,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7194,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7193,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "8252:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8252:12:19"
              }
            ],
            "name": "createHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7186,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8142:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7184,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8142:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7185,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8142:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7189,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8181:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7187,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "8181:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7188,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8181:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7191,
                  "name": "doChangeHat",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8220:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7190,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8220:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8132:110:19"
            },
            "returnParameters": {
              "id": 7197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7196,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8274:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7195,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8274:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8273:15:19"
            },
            "scope": 9287,
            "src": "8114:329:19",
            "stateMutability": "nonpayable",
            "superFunction": 6252,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7237,
              "nodeType": "Block",
              "src": "8566:115:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7225,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "8594:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8594:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7227,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7217,
                        "src": "8606:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7224,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "8576:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8576:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7229,
                  "nodeType": "ExpressionStatement",
                  "src": "8576:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7231,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "8642:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8642:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7230,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "8622:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8622:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7234,
                  "nodeType": "ExpressionStatement",
                  "src": "8622:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8670:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7223,
                  "id": 7236,
                  "nodeType": "Return",
                  "src": "8663:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeHat implementation",
            "id": 7238,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7220,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7219,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "8538:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8538:12:19"
              }
            ],
            "name": "changeHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7217,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7238,
                  "src": "8514:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7216,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8514:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8513:15:19"
            },
            "returnParameters": {
              "id": 7223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7222,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7238,
                  "src": "8560:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7221,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8560:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8559:6:19"
            },
            "scope": 9287,
            "src": "8495:186:19",
            "stateMutability": "nonpayable",
            "superFunction": 6259,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7248,
              "nodeType": "Block",
              "src": "8804:39:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7243,
                        "name": "hats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9331,
                        "src": "8821:4:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                          "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                        }
                      },
                      "id": 7244,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8821:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 7245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8835:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8821:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7242,
                  "id": 7247,
                  "nodeType": "Return",
                  "src": "8814:22:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getMaximumHatID implementation",
            "id": 7249,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaximumHatID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7239,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8763:2:19"
            },
            "returnParameters": {
              "id": 7242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7241,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7249,
                  "src": "8789:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8789:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8788:15:19"
            },
            "scope": 9287,
            "src": "8739:104:19",
            "stateMutability": "view",
            "superFunction": 6271,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7277,
              "nodeType": "Block",
              "src": "9111:102:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7262,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7254,
                      "src": "9121:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7263,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "9129:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                            "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                          }
                        },
                        "id": 7265,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7264,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7251,
                          "src": "9138:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9129:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage",
                          "typeString": "struct RTokenStructs.Account storage ref"
                        }
                      },
                      "id": 7266,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hatID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9394,
                      "src": "9129:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9121:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7268,
                  "nodeType": "ExpressionStatement",
                  "src": "9121:29:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 7269,
                          "name": "recipients",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7257,
                          "src": "9161:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7270,
                          "name": "proportions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7260,
                          "src": "9173:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        }
                      ],
                      "id": 7271,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9160:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7273,
                          "name": "hatID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7254,
                          "src": "9200:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7272,
                        "name": "_getHatByID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7352,
                        "src": "9188:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) view returns (address[] memory,uint32[] memory)"
                        }
                      },
                      "id": 7274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9188:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "src": "9160:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7276,
                  "nodeType": "ExpressionStatement",
                  "src": "9160:46:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getHatByAddress implementation",
            "id": 7278,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHatByAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7251,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "8926:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8926:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8925:15:19"
            },
            "returnParameters": {
              "id": 7261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7254,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "9001:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9001:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7257,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "9028:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7255,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9028:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7256,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9028:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7260,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "9069:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7258,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9069:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7259,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9069:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8987:119:19"
            },
            "scope": 9287,
            "src": "8901:312:19",
            "stateMutability": "view",
            "superFunction": 6284,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7297,
              "nodeType": "Block",
              "src": "9406:63:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 7289,
                          "name": "recipients",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7284,
                          "src": "9417:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7290,
                          "name": "proportions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7287,
                          "src": "9429:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        }
                      ],
                      "id": 7291,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9416:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7293,
                          "name": "hatID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7280,
                          "src": "9456:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7292,
                        "name": "_getHatByID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7352,
                        "src": "9444:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) view returns (address[] memory,uint32[] memory)"
                        }
                      },
                      "id": 7294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9444:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "src": "9416:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7296,
                  "nodeType": "ExpressionStatement",
                  "src": "9416:46:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getHatByID implementation",
            "id": 7298,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHatByID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7280,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "9286:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9286:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9285:15:19"
            },
            "returnParameters": {
              "id": 7288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7284,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "9348:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7282,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9348:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7283,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9348:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7287,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "9377:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7285,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9377:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7286,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9377:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9347:58:19"
            },
            "scope": 9287,
            "src": "9266:203:19",
            "stateMutability": "view",
            "superFunction": 6295,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7351,
              "nodeType": "Block",
              "src": "9615:296:19",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7309,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7300,
                        "src": "9629:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9638:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "9629:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7312,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7300,
                        "src": "9643:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7313,
                        "name": "SELF_HAT_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6692,
                        "src": "9652:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9643:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9629:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7349,
                    "nodeType": "Block",
                    "src": "9808:97:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7333,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7304,
                            "src": "9822:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 7337,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9849:1:19",
                                "subdenomination": null,
                                "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": 7336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9835:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (address[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 7334,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9839:7:19",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 7335,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "9839:9:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                  "typeString": "address[]"
                                }
                              }
                            },
                            "id": 7338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9835:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "9822:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 7340,
                        "nodeType": "ExpressionStatement",
                        "src": "9822:29:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7341,
                            "name": "proportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7307,
                            "src": "9865:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 7345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9892:1:19",
                                "subdenomination": null,
                                "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": 7344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9879:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 7342,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9883:6:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 7343,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "9883:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 7346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9879:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "9865:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 7348,
                        "nodeType": "ExpressionStatement",
                        "src": "9865:29:19"
                      }
                    ]
                  },
                  "id": 7350,
                  "nodeType": "IfStatement",
                  "src": "9625:280:19",
                  "trueBody": {
                    "id": 7332,
                    "nodeType": "Block",
                    "src": "9665:137:19",
                    "statements": [
                      {
                        "assignments": [
                          7317
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7317,
                            "name": "hat",
                            "nodeType": "VariableDeclaration",
                            "scope": 7332,
                            "src": "9679:14:19",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Hat_$9392_memory_ptr",
                              "typeString": "struct RTokenStructs.Hat"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 7316,
                              "name": "Hat",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 9392,
                              "src": "9679:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                "typeString": "struct RTokenStructs.Hat"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7321,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7318,
                            "name": "hats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9331,
                            "src": "9696:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                              "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                            }
                          },
                          "id": 7320,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7319,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7300,
                            "src": "9701:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9696:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Hat_$9392_storage",
                            "typeString": "struct RTokenStructs.Hat storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9679:28:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7322,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7304,
                            "src": "9721:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7323,
                              "name": "hat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "9734:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Hat_$9392_memory_ptr",
                                "typeString": "struct RTokenStructs.Hat memory"
                              }
                            },
                            "id": 7324,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipients",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9388,
                            "src": "9734:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "9721:27:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 7326,
                        "nodeType": "ExpressionStatement",
                        "src": "9721:27:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7327,
                            "name": "proportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7307,
                            "src": "9762:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7328,
                              "name": "hat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "9776:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Hat_$9392_memory_ptr",
                                "typeString": "struct RTokenStructs.Hat memory"
                              }
                            },
                            "id": 7329,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "proportions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9391,
                            "src": "9776:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "9762:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 7331,
                        "nodeType": "ExpressionStatement",
                        "src": "9762:29:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 7352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getHatByID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7300,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7352,
                  "src": "9496:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7299,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9496:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9495:15:19"
            },
            "returnParameters": {
              "id": 7308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7304,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7352,
                  "src": "9557:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7302,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9557:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7303,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9557:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7307,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7352,
                  "src": "9586:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7305,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9586:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7306,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9586:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9556:58:19"
            },
            "scope": 9287,
            "src": "9475:436:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7374,
              "nodeType": "Block",
              "src": "10080:145:19",
              "statements": [
                {
                  "assignments": [
                    7360
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7360,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7374,
                      "src": "10090:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7359,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "10090:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7364,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7361,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "10116:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7363,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7362,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7354,
                      "src": "10125:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10116:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10090:41:19"
                },
                {
                  "assignments": [
                    7366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7366,
                      "name": "rGross",
                      "nodeType": "VariableDeclaration",
                      "scope": 7374,
                      "src": "10141:14:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7365,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10141:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7371,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7368,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7360,
                          "src": "10171:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7369,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sInternalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9406,
                        "src": "10171:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7367,
                      "name": "sInternalToR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9187,
                      "src": "10158:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 7370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10158:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10141:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7372,
                    "name": "rGross",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7366,
                    "src": "10212:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7358,
                  "id": 7373,
                  "nodeType": "Return",
                  "src": "10205:13:19"
                }
              ]
            },
            "documentation": "@dev IRToken.receivedSavingsOf implementation",
            "id": 7375,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "receivedSavingsOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7354,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7375,
                  "src": "9998:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7353,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9998:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9997:15:19"
            },
            "returnParameters": {
              "id": 7358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7357,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7375,
                  "src": "10060:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10060:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10059:16:19"
            },
            "scope": 9287,
            "src": "9971:254:19",
            "stateMutability": "view",
            "superFunction": 6302,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7391,
              "nodeType": "Block",
              "src": "10388:88:19",
              "statements": [
                {
                  "assignments": [
                    7383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7383,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7391,
                      "src": "10398:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7382,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "10398:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7387,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7384,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "10424:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7386,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7385,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7377,
                      "src": "10433:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10424:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10398:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7388,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7383,
                      "src": "10456:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account storage pointer"
                      }
                    },
                    "id": 7389,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "lDebt",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9404,
                    "src": "10456:13:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7381,
                  "id": 7390,
                  "nodeType": "Return",
                  "src": "10449:20:19"
                }
              ]
            },
            "documentation": "@dev IRToken.receivedLoanOf implementation",
            "id": 7392,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "receivedLoanOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7377,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7392,
                  "src": "10306:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7376,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10306:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10305:15:19"
            },
            "returnParameters": {
              "id": 7381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7380,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7392,
                  "src": "10368:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7379,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10368:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10367:16:19"
            },
            "scope": 9287,
            "src": "10282:194:19",
            "stateMutability": "view",
            "superFunction": 6309,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7409,
              "nodeType": "Block",
              "src": "10645:104:19",
              "statements": [
                {
                  "assignments": [
                    7400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7400,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7409,
                      "src": "10655:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7399,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "10655:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7404,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7401,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "10681:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7403,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7402,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7394,
                      "src": "10690:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10681:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10655:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7406,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "10734:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      ],
                      "id": 7405,
                      "name": "getInterestPayableOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8419,
                      "src": "10713:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Account_$9407_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct RTokenStructs.Account storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 7407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10713:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7398,
                  "id": 7408,
                  "nodeType": "Return",
                  "src": "10706:36:19"
                }
              ]
            },
            "documentation": "@dev IRToken.interestPayableOf implementation",
            "id": 7410,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "interestPayableOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7394,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7410,
                  "src": "10563:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7393,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10563:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10562:15:19"
            },
            "returnParameters": {
              "id": 7398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7397,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7410,
                  "src": "10625:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7396,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10625:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10624:16:19"
            },
            "scope": 9287,
            "src": "10536:213:19",
            "stateMutability": "view",
            "superFunction": 6316,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7425,
              "nodeType": "Block",
              "src": "10876:64:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7420,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7412,
                        "src": "10906:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7419,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "10886:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10886:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7422,
                  "nodeType": "ExpressionStatement",
                  "src": "10886:26:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10929:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7418,
                  "id": 7424,
                  "nodeType": "Return",
                  "src": "10922:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.payInterest implementation",
            "id": 7426,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7415,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7414,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "10848:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10848:12:19"
              }
            ],
            "name": "payInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7412,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7426,
                  "src": "10824:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7411,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10824:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10823:15:19"
            },
            "returnParameters": {
              "id": 7418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7417,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7426,
                  "src": "10870:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7416,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10870:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10869:6:19"
            },
            "scope": 9287,
            "src": "10803:137:19",
            "stateMutability": "nonpayable",
            "superFunction": 6266,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7445,
              "nodeType": "Block",
              "src": "11069:267:19",
              "statements": [
                {
                  "assignments": [
                    7432
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7432,
                      "name": "totalSavingsAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 7445,
                      "src": "11079:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7431,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11079:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7433,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11079:26:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7434,
                      "name": "totalSavingsAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7432,
                      "src": "11115:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7436,
                          "name": "savingAssetOrignalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9320,
                          "src": "11150:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7435,
                        "name": "sOriginalToR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9223,
                        "src": "11137:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11137:38:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11115:60:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7439,
                  "nodeType": "ExpressionStatement",
                  "src": "11115:60:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7441,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9314,
                        "src": "11247:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7442,
                        "name": "totalSavingsAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7432,
                        "src": "11296:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7440,
                      "name": "GlobalStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9351,
                      "src": "11204:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_GlobalStats_$9351_storage_ptr_$",
                        "typeString": "type(struct RTokenStructs.GlobalStats storage pointer)"
                      }
                    },
                    "id": 7443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "totalSupply",
                      "totalSavingsAmount"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "11204:125:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalStats_$9351_memory",
                      "typeString": "struct RTokenStructs.GlobalStats memory"
                    }
                  },
                  "functionReturnParameters": 7430,
                  "id": 7444,
                  "nodeType": "Return",
                  "src": "11185:144:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getAccountStats implementation!1",
            "id": 7446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getGlobalStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11023:2:19"
            },
            "returnParameters": {
              "id": 7430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7446,
                  "src": "11049:18:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_GlobalStats_$9351_memory_ptr",
                    "typeString": "struct RTokenStructs.GlobalStats"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7428,
                    "name": "GlobalStats",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9351,
                    "src": "11049:11:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalStats_$9351_storage_ptr",
                      "typeString": "struct RTokenStructs.GlobalStats"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11048:20:19"
            },
            "scope": 9287,
            "src": "11000:336:19",
            "stateMutability": "view",
            "superFunction": 6343,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7579,
              "nodeType": "Block",
              "src": "11516:1207:19",
              "statements": [
                {
                  "assignments": [
                    7454
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7454,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7579,
                      "src": "11526:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7453,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "11526:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7458,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7455,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "11552:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7457,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7456,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7448,
                      "src": "11561:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11552:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11526:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7459,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11577:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7461,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "hatID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9353,
                      "src": "11577:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7462,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11591:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7463,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hatID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9394,
                      "src": "11591:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11577:27:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7465,
                  "nodeType": "ExpressionStatement",
                  "src": "11577:27:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7466,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11614:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7468,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9355,
                      "src": "11614:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7469,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11630:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7470,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "11630:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11614:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7472,
                  "nodeType": "ExpressionStatement",
                  "src": "11614:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7473,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11655:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7475,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9357,
                      "src": "11655:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7476,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11673:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7477,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9398,
                      "src": "11673:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11655:35:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7479,
                  "nodeType": "ExpressionStatement",
                  "src": "11655:35:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7480,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11700:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7482,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9359,
                      "src": "11700:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7483,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11714:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7484,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9404,
                      "src": "11714:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11700:27:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7486,
                  "nodeType": "ExpressionStatement",
                  "src": "11700:27:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7487,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11737:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7489,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "sInternalAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9361,
                      "src": "11737:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7490,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11761:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7491,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sInternalAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9406,
                      "src": "11761:23:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11737:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7493,
                  "nodeType": "ExpressionStatement",
                  "src": "11737:47:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7494,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11795:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7496,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rInterestPayable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9363,
                      "src": "11795:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7498,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "11841:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        ],
                        "id": 7497,
                        "name": "getInterestPayableOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8419,
                        "src": "11820:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Account_$9407_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct RTokenStructs.Account storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 7499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11820:29:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11795:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7501,
                  "nodeType": "ExpressionStatement",
                  "src": "11795:54:19"
                },
                {
                  "assignments": [
                    7503
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7503,
                      "name": "statsStored",
                      "nodeType": "VariableDeclaration",
                      "scope": 7579,
                      "src": "11860:38:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                        "typeString": "struct RTokenStructs.AccountStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7502,
                        "name": "AccountStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9371,
                        "src": "11860:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7507,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7504,
                      "name": "accountStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9339,
                      "src": "11901:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AccountStatsStored_$9371_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.AccountStatsStored storage ref)"
                      }
                    },
                    "id": 7506,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7505,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7448,
                      "src": "11914:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11901:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage",
                      "typeString": "struct RTokenStructs.AccountStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11860:60:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7508,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11930:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7510,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "cumulativeInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9365,
                      "src": "11930:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7511,
                        "name": "statsStored",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7503,
                        "src": "11957:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsStored storage pointer"
                        }
                      },
                      "id": 7512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "cumulativeInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9370,
                      "src": "11957:30:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11930:57:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7514,
                  "nodeType": "ExpressionStatement",
                  "src": "11930:57:19"
                },
                {
                  "assignments": [
                    7516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7516,
                      "name": "hat",
                      "nodeType": "VariableDeclaration",
                      "scope": 7579,
                      "src": "11998:15:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                        "typeString": "struct RTokenStructs.Hat"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7515,
                        "name": "Hat",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9392,
                        "src": "11998:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                          "typeString": "struct RTokenStructs.Hat"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7527,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7517,
                      "name": "hats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9331,
                      "src": "12016:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                        "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                      }
                    },
                    "id": 7526,
                    "indexExpression": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7518,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7454,
                            "src": "12021:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 7519,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hatID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9394,
                          "src": "12021:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7520,
                          "name": "SELF_HAT_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6692,
                          "src": "12038:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12021:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7523,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "12080:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7524,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "12080:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "12021:72:19",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12064:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12016:78:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Hat_$9392_storage",
                      "typeString": "struct RTokenStructs.Hat storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11998:96:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7528,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "12108:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7529,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "12108:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12125:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "12108:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7532,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "12130:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7533,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "12130:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7534,
                        "name": "SELF_HAT_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6692,
                        "src": "12147:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "12130:28:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12108:50:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7575,
                    "nodeType": "Block",
                    "src": "12522:172:19",
                    "statements": [
                      {
                        "body": {
                          "id": 7573,
                          "nodeType": "Block",
                          "src": "12589:95:19",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7561,
                                    "name": "stats",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7451,
                                    "src": "12607:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                      "typeString": "struct RTokenStructs.AccountStatsView memory"
                                    }
                                  },
                                  "id": 7563,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lRecipientsSum",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9367,
                                  "src": "12607:20:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7564,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7454,
                                      "src": "12631:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 7565,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "lRecipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9402,
                                    "src": "12631:19:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7570,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7566,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7516,
                                        "src": "12651:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 7567,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "12651:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 7569,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7568,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7550,
                                      "src": "12666:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12651:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12631:38:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12607:62:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7572,
                              "nodeType": "ExpressionStatement",
                              "src": "12607:62:19"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7553,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7550,
                            "src": "12556:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7554,
                                "name": "hat",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7516,
                                "src": "12560:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                }
                              },
                              "id": 7555,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "proportions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9391,
                              "src": "12560:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                "typeString": "uint32[] storage ref"
                              }
                            },
                            "id": 7556,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12560:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12556:26:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7574,
                        "initializationExpression": {
                          "assignments": [
                            7550
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 7550,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 7574,
                              "src": "12541:9:19",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 7549,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "12541:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 7552,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7551,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12553:1:19",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "12541:13:19"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "12584:3:19",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 7558,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7550,
                              "src": "12586:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7560,
                          "nodeType": "ExpressionStatement",
                          "src": "12584:3:19"
                        },
                        "nodeType": "ForStatement",
                        "src": "12536:148:19"
                      }
                    ]
                  },
                  "id": 7576,
                  "nodeType": "IfStatement",
                  "src": "12104:590:19",
                  "trueBody": {
                    "id": 7548,
                    "nodeType": "Block",
                    "src": "12160:356:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7537,
                              "name": "stats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7451,
                              "src": "12441:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                "typeString": "struct RTokenStructs.AccountStatsView memory"
                              }
                            },
                            "id": 7539,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "lRecipientsSum",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9367,
                            "src": "12441:20:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7541,
                                  "name": "stats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7451,
                                  "src": "12474:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                    "typeString": "struct RTokenStructs.AccountStatsView memory"
                                  }
                                },
                                "id": 7542,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9355,
                                "src": "12474:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7543,
                                  "name": "stats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7451,
                                  "src": "12489:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                    "typeString": "struct RTokenStructs.AccountStatsView memory"
                                  }
                                },
                                "id": 7544,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rInterest",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9357,
                                "src": "12489:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7540,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "12464:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12464:41:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12441:64:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7547,
                        "nodeType": "ExpressionStatement",
                        "src": "12441:64:19"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7577,
                    "name": "stats",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7451,
                    "src": "12711:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                      "typeString": "struct RTokenStructs.AccountStatsView memory"
                    }
                  },
                  "functionReturnParameters": 7452,
                  "id": 7578,
                  "nodeType": "Return",
                  "src": "12704:12:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getAccountStats implementation",
            "id": 7580,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7448,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7580,
                  "src": "11419:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11419:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11418:15:19"
            },
            "returnParameters": {
              "id": 7452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7451,
                  "name": "stats",
                  "nodeType": "VariableDeclaration",
                  "scope": 7580,
                  "src": "11481:29:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                    "typeString": "struct RTokenStructs.AccountStatsView"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7450,
                    "name": "AccountStatsView",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9368,
                    "src": "11481:16:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsView_$9368_storage_ptr",
                      "typeString": "struct RTokenStructs.AccountStatsView"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11480:31:19"
            },
            "scope": 9287,
            "src": "11394:1329:19",
            "stateMutability": "view",
            "superFunction": 6350,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7618,
              "nodeType": "Block",
              "src": "12887:267:19",
              "statements": [
                {
                  "assignments": [
                    7588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7588,
                      "name": "statsStored",
                      "nodeType": "VariableDeclaration",
                      "scope": 7618,
                      "src": "12897:34:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7587,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "12897:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7592,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7589,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "12934:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 7591,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7590,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7582,
                      "src": "12943:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12934:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12897:52:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7593,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7585,
                        "src": "12959:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                          "typeString": "struct RTokenStructs.HatStatsView memory"
                        }
                      },
                      "id": 7595,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9373,
                      "src": "12959:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7596,
                        "name": "statsStored",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7588,
                        "src": "12976:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 7597,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "12976:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12959:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7599,
                  "nodeType": "ExpressionStatement",
                  "src": "12959:37:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7600,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7585,
                        "src": "13006:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                          "typeString": "struct RTokenStructs.HatStatsView memory"
                        }
                      },
                      "id": 7602,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalLoans",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9375,
                      "src": "13006:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7603,
                        "name": "statsStored",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7588,
                        "src": "13025:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 7604,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalLoans",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9382,
                      "src": "13025:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13006:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7606,
                  "nodeType": "ExpressionStatement",
                  "src": "13006:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7607,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7585,
                        "src": "13058:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                          "typeString": "struct RTokenStructs.HatStatsView memory"
                        }
                      },
                      "id": 7609,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalSavings",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9377,
                      "src": "13058:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7611,
                            "name": "statsStored",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7588,
                            "src": "13092:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                              "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                            }
                          },
                          "id": 7612,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalInternalSavings",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9384,
                          "src": "13092:32:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7610,
                        "name": "sInternalToR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9187,
                        "src": "13079:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13079:46:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13058:67:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7615,
                  "nodeType": "ExpressionStatement",
                  "src": "13058:67:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7616,
                    "name": "stats",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7585,
                    "src": "13142:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                      "typeString": "struct RTokenStructs.HatStatsView memory"
                    }
                  },
                  "functionReturnParameters": 7586,
                  "id": 7617,
                  "nodeType": "Return",
                  "src": "13135:12:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getHatStats implementation",
            "id": 7619,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHatStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7583,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7582,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7619,
                  "src": "12798:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7581,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12798:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12797:15:19"
            },
            "returnParameters": {
              "id": 7586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7585,
                  "name": "stats",
                  "nodeType": "VariableDeclaration",
                  "scope": 7619,
                  "src": "12860:25:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                    "typeString": "struct RTokenStructs.HatStatsView"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7584,
                    "name": "HatStatsView",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9378,
                    "src": "12860:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsView_$9378_storage_ptr",
                      "typeString": "struct RTokenStructs.HatStatsView"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12859:27:19"
            },
            "scope": 9287,
            "src": "12777:377:19",
            "stateMutability": "view",
            "superFunction": 6357,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7628,
              "nodeType": "Block",
              "src": "13289:36:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7625,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "13314:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      ],
                      "id": 7624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "13306:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 7626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13306:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 7623,
                  "id": 7627,
                  "nodeType": "Return",
                  "src": "13299:19:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getCurrentSavingStrategy implementation",
            "id": 7629,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentSavingStrategy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13254:2:19"
            },
            "returnParameters": {
              "id": 7623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7622,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7629,
                  "src": "13280:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7621,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13280:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13279:9:19"
            },
            "scope": 9287,
            "src": "13221:104:19",
            "stateMutability": "view",
            "superFunction": 6331,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7646,
              "nodeType": "Block",
              "src": "13515:108:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7636,
                      "name": "sOriginalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7634,
                      "src": "13525:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7637,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "13543:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13525:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7639,
                  "nodeType": "ExpressionStatement",
                  "src": "13525:42:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7640,
                      "name": "rAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "13577:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7642,
                          "name": "sOriginalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7634,
                          "src": "13600:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7641,
                        "name": "sOriginalToR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9223,
                        "src": "13587:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7643,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13587:29:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13577:39:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7645,
                  "nodeType": "ExpressionStatement",
                  "src": "13577:39:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getSavingAssetBalance implementation",
            "id": 7647,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSavingAssetBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7630,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13419:2:19"
            },
            "returnParameters": {
              "id": 7635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7632,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7647,
                  "src": "13469:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7631,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13469:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7634,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7647,
                  "src": "13486:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13486:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13468:42:19"
            },
            "scope": 9287,
            "src": "13389:234:19",
            "stateMutability": "view",
            "superFunction": 6338,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7766,
              "nodeType": "Block",
              "src": "13813:2264:19",
              "statements": [
                {
                  "assignments": [
                    7657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7657,
                      "name": "allocationStrategy",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "13823:38:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7656,
                        "name": "IAllocationStrategy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6133,
                        "src": "13823:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7661,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7659,
                        "name": "allocationStrategy_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7649,
                        "src": "13884:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7658,
                      "name": "IAllocationStrategy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6133,
                      "src": "13864:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IAllocationStrategy_$6133_$",
                        "typeString": "type(contract IAllocationStrategy)"
                      }
                    },
                    "id": 7660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13864:40:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13823:81:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7663,
                              "name": "allocationStrategy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7657,
                              "src": "13935:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                "typeString": "contract IAllocationStrategy"
                              }
                            },
                            "id": 7664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "underlying",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6101,
                            "src": "13935:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 7665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13935:31:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7667,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9318,
                              "src": "13978:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$11470",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$11470",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 7666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13970:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13970:14:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "13935:49:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65772073747261746567792073686f756c642068617665207468652073616d6520756e6465726c79696e67206173736574",
                        "id": 7670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13998:52:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_64692d076d2423d016b054c3ae011042efd9cec21fce2e3d2eb50e670c50a910",
                          "typeString": "literal_string \"New strategy should have the same underlying asset\""
                        },
                        "value": "New strategy should have the same underlying asset"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_64692d076d2423d016b054c3ae011042efd9cec21fce2e3d2eb50e670c50a910",
                          "typeString": "literal_string \"New strategy should have the same underlying asset\""
                        }
                      ],
                      "id": 7662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "13914:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13914:146:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7672,
                  "nodeType": "ExpressionStatement",
                  "src": "13914:146:19"
                },
                {
                  "assignments": [
                    7674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7674,
                      "name": "oldIas",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14070:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7673,
                        "name": "IAllocationStrategy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6133,
                        "src": "14070:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7676,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7675,
                    "name": "ias",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9316,
                    "src": "14099:3:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14070:32:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7677,
                      "name": "ias",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9316,
                      "src": "14112:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7678,
                      "name": "allocationStrategy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7657,
                      "src": "14118:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "src": "14112:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "id": 7680,
                  "nodeType": "ExpressionStatement",
                  "src": "14112:24:19"
                },
                {
                  "assignments": [
                    7682,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7682,
                      "name": "sOriginalBurned",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14198:23:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7681,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14198:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 7686,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7683,
                        "name": "oldIas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7674,
                        "src": "14227:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 7684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemAll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6132,
                      "src": "14227:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function () external returns (uint256,uint256)"
                      }
                    },
                    "id": 7685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14227:18:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14197:48:19"
                },
                {
                  "assignments": [
                    7688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7688,
                      "name": "totalAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14255:19:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7687,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14255:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7695,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7692,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11553,
                            "src": "14301:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RToken_$9287",
                              "typeString": "contract RToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_RToken_$9287",
                              "typeString": "contract RToken"
                            }
                          ],
                          "id": 7691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14293:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14293:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7689,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9318,
                        "src": "14277:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$11470",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 7690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11415,
                      "src": "14277:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14277:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14255:52:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7700,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "14398:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              ],
                              "id": 7699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14390:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 7701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14390:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7702,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7688,
                            "src": "14404:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7697,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "14376:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11442,
                          "src": "14376:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14376:40:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e20617070726f7665206661696c6564",
                        "id": 7704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14418:22:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        },
                        "value": "token approve failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        }
                      ],
                      "id": 7696,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "14368:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14368:73:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7706,
                  "nodeType": "ExpressionStatement",
                  "src": "14368:73:19"
                },
                {
                  "assignments": [
                    7708
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7708,
                      "name": "sOriginalCreated",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14451:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7707,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14451:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7713,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7711,
                        "name": "totalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7688,
                        "src": "14499:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7709,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "14478:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 7710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "investUnderlying",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6118,
                      "src": "14478:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) external returns (uint256)"
                      }
                    },
                    "id": 7712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14478:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14451:60:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7715,
                          "name": "ias",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9316,
                          "src": "14964:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        ],
                        "id": 7714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14956:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14956:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7718,
                          "name": "oldIas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7674,
                          "src": "14980:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        ],
                        "id": 7717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14972:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14972:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14956:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7734,
                  "nodeType": "IfStatement",
                  "src": "14952:122:19",
                  "trueBody": {
                    "id": 7733,
                    "nodeType": "Block",
                    "src": "14989:85:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 7728,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6497,
                                    "src": "15054:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 7729,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15054:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7727,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15046:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 7730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15046:16:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7723,
                                      "name": "oldIas",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7674,
                                      "src": "15019:6:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                        "typeString": "contract IAllocationStrategy"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                        "typeString": "contract IAllocationStrategy"
                                      }
                                    ],
                                    "id": 7722,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15011:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 7724,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15011:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7721,
                                "name": "Ownable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6574,
                                "src": "15003:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Ownable_$6574_$",
                                  "typeString": "type(contract Ownable)"
                                }
                              },
                              "id": 7725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15003:24:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Ownable_$6574",
                                "typeString": "contract Ownable"
                              }
                            },
                            "id": 7726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6549,
                            "src": "15003:42:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 7731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15003:60:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7732,
                        "nodeType": "ExpressionStatement",
                        "src": "15003:60:19"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7736
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7736,
                      "name": "sInternalAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "15626:23:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7735,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15626:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7740,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7738,
                        "name": "savingAssetOrignalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9320,
                        "src": "15673:24:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7737,
                      "name": "sOriginalToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9239,
                      "src": "15652:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 7739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15652:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15626:72:19"
                },
                {
                  "assignments": [
                    7742
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7742,
                      "name": "savingAssetConversionRateOld",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "15708:36:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7741,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15708:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7744,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7743,
                    "name": "savingAssetConversionRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9322,
                    "src": "15747:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15708:64:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7745,
                      "name": "savingAssetConversionRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9322,
                      "src": "15782:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7751,
                          "name": "sOriginalCreated",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7708,
                          "src": "15890:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7748,
                              "name": "savingAssetConversionRateOld",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7742,
                              "src": "15843:28:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7746,
                              "name": "sOriginalBurned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7682,
                              "src": "15810:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10771,
                            "src": "15810:32:19",
                            "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": 7749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15810:62:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10787,
                        "src": "15810:79:19",
                        "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": 7752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15810:97:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15782:125:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7754,
                  "nodeType": "ExpressionStatement",
                  "src": "15782:125:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7755,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "15917:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7757,
                          "name": "sInternalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7736,
                          "src": "15965:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7756,
                        "name": "sInternalToSOriginal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9255,
                        "src": "15944:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15944:37:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15917:64:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7760,
                  "nodeType": "ExpressionStatement",
                  "src": "15917:64:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7762,
                        "name": "allocationStrategy_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7649,
                        "src": "16023:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7763,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "16044:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7761,
                      "name": "AllocationStrategyChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6434,
                      "src": "15997:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15997:73:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7765,
                  "nodeType": "EmitStatement",
                  "src": "15992:78:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeAllocationStrategy implementation",
            "id": 7767,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7652,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7651,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "13778:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13778:12:19"
              },
              {
                "arguments": null,
                "id": 7654,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7653,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "13799:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13799:9:19"
              }
            ],
            "name": "changeAllocationStrategy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7649,
                  "name": "allocationStrategy_",
                  "nodeType": "VariableDeclaration",
                  "scope": 7767,
                  "src": "13724:27:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7648,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13724:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13723:29:19"
            },
            "returnParameters": {
              "id": 7655,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13813:0:19"
            },
            "scope": 9287,
            "src": "13690:2387:19",
            "stateMutability": "nonpayable",
            "superFunction": 6412,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7776,
              "nodeType": "Block",
              "src": "16231:36:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7773,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "16256:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      ],
                      "id": 7772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16248:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 7774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16248:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 7771,
                  "id": 7775,
                  "nodeType": "Return",
                  "src": "16241:19:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeHatFor implementation",
            "id": 7777,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentAllocationStrategy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7768,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16169:2:19"
            },
            "returnParameters": {
              "id": 7771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7770,
                  "name": "allocationStrategy",
                  "nodeType": "VariableDeclaration",
                  "scope": 7777,
                  "src": "16203:26:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7769,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16203:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16202:28:19"
            },
            "scope": 9287,
            "src": "16132:135:19",
            "stateMutability": "view",
            "superFunction": 6407,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7798,
              "nodeType": "Block",
              "src": "16403:155:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7788,
                            "name": "contractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7779,
                            "src": "16433:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7787,
                          "name": "_isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9149,
                          "src": "16421:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 7789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16421:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f6e74726163742061646472657373",
                        "id": 7790,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16451:48:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4ea06904805f14cdb96147469b8b74a6cf2d4e445516a1081172ae5ef5b073f8",
                          "typeString": "literal_string \"Admin can only change hat for contract address\""
                        },
                        "value": "Admin can only change hat for contract address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4ea06904805f14cdb96147469b8b74a6cf2d4e445516a1081172ae5ef5b073f8",
                          "typeString": "literal_string \"Admin can only change hat for contract address\""
                        }
                      ],
                      "id": 7786,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16413:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16413:87:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7792,
                  "nodeType": "ExpressionStatement",
                  "src": "16413:87:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7794,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7779,
                        "src": "16528:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7795,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7781,
                        "src": "16545:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7793,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "16510:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16510:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7797,
                  "nodeType": "ExpressionStatement",
                  "src": "16510:41:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeHatFor implementation",
            "id": 7799,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7784,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7783,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "16393:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16393:9:19"
              }
            ],
            "name": "changeHatFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7779,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 7799,
                  "src": "16344:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16344:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7781,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7799,
                  "src": "16369:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7780,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16369:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16343:40:19"
            },
            "returnParameters": {
              "id": 7785,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16403:0:19"
            },
            "scope": 9287,
            "src": "16322:236:19",
            "stateMutability": "nonpayable",
            "superFunction": 6419,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7816,
              "nodeType": "Block",
              "src": "16685:78:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7809,
                        "name": "newCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7801,
                        "src": "16713:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7808,
                      "name": "updateCodeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6596,
                      "src": "16695:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16695:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7811,
                  "nodeType": "ExpressionStatement",
                  "src": "16695:26:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7813,
                        "name": "newCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7801,
                        "src": "16748:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7812,
                      "name": "CodeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6428,
                      "src": "16736:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16736:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7815,
                  "nodeType": "EmitStatement",
                  "src": "16731:25:19"
                }
              ]
            },
            "documentation": "@dev Update the rToken logic contract code",
            "id": 7817,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7804,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7803,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "16661:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16661:9:19"
              },
              {
                "arguments": null,
                "id": 7806,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7805,
                  "name": "delegatedOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6452,
                  "src": "16671:13:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16671:13:19"
              }
            ],
            "name": "updateCode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7801,
                  "name": "newCode",
                  "nodeType": "VariableDeclaration",
                  "scope": 7817,
                  "src": "16635:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7800,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16635:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16634:17:19"
            },
            "returnParameters": {
              "id": 7807,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16685:0:19"
            },
            "scope": 9287,
            "src": "16615:148:19",
            "stateMutability": "nonpayable",
            "superFunction": 6424,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7978,
              "nodeType": "Block",
              "src": "17344:1623:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7829,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7821,
                          "src": "17362:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7830,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7823,
                          "src": "17369:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "17362:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7372632073686f756c64206e6f7420657175616c20647374",
                        "id": 7832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17374:26:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5cadebdca1c77de3ee4c202672e859d40979e1306af76927793afba42f15bacb",
                          "typeString": "literal_string \"src should not equal dst\""
                        },
                        "value": "src should not equal dst"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5cadebdca1c77de3ee4c202672e859d40979e1306af76927793afba42f15bacb",
                          "typeString": "literal_string \"src should not equal dst\""
                        }
                      ],
                      "id": 7828,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17354:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17354:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7834,
                  "nodeType": "ExpressionStatement",
                  "src": "17354:47:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7836,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9335,
                              "src": "17433:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                              }
                            },
                            "id": 7838,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7837,
                              "name": "src",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7821,
                              "src": "17442:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17433:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage",
                              "typeString": "struct RTokenStructs.Account storage ref"
                            }
                          },
                          "id": 7839,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "17433:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7840,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7825,
                          "src": "17458:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17433:31:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f7567682062616c616e636520746f207472616e73666572",
                        "id": 7842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17478:32:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a72616f29521a03aedf888c3828752867ede410a093ae0e38c6270325f6641c6",
                          "typeString": "literal_string \"Not enough balance to transfer\""
                        },
                        "value": "Not enough balance to transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a72616f29521a03aedf888c3828752867ede410a093ae0e38c6270325f6641c6",
                          "typeString": "literal_string \"Not enough balance to transfer\""
                        }
                      ],
                      "id": 7835,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17412:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17412:108:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7844,
                  "nodeType": "ExpressionStatement",
                  "src": "17412:108:19"
                },
                {
                  "assignments": [
                    7846
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7846,
                      "name": "startingAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "17595:25:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7845,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17595:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7848,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 7847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17623:1:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17595:29:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7849,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7819,
                      "src": "17638:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7850,
                      "name": "src",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7821,
                      "src": "17649:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17638:14:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7865,
                    "nodeType": "Block",
                    "src": "17716:77:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7857,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7846,
                            "src": "17730:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7858,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9328,
                                "src": "17750:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7860,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7859,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7821,
                                "src": "17769:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17750:23:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7862,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7861,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7819,
                              "src": "17774:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17750:32:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17730:52:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7864,
                        "nodeType": "ExpressionStatement",
                        "src": "17730:52:19"
                      }
                    ]
                  },
                  "id": 7866,
                  "nodeType": "IfStatement",
                  "src": "17634:159:19",
                  "trueBody": {
                    "id": 7856,
                    "nodeType": "Block",
                    "src": "17654:56:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7852,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7846,
                            "src": "17668:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7853,
                            "name": "MAX_UINT256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6689,
                            "src": "17688:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17668:31:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7855,
                        "nodeType": "ExpressionStatement",
                        "src": "17668:31:19"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7868,
                          "name": "startingAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7846,
                          "src": "17823:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7869,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7825,
                          "src": "17844:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17823:27:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e73666572",
                        "id": 7871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17864:35:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e977e708d71179266f4ef734bb7d21e1e7e25a74ec4c12926444b1b98c0a4f2",
                          "typeString": "literal_string \"Not enough allowance for transfer\""
                        },
                        "value": "Not enough allowance for transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0e977e708d71179266f4ef734bb7d21e1e7e25a74ec4c12926444b1b98c0a4f2",
                          "typeString": "literal_string \"Not enough allowance for transfer\""
                        }
                      ],
                      "id": 7867,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17802:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17802:107:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7873,
                  "nodeType": "ExpressionStatement",
                  "src": "17802:107:19"
                },
                {
                  "assignments": [
                    7875
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7875,
                      "name": "allowanceNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "17985:20:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7874,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17985:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7878,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18030:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7876,
                        "name": "startingAllowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7846,
                        "src": "18008:17:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10710,
                      "src": "18008:21:19",
                      "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": 7879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18008:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17985:52:19"
                },
                {
                  "assignments": [
                    7882
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7882,
                      "name": "srcTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "18047:20:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7881,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18047:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7890,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7888,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18096:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7883,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "18070:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7885,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7884,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7821,
                            "src": "18079:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18070:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "18070:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10710,
                      "src": "18070:25:19",
                      "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": 7889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18070:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18047:56:19"
                },
                {
                  "assignments": [
                    7892
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7892,
                      "name": "dstTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "18113:20:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7891,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18113:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7900,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7898,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18162:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7893,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "18136:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7895,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7894,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7823,
                            "src": "18145:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18136:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7896,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "18136:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10694,
                      "src": "18136:25:19",
                      "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": 7899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18136:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18113:56:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7901,
                      "name": "startingAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7846,
                      "src": "18239:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7902,
                      "name": "MAX_UINT256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6689,
                      "src": "18260:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18239:32:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7913,
                  "nodeType": "IfStatement",
                  "src": "18235:110:19",
                  "trueBody": {
                    "id": 7912,
                    "nodeType": "Block",
                    "src": "18273:72:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7904,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9328,
                                "src": "18287:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7907,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7905,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7821,
                                "src": "18306:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18287:23:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7908,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7906,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7819,
                              "src": "18311:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "18287:32:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7909,
                            "name": "allowanceNew",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7875,
                            "src": "18322:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18287:47:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7911,
                        "nodeType": "ExpressionStatement",
                        "src": "18287:47:19"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7915
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7915,
                      "name": "sInternalEstimated",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "18390:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7914,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18390:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7920,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7917,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7821,
                        "src": "18445:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7918,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18450:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7916,
                      "name": "estimateAndRecollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8658,
                      "src": "18419:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18419:38:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18390:67:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7922,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7823,
                        "src": "18483:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7923,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18488:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7924,
                        "name": "sInternalEstimated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7915,
                        "src": "18496:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7921,
                      "name": "distributeLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8630,
                      "src": "18467:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 7925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18467:48:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7926,
                  "nodeType": "ExpressionStatement",
                  "src": "18467:48:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7927,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "18559:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                            "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                          }
                        },
                        "id": 7929,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7928,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7821,
                          "src": "18568:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18559:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage",
                          "typeString": "struct RTokenStructs.Account storage ref"
                        }
                      },
                      "id": 7930,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "18559:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7931,
                      "name": "srcTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7882,
                      "src": "18583:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18559:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7933,
                  "nodeType": "ExpressionStatement",
                  "src": "18559:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7934,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "18605:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                            "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                          }
                        },
                        "id": 7936,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7935,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7823,
                          "src": "18614:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18605:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage",
                          "typeString": "struct RTokenStructs.Account storage ref"
                        }
                      },
                      "id": 7937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "18605:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7938,
                      "name": "dstTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7892,
                      "src": "18629:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18605:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7940,
                  "nodeType": "ExpressionStatement",
                  "src": "18605:36:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 7953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7941,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "18695:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 7943,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 7942,
                                  "name": "src",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7821,
                                  "src": "18704:3:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "18695:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "id": 7944,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "18695:19:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18718:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "18695:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7947,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "18735:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 7949,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 7948,
                                  "name": "dst",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7823,
                                  "src": "18744:3:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "18735:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "id": 7950,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "18735:19:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18758:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "18735:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "18695:64:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7954,
                                "name": "accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9335,
                                "src": "18775:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                  "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                }
                              },
                              "id": 7956,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7955,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7821,
                                "src": "18784:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18775:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage",
                                "typeString": "struct RTokenStructs.Account storage ref"
                              }
                            },
                            "id": 7957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hatID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9394,
                            "src": "18775:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 7958,
                            "name": "SELF_HAT_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6692,
                            "src": "18798:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18775:34:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "18695:114:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 7961,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "18694:116:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7971,
                  "nodeType": "IfStatement",
                  "src": "18690:190:19",
                  "trueBody": {
                    "id": 7970,
                    "nodeType": "Block",
                    "src": "18812:68:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7963,
                              "name": "dst",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7823,
                              "src": "18844:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7964,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "18849:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 7966,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 7965,
                                  "name": "src",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7821,
                                  "src": "18858:3:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "18849:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "id": 7967,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "18849:19:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7962,
                            "name": "changeHatInternal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8382,
                            "src": "18826:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18826:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7969,
                        "nodeType": "ExpressionStatement",
                        "src": "18826:43:19"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7973,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7821,
                        "src": "18943:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7974,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7823,
                        "src": "18948:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7975,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18953:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7972,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11461,
                      "src": "18934:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18934:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7977,
                  "nodeType": "EmitStatement",
                  "src": "18929:31:19"
                }
              ]
            },
            "documentation": "@dev Transfer `tokens` tokens from `src` to `dst` by `spender`\nCalled by both `transfer` and `transferFrom` internally\n@param spender The address of the account performing the transfer\n@param src The address of the source account\n@param dst The address of the destination account\n@param tokens The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 7979,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7819,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17247:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7818,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17247:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7821,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17272:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17272:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7823,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17293:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7822,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17293:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7825,
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17314:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7824,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17314:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17237:97:19"
            },
            "returnParameters": {
              "id": 7827,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17344:0:19"
            },
            "scope": 9287,
            "src": "17212:1755:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8082,
              "nodeType": "Block",
              "src": "19248:1018:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7987,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11485,
                                "src": "19295:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7988,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19295:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7990,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11553,
                                  "src": "19315:4:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_RToken_$9287",
                                    "typeString": "contract RToken"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_RToken_$9287",
                                    "typeString": "contract RToken"
                                  }
                                ],
                                "id": 7989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "19307:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 7991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19307:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7985,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9318,
                              "src": "19279:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$11470",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11433,
                            "src": "19279:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 7992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19279:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7993,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7981,
                          "src": "19325:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19279:56:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f75676820616c6c6f77616e6365",
                        "id": 7995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19349:22:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b022b055ca598d53dea4e2d13bd2864e05a62be10c287a4dddfb651804a110cc",
                          "typeString": "literal_string \"Not enough allowance\""
                        },
                        "value": "Not enough allowance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b022b055ca598d53dea4e2d13bd2864e05a62be10c287a4dddfb651804a110cc",
                          "typeString": "literal_string \"Not enough allowance\""
                        }
                      ],
                      "id": 7984,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19258:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19258:123:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7997,
                  "nodeType": "ExpressionStatement",
                  "src": "19258:123:19"
                },
                {
                  "assignments": [
                    7999
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7999,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8082,
                      "src": "19392:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7998,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "19392:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8004,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8000,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "19418:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8003,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8001,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "19427:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 8002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19427:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19418:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19392:46:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8008,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11485,
                              "src": "19508:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19508:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8011,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11553,
                                "src": "19528:4:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_RToken_$9287",
                                  "typeString": "contract RToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_RToken_$9287",
                                  "typeString": "contract RToken"
                                }
                              ],
                              "id": 8010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19520:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19520:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8013,
                            "name": "mintAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7981,
                            "src": "19535:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8006,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "19489:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 8007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11453,
                          "src": "19489:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19489:57:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207472616e73666572206661696c6564",
                        "id": 8015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19548:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        },
                        "value": "token transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        }
                      ],
                      "id": 8005,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19481:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19481:91:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8017,
                  "nodeType": "ExpressionStatement",
                  "src": "19481:91:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8022,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "19612:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              ],
                              "id": 8021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19604:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19604:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8024,
                            "name": "mintAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7981,
                            "src": "19618:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8019,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "19590:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 8020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11442,
                          "src": "19590:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19590:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e20617070726f7665206661696c6564",
                        "id": 8026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19631:22:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        },
                        "value": "token approve failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        }
                      ],
                      "id": 8018,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19582:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19582:72:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8028,
                  "nodeType": "ExpressionStatement",
                  "src": "19582:72:19"
                },
                {
                  "assignments": [
                    8030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8030,
                      "name": "sOriginalCreated",
                      "nodeType": "VariableDeclaration",
                      "scope": 8082,
                      "src": "19664:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8029,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19664:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8035,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8033,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7981,
                        "src": "19712:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8031,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "19691:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 8032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "investUnderlying",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6118,
                      "src": "19691:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) external returns (uint256)"
                      }
                    },
                    "id": 8034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19691:32:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19664:59:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8036,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9314,
                      "src": "19782:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8039,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7981,
                          "src": "19812:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8037,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9314,
                          "src": "19796:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10694,
                        "src": "19796:15:19",
                        "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": 8040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19796:27:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19782:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8042,
                  "nodeType": "ExpressionStatement",
                  "src": "19782:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8043,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7999,
                        "src": "19833:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 8045,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "19833:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8049,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7981,
                          "src": "19871:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8046,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7999,
                            "src": "19851:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8047,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "19851:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10694,
                        "src": "19851:19:19",
                        "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": 8050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19851:31:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19833:49:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8052,
                  "nodeType": "ExpressionStatement",
                  "src": "19833:49:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8053,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "19924:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8056,
                          "name": "sOriginalCreated",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8030,
                          "src": "19980:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8054,
                          "name": "savingAssetOrignalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9320,
                          "src": "19951:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10694,
                        "src": "19951:28:19",
                        "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": 8057,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19951:46:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19924:73:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8059,
                  "nodeType": "ExpressionStatement",
                  "src": "19924:73:19"
                },
                {
                  "assignments": [
                    8061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8061,
                      "name": "sInternalCreated",
                      "nodeType": "VariableDeclaration",
                      "scope": 8082,
                      "src": "20067:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8060,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20067:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8065,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8063,
                        "name": "sOriginalCreated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8030,
                        "src": "20115:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8062,
                      "name": "sOriginalToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9239,
                      "src": "20094:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20094:38:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20067:65:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8067,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "20158:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8068,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20158:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8069,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7981,
                        "src": "20170:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8070,
                        "name": "sInternalCreated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8061,
                        "src": "20182:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8066,
                      "name": "distributeLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8630,
                      "src": "20142:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 8071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20142:57:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8072,
                  "nodeType": "ExpressionStatement",
                  "src": "20142:57:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8075,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20232:1:19",
                            "subdenomination": null,
                            "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": 8074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20224:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20224:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8077,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "20236:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20236:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8079,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7981,
                        "src": "20248:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8073,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11461,
                      "src": "20215:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 8080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20215:44:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8081,
                  "nodeType": "EmitStatement",
                  "src": "20210:49:19"
                }
              ]
            },
            "documentation": "@dev Sender supplies assets into the market and receives rTokens in exchange\n@dev Invest into underlying assets immediately\n@param mintAmount The amount of the underlying asset to supply",
            "id": 8083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mintInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7981,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8083,
                  "src": "19219:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7980,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19219:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19218:20:19"
            },
            "returnParameters": {
              "id": 7983,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19248:0:19"
            },
            "scope": 9287,
            "src": "19197:1069:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8153,
              "nodeType": "Block",
              "src": "20659:660:19",
              "statements": [
                {
                  "assignments": [
                    8091
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8091,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8153,
                      "src": "20669:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8090,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "20669:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8096,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8092,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "20695:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8095,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8093,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "20704:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 8094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "20704:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20695:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20669:46:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8098,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "20733:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20748:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "20733:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52656465656d20616d6f756e742063616e6e6f74206265207a65726f",
                        "id": 8101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20751:30:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_acf1f5b4fc90142c95408a639c4dbf42a0972caed5524ba91bbcbcabf4fb96aa",
                          "typeString": "literal_string \"Redeem amount cannot be zero\""
                        },
                        "value": "Redeem amount cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_acf1f5b4fc90142c95408a639c4dbf42a0972caed5524ba91bbcbcabf4fb96aa",
                          "typeString": "literal_string \"Redeem amount cannot be zero\""
                        }
                      ],
                      "id": 8097,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "20725:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20725:57:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8103,
                  "nodeType": "ExpressionStatement",
                  "src": "20725:57:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8105,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "20813:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8106,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8091,
                            "src": "20829:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8107,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "20829:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20813:31:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f7567682062616c616e636520746f2072656465656d",
                        "id": 8109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20858:30:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6209def0ee1e007e83a5b6666a866519adb9ecb0ba9a52821eda4d26961fd830",
                          "typeString": "literal_string \"Not enough balance to redeem\""
                        },
                        "value": "Not enough balance to redeem"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6209def0ee1e007e83a5b6666a866519adb9ecb0ba9a52821eda4d26961fd830",
                          "typeString": "literal_string \"Not enough balance to redeem\""
                        }
                      ],
                      "id": 8104,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "20792:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20792:106:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8111,
                  "nodeType": "ExpressionStatement",
                  "src": "20792:106:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8113,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "20933:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8114,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20933:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8115,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8087,
                        "src": "20945:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8112,
                      "name": "redeemAndRecollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8696,
                      "src": "20909:23:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 8116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20909:49:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8117,
                  "nodeType": "ExpressionStatement",
                  "src": "20909:49:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8118,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8091,
                        "src": "21028:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "21028:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8124,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "21066:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8121,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8091,
                            "src": "21046:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8122,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "21046:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10710,
                        "src": "21046:19:19",
                        "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": 8125,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21046:33:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21028:51:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8127,
                  "nodeType": "ExpressionStatement",
                  "src": "21028:51:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8128,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9314,
                      "src": "21089:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8131,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "21119:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8129,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9314,
                          "src": "21103:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10710,
                        "src": "21103:15:19",
                        "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": 8132,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21103:29:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21089:43:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8134,
                  "nodeType": "ExpressionStatement",
                  "src": "21089:43:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8138,
                            "name": "redeemTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8085,
                            "src": "21201:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8139,
                            "name": "redeemAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8087,
                            "src": "21211:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8136,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "21186:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 8137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11424,
                          "src": "21186:14:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21186:38:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207472616e73666572206661696c6564",
                        "id": 8141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21226:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        },
                        "value": "token transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        }
                      ],
                      "id": 8135,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21178:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21178:72:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8143,
                  "nodeType": "ExpressionStatement",
                  "src": "21178:72:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8145,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "21275:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21275:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21295:1:19",
                            "subdenomination": null,
                            "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": 8147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21287:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21287:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8150,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8087,
                        "src": "21299:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8144,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11461,
                      "src": "21266:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 8151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21266:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8152,
                  "nodeType": "EmitStatement",
                  "src": "21261:51:19"
                }
              ]
            },
            "documentation": "@notice Sender redeems rTokens in exchange for the underlying asset\n@dev Withdraw equal amount of initially supplied underlying assets\n@param redeemTo Destination address to send the redeemed tokens to\n@param redeemAmount The number of rTokens to redeem into underlying",
            "id": 8154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8085,
                  "name": "redeemTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 8154,
                  "src": "20610:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20610:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8087,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8154,
                  "src": "20628:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20628:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20609:40:19"
            },
            "returnParameters": {
              "id": 8089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20659:0:19"
            },
            "scope": 9287,
            "src": "20586:733:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8286,
              "nodeType": "Block",
              "src": "21651:1325:19",
              "statements": [
                {
                  "assignments": [
                    8166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8166,
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "scope": 8286,
                      "src": "21661:9:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8165,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21661:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8167,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21661:9:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8169,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8157,
                            "src": "21689:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 8170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21689:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21709:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "21689:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206861743a206174206c65617374206f6e6520726563697069656e74",
                        "id": 8173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21712:37:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc0ddad9b29a71f9a6909224453564500ee767a44f06548943d8dc6c353f8e42",
                          "typeString": "literal_string \"Invalid hat: at least one recipient\""
                        },
                        "value": "Invalid hat: at least one recipient"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc0ddad9b29a71f9a6909224453564500ee767a44f06548943d8dc6c353f8e42",
                          "typeString": "literal_string \"Invalid hat: at least one recipient\""
                        }
                      ],
                      "id": 8168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21681:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21681:69:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8175,
                  "nodeType": "ExpressionStatement",
                  "src": "21681:69:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8177,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8157,
                            "src": "21768:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 8178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21768:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8179,
                          "name": "MAX_NUM_HAT_RECIPIENTS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6698,
                          "src": "21789:22:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21768:43:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c696c64206861743a206d6178696d756d206e756d626572206f6620726563697069656e74732072656163686564",
                        "id": 8181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21813:52:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bed33f2d8113f62fedec8838832829078f28c97d91080dccf10e9d8410a5c5c3",
                          "typeString": "literal_string \"Invalild hat: maximum number of recipients reached\""
                        },
                        "value": "Invalild hat: maximum number of recipients reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bed33f2d8113f62fedec8838832829078f28c97d91080dccf10e9d8410a5c5c3",
                          "typeString": "literal_string \"Invalild hat: maximum number of recipients reached\""
                        }
                      ],
                      "id": 8176,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21760:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21760:106:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8183,
                  "nodeType": "ExpressionStatement",
                  "src": "21760:106:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8185,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8157,
                            "src": "21897:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 8186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21897:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8187,
                            "name": "proportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8160,
                            "src": "21918:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "id": 8188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21918:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21897:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67",
                        "id": 8190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21950:34:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2bff1c469384c5f5cf75f6141d542ce3bde49a9b59bc1b7739e1850c1d33b927",
                          "typeString": "literal_string \"Invalid hat: length not matching\""
                        },
                        "value": "Invalid hat: length not matching"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2bff1c469384c5f5cf75f6141d542ce3bde49a9b59bc1b7739e1850c1d33b927",
                          "typeString": "literal_string \"Invalid hat: length not matching\""
                        }
                      ],
                      "id": 8184,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21876:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21876:118:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8192,
                  "nodeType": "ExpressionStatement",
                  "src": "21876:118:19"
                },
                {
                  "assignments": [
                    8194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8194,
                      "name": "totalProportions",
                      "nodeType": "VariableDeclaration",
                      "scope": 8286,
                      "src": "22153:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8193,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22153:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8196,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 8195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22180:1:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22153:28:19"
                },
                {
                  "body": {
                    "id": 8236,
                    "nodeType": "Block",
                    "src": "22231:360:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "id": 8213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8209,
                                  "name": "proportions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8160,
                                  "src": "22270:11:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 8211,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8210,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8166,
                                  "src": "22282:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22270:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 8212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "22287:1:19",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "22270:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206265206c6172676572207468616e2030",
                              "id": 8214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22306:49:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c990278af974d965462fe70f985e8409cb7daed0126bbcb213475d89f5a8fd78",
                                "typeString": "literal_string \"Invalid hat: proportion should be larger than 0\""
                              },
                              "value": "Invalid hat: proportion should be larger than 0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c990278af974d965462fe70f985e8409cb7daed0126bbcb213475d89f5a8fd78",
                                "typeString": "literal_string \"Invalid hat: proportion should be larger than 0\""
                              }
                            ],
                            "id": 8208,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              11488,
                              11489
                            ],
                            "referencedDeclaration": 11489,
                            "src": "22245:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22245:124:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8216,
                        "nodeType": "ExpressionStatement",
                        "src": "22245:124:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8218,
                                  "name": "recipients",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8157,
                                  "src": "22391:10:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 8220,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8219,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8166,
                                  "src": "22402:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22391:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 8222,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22416:1:19",
                                    "subdenomination": null,
                                    "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": 8221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "22408:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 8223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22408:10:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "22391:27:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964206861743a20726563697069656e742073686f756c64206e6f7420626520307830",
                              "id": 8225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22420:42:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f6ab34497a3e5568793d416e59cf3a35d33911c6a2f8b9e8aa1d8e53f346806",
                                "typeString": "literal_string \"Invalid hat: recipient should not be 0x0\""
                              },
                              "value": "Invalid hat: recipient should not be 0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f6ab34497a3e5568793d416e59cf3a35d33911c6a2f8b9e8aa1d8e53f346806",
                                "typeString": "literal_string \"Invalid hat: recipient should not be 0x0\""
                              }
                            ],
                            "id": 8217,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              11488,
                              11489
                            ],
                            "referencedDeclaration": 11489,
                            "src": "22383:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22383:80:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8227,
                        "nodeType": "ExpressionStatement",
                        "src": "22383:80:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8228,
                            "name": "totalProportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8194,
                            "src": "22537:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8230,
                                  "name": "proportions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8160,
                                  "src": "22565:11:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 8232,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8231,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8166,
                                  "src": "22577:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22565:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 8229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22557:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22557:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22537:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8235,
                        "nodeType": "ExpressionStatement",
                        "src": "22537:43:19"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8201,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8166,
                      "src": "22203:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8202,
                        "name": "recipients",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8157,
                        "src": "22207:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 8203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22207:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22203:21:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8237,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8197,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22196:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22200:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "22196:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8200,
                    "nodeType": "ExpressionStatement",
                    "src": "22196:5:19"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "22226:3:19",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8205,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22228:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8207,
                    "nodeType": "ExpressionStatement",
                    "src": "22226:3:19"
                  },
                  "nodeType": "ForStatement",
                  "src": "22191:400:19"
                },
                {
                  "body": {
                    "id": 8268,
                    "nodeType": "Block",
                    "src": "22641:235:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8249,
                              "name": "proportions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8160,
                              "src": "22655:11:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            "id": 8251,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8250,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8166,
                              "src": "22667:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "22655:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8264,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8261,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 8254,
                                              "name": "proportions",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8160,
                                              "src": "22769:11:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                                "typeString": "uint32[] memory"
                                              }
                                            },
                                            "id": 8256,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8255,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8166,
                                              "src": "22781:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "22769:14:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "id": 8253,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "22761:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 8257,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "22761:23:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 8259,
                                            "name": "PROPORTION_BASE",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6695,
                                            "src": "22795:15:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "id": 8258,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "22787:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 8260,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "22787:24:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22761:50:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 8262,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "22760:52:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8263,
                                  "name": "totalProportions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8194,
                                  "src": "22835:16:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "22760:91:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22672:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              },
                              "typeName": "uint32"
                            },
                            "id": 8265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22672:193:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "22655:210:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 8267,
                        "nodeType": "ExpressionStatement",
                        "src": "22655:210:19"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8242,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8166,
                      "src": "22612:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8243,
                        "name": "proportions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8160,
                        "src": "22616:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 8244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22616:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22612:22:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8269,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8238,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22605:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22609:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "22605:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8241,
                    "nodeType": "ExpressionStatement",
                    "src": "22605:5:19"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8247,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "22636:3:19",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8246,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22638:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8248,
                    "nodeType": "ExpressionStatement",
                    "src": "22636:3:19"
                  },
                  "nodeType": "ForStatement",
                  "src": "22600:276:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8270,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8163,
                      "src": "22886:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8274,
                                "name": "recipients",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8157,
                                "src": "22908:10:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8275,
                                "name": "proportions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8160,
                                "src": "22920:11:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                  "typeString": "uint32[] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                  "typeString": "uint32[] memory"
                                }
                              ],
                              "id": 8273,
                              "name": "Hat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9392,
                              "src": "22904:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Hat_$9392_storage_ptr_$",
                                "typeString": "type(struct RTokenStructs.Hat storage pointer)"
                              }
                            },
                            "id": 8276,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22904:28:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Hat_$9392_memory",
                              "typeString": "struct RTokenStructs.Hat memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Hat_$9392_memory",
                              "typeString": "struct RTokenStructs.Hat memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8271,
                            "name": "hats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9331,
                            "src": "22894:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                              "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                            }
                          },
                          "id": 8272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "push",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "22894:9:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Hat_$9392_storage_$returns$_t_uint256_$",
                            "typeString": "function (struct RTokenStructs.Hat storage ref) returns (uint256)"
                          }
                        },
                        "id": 8277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22894:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 8278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22936:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "22894:43:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22886:51:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8281,
                  "nodeType": "ExpressionStatement",
                  "src": "22886:51:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8283,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8163,
                        "src": "22963:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8282,
                      "name": "HatCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6381,
                      "src": "22952:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 8284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22952:17:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8285,
                  "nodeType": "EmitStatement",
                  "src": "22947:22:19"
                }
              ]
            },
            "documentation": "@dev Create a new Hat\n@param recipients List of beneficial recipients\n   * @param proportions Relative proportions of benefits received by the recipients",
            "id": 8287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createHatInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8157,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 8287,
                  "src": "21547:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8155,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "21547:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8156,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21547:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8160,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 8287,
                  "src": "21584:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8158,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "21584:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 8159,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21584:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21537:80:19"
            },
            "returnParameters": {
              "id": 8164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8163,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 8287,
                  "src": "21636:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21636:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21635:15:19"
            },
            "scope": 9287,
            "src": "21511:1465:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8381,
              "nodeType": "Block",
              "src": "23175:723:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8295,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23193:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 8296,
                            "name": "SELF_HAT_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6692,
                            "src": "23202:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23193:20:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8298,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23217:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8299,
                              "name": "hats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9331,
                              "src": "23225:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                                "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                              }
                            },
                            "id": 8300,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23225:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23217:19:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "23193:43:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c696420686174204944",
                        "id": 8303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23238:16:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2fead7b7bf176463541cf441aa983de6c382e26ffaefb815e9cf4b5166ad0de3",
                          "typeString": "literal_string \"Invalid hat ID\""
                        },
                        "value": "Invalid hat ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2fead7b7bf176463541cf441aa983de6c382e26ffaefb815e9cf4b5166ad0de3",
                          "typeString": "literal_string \"Invalid hat ID\""
                        }
                      ],
                      "id": 8294,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "23185:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23185:70:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8305,
                  "nodeType": "ExpressionStatement",
                  "src": "23185:70:19"
                },
                {
                  "assignments": [
                    8307
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8307,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23265:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8306,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "23265:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8311,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8308,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "23291:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8310,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8309,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8289,
                      "src": "23300:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23291:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23265:41:19"
                },
                {
                  "assignments": [
                    8313
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8313,
                      "name": "oldHatID",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23316:16:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8312,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23316:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8316,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8314,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8307,
                      "src": "23335:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account storage pointer"
                      }
                    },
                    "id": 8315,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "hatID",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9394,
                    "src": "23335:13:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23316:32:19"
                },
                {
                  "assignments": [
                    8318
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8318,
                      "name": "oldHatStats",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23358:34:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8317,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "23358:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8322,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8319,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "23395:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 8321,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8320,
                      "name": "oldHatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8313,
                      "src": "23404:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23395:18:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23358:55:19"
                },
                {
                  "assignments": [
                    8324
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8324,
                      "name": "newHatStats",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23423:34:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8323,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "23423:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8328,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8325,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "23460:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 8327,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8326,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8291,
                      "src": "23469:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23460:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23423:52:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8329,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8307,
                        "src": "23489:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 8330,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "23489:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8331,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23507:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23489:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8361,
                    "nodeType": "Block",
                    "src": "23727:46:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8355,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8307,
                              "src": "23741:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8357,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hatID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9394,
                            "src": "23741:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8358,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23757:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23741:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8360,
                        "nodeType": "ExpressionStatement",
                        "src": "23741:21:19"
                      }
                    ]
                  },
                  "id": 8362,
                  "nodeType": "IfStatement",
                  "src": "23485:288:19",
                  "trueBody": {
                    "id": 8354,
                    "nodeType": "Block",
                    "src": "23510:211:19",
                    "statements": [
                      {
                        "assignments": [
                          8334
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8334,
                            "name": "sInternalEstimated",
                            "nodeType": "VariableDeclaration",
                            "scope": 8354,
                            "src": "23524:26:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8333,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "23524:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8340,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8336,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8289,
                              "src": "23579:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8337,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8307,
                                "src": "23586:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8338,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9396,
                              "src": "23586:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8335,
                            "name": "estimateAndRecollectLoans",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8658,
                            "src": "23553:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) returns (uint256)"
                            }
                          },
                          "id": 8339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23553:49:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23524:78:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8341,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8307,
                              "src": "23616:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8343,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hatID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9394,
                            "src": "23616:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8344,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23632:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23616:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8346,
                        "nodeType": "ExpressionStatement",
                        "src": "23616:21:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8348,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8289,
                              "src": "23667:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8349,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8307,
                                "src": "23674:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8350,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9396,
                              "src": "23674:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8351,
                              "name": "sInternalEstimated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8334,
                              "src": "23691:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8347,
                            "name": "distributeLoans",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8630,
                            "src": "23651:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 8352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23651:59:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8353,
                        "nodeType": "ExpressionStatement",
                        "src": "23651:59:19"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8363,
                        "name": "oldHatStats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8318,
                        "src": "23782:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 8365,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "23782:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 8366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23806:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "23782:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8368,
                  "nodeType": "ExpressionStatement",
                  "src": "23782:25:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8369,
                        "name": "newHatStats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8324,
                        "src": "23817:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 8371,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "23817:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 8372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23841:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "23817:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8374,
                  "nodeType": "ExpressionStatement",
                  "src": "23817:25:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8376,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8289,
                        "src": "23868:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8377,
                        "name": "oldHatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8313,
                        "src": "23875:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8378,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8291,
                        "src": "23885:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8375,
                      "name": "HatChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6389,
                      "src": "23857:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 8379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23857:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8380,
                  "nodeType": "EmitStatement",
                  "src": "23852:39:19"
                }
              ]
            },
            "documentation": "@dev Change the hat for `owner`\n@param owner Account owner\n@param hatID The id of the Hat",
            "id": 8382,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "changeHatInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8289,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8382,
                  "src": "23136:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23136:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8291,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 8382,
                  "src": "23151:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23151:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23135:30:19"
            },
            "returnParameters": {
              "id": 8293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23175:0:19"
            },
            "scope": 9287,
            "src": "23109:789:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8418,
              "nodeType": "Block",
              "src": "24083:403:19",
              "statements": [
                {
                  "assignments": [
                    8390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8390,
                      "name": "rGross",
                      "nodeType": "VariableDeclaration",
                      "scope": 8418,
                      "src": "24093:14:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8389,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24093:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8395,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8392,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8384,
                          "src": "24123:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8393,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sInternalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9406,
                        "src": "24123:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8391,
                      "name": "sInternalToR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9187,
                      "src": "24110:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24110:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24093:54:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8396,
                      "name": "rGross",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8390,
                      "src": "24161:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8400,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8384,
                                "src": "24189:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8401,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rInterest",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9398,
                              "src": "24189:17:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8397,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8384,
                                "src": "24171:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8398,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lDebt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9404,
                              "src": "24171:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10694,
                            "src": "24171:17:19",
                            "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": 8402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24171:36:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8403,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24170:38:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24161:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8416,
                    "nodeType": "Block",
                    "src": "24371:109:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24468:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 8388,
                        "id": 8415,
                        "nodeType": "Return",
                        "src": "24461:8:19"
                      }
                    ]
                  },
                  "id": 8417,
                  "nodeType": "IfStatement",
                  "src": "24157:323:19",
                  "trueBody": {
                    "id": 8413,
                    "nodeType": "Block",
                    "src": "24210:155:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8405,
                              "name": "rGross",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8390,
                              "src": "24312:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8406,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8384,
                                "src": "24321:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8407,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lDebt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9404,
                              "src": "24321:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24312:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8409,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8384,
                              "src": "24337:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8410,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9398,
                            "src": "24337:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24312:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 8388,
                        "id": 8412,
                        "nodeType": "Return",
                        "src": "24305:49:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Get interest payable of the account",
            "id": 8419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getInterestPayableOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8384,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 8419,
                  "src": "23998:23:19",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                    "typeString": "struct RTokenStructs.Account"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8383,
                    "name": "Account",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9407,
                    "src": "23998:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                      "typeString": "struct RTokenStructs.Account"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23997:25:19"
            },
            "returnParameters": {
              "id": 8388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8387,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8419,
                  "src": "24070:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8386,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24070:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24069:9:19"
            },
            "scope": 9287,
            "src": "23968:518:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8629,
              "nodeType": "Block",
              "src": "25126:2168:19",
              "statements": [
                {
                  "assignments": [
                    8429
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8429,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8629,
                      "src": "25136:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8428,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "25136:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8433,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8430,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "25162:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8432,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8431,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8421,
                      "src": "25171:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25162:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25136:41:19"
                },
                {
                  "assignments": [
                    8435
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8435,
                      "name": "hat",
                      "nodeType": "VariableDeclaration",
                      "scope": 8629,
                      "src": "25187:15:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                        "typeString": "struct RTokenStructs.Hat"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8434,
                        "name": "Hat",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9392,
                        "src": "25187:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                          "typeString": "struct RTokenStructs.Hat"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8446,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8436,
                      "name": "hats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9331,
                      "src": "25205:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                        "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                      }
                    },
                    "id": 8445,
                    "indexExpression": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8437,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8429,
                            "src": "25210:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8438,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hatID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9394,
                          "src": "25210:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8439,
                          "name": "SELF_HAT_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6692,
                          "src": "25227:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25210:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8442,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8429,
                          "src": "25269:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "25269:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "25210:72:19",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25253:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25205:78:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Hat_$9392_storage",
                      "typeString": "struct RTokenStructs.Hat storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25187:96:19"
                },
                {
                  "assignments": [
                    8448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8448,
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "scope": 8629,
                      "src": "25293:9:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8447,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25293:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8449,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25293:9:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8450,
                          "name": "hat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8435,
                          "src": "25316:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                            "typeString": "struct RTokenStructs.Hat storage pointer"
                          }
                        },
                        "id": 8451,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipients",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9388,
                        "src": "25316:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8452,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25316:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25340:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "25316:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8627,
                    "nodeType": "Block",
                    "src": "26950:338:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8605,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8597,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8429,
                              "src": "27042:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8599,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "lDebt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9404,
                            "src": "27042:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8603,
                                "name": "rAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8423,
                                "src": "27076:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8600,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8429,
                                  "src": "27058:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8601,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lDebt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9404,
                                "src": "27058:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8602,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "27058:17:19",
                              "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": 8604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27058:26:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27042:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8606,
                        "nodeType": "ExpressionStatement",
                        "src": "27042:42:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8607,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8429,
                              "src": "27098:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8609,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sInternalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9406,
                            "src": "27098:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8613,
                                "name": "sInternalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8425,
                                "src": "27169:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8610,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8429,
                                  "src": "27124:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8611,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sInternalAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9406,
                                "src": "27124:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "27124:44:19",
                              "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": 8614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27124:61:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27098:87:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8616,
                        "nodeType": "ExpressionStatement",
                        "src": "27098:87:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8618,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8421,
                              "src": "27217:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8619,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8421,
                              "src": "27224:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8620,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8429,
                                "src": "27231:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8621,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "27231:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 8622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27246:4:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "argumentTypes": null,
                              "id": 8623,
                              "name": "rAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8423,
                              "src": "27252:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8624,
                              "name": "sInternalAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8425,
                              "src": "27261:15:19",
                              "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_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8617,
                            "name": "_updateLoanStats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9133,
                            "src": "27200:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 8625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27200:77:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8626,
                        "nodeType": "ExpressionStatement",
                        "src": "27200:77:19"
                      }
                    ]
                  },
                  "id": 8628,
                  "nodeType": "IfStatement",
                  "src": "25312:1976:19",
                  "trueBody": {
                    "id": 8596,
                    "nodeType": "Block",
                    "src": "25343:1601:19",
                    "statements": [
                      {
                        "assignments": [
                          8456
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8456,
                            "name": "rLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8596,
                            "src": "25357:13:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8455,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25357:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8458,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 8457,
                          "name": "rAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8423,
                          "src": "25373:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25357:23:19"
                      },
                      {
                        "assignments": [
                          8460
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8460,
                            "name": "sInternalLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8596,
                            "src": "25394:21:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8459,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25394:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8462,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 8461,
                          "name": "sInternalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8425,
                          "src": "25418:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25394:39:19"
                      },
                      {
                        "body": {
                          "id": 8594,
                          "nodeType": "Block",
                          "src": "25492:1442:19",
                          "statements": [
                            {
                              "assignments": [
                                8476
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8476,
                                  "name": "recipientAccount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "25510:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "storage",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 8475,
                                    "name": "Account",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 9407,
                                    "src": "25510:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8483,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8477,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "25545:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 8482,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8478,
                                      "name": "hat",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8435,
                                      "src": "25554:3:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                        "typeString": "struct RTokenStructs.Hat storage pointer"
                                      }
                                    },
                                    "id": 8479,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9388,
                                    "src": "25554:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 8481,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8480,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8448,
                                    "src": "25569:1:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "25554:17:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25545:27:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "25510:62:19"
                            },
                            {
                              "assignments": [
                                8485
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8485,
                                  "name": "isLastRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "25590:20:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 8484,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "25590:4:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8494,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8493,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8486,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8448,
                                  "src": "25613:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8491,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8487,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8435,
                                            "src": "25619:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8488,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "proportions",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9391,
                                          "src": "25619:15:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                            "typeString": "uint32[] storage ref"
                                          }
                                        },
                                        "id": 8489,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "25619:22:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8490,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "25644:1:19",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "25619:26:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 8492,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25618:28:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25613:33:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "25590:56:19"
                            },
                            {
                              "assignments": [
                                8496
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8496,
                                  "name": "lDebtRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "25727:22:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8495,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "25727:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8510,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8497,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8485,
                                  "src": "25752:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8501,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8435,
                                                "src": "25831:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8502,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "25831:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8504,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8503,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8448,
                                              "src": "25847:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "25831:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8499,
                                            "name": "rAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8423,
                                            "src": "25819:7:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8500,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "25819:11:19",
                                          "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": 8505,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25819:31:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8506,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "25818:33:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8507,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "25854:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "25818:51:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "25752:117:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8498,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8456,
                                  "src": "25790:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "25727:142:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8529,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8511,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8429,
                                      "src": "25943:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8517,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "lRecipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9402,
                                    "src": "25943:19:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8518,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8513,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8435,
                                        "src": "25963:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8514,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "25963:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8516,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8515,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8448,
                                      "src": "25978:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "25963:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "25943:38:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8527,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8496,
                                      "src": "26048:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8519,
                                          "name": "account",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8429,
                                          "src": "25984:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                            "typeString": "struct RTokenStructs.Account storage pointer"
                                          }
                                        },
                                        "id": 8520,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "lRecipients",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 9402,
                                        "src": "25984:19:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 8525,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8521,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8435,
                                            "src": "26004:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8522,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "recipients",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9388,
                                          "src": "26004:14:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                            "typeString": "address[] storage ref"
                                          }
                                        },
                                        "id": 8524,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8523,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8448,
                                          "src": "26019:1:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "26004:17:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "25984:38:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8526,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 10694,
                                    "src": "25984:63:19",
                                    "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": 8528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25984:79:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25943:120:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8530,
                              "nodeType": "ExpressionStatement",
                              "src": "25943:120:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8531,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8476,
                                    "src": "26081:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8533,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lDebt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9404,
                                  "src": "26081:22:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8537,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8496,
                                      "src": "26154:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8534,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8476,
                                        "src": "26106:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8535,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "lDebt",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9404,
                                      "src": "26106:22:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8536,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 10694,
                                    "src": "26106:47:19",
                                    "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": 8538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26106:63:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26081:88:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8540,
                              "nodeType": "ExpressionStatement",
                              "src": "26081:88:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8541,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8456,
                                  "src": "26234:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8543,
                                      "name": "rLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8456,
                                      "src": "26252:5:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8544,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8496,
                                      "src": "26259:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8542,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "26242:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8545,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26242:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26234:40:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8547,
                              "nodeType": "ExpressionStatement",
                              "src": "26234:40:19"
                            },
                            {
                              "assignments": [
                                8549
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8549,
                                  "name": "sInternalAmountRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "26360:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8548,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "26360:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8563,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8550,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8485,
                                  "src": "26395:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8561,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8554,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8435,
                                                "src": "26490:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8555,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "26490:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8557,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8556,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8448,
                                              "src": "26506:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "26490:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8552,
                                            "name": "sInternalAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8425,
                                            "src": "26470:15:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8553,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "26470:19:19",
                                          "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": 8558,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26470:39:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8559,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26469:41:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8560,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "26513:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "26469:59:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8562,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "26395:133:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8551,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8460,
                                  "src": "26433:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "26360:168:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8572,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8564,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8476,
                                    "src": "26546:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8566,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "sInternalAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9406,
                                  "src": "26546:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8570,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8549,
                                      "src": "26639:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8567,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8476,
                                        "src": "26581:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8568,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sInternalAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9406,
                                      "src": "26581:32:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 10694,
                                    "src": "26581:57:19",
                                    "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": 8571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26581:83:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26546:118:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8573,
                              "nodeType": "ExpressionStatement",
                              "src": "26546:118:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8579,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8574,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8460,
                                  "src": "26729:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8576,
                                      "name": "sInternalLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8460,
                                      "src": "26755:13:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8577,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8549,
                                      "src": "26770:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8575,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "26745:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8578,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26745:50:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26729:66:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8580,
                              "nodeType": "ExpressionStatement",
                              "src": "26729:66:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8582,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8421,
                                    "src": "26831:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8583,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8435,
                                        "src": "26838:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8584,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "26838:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8586,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8585,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8448,
                                      "src": "26853:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "26838:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8587,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8429,
                                      "src": "26857:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8588,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "hatID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9394,
                                    "src": "26857:13:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "74727565",
                                    "id": 8589,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26872:4:19",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8590,
                                    "name": "lDebtRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8496,
                                    "src": "26878:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8591,
                                    "name": "sInternalAmountRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8549,
                                    "src": "26894:24:19",
                                    "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_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8581,
                                  "name": "_updateLoanStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9133,
                                  "src": "26814:16:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                                  }
                                },
                                "id": 8592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26814:105:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8593,
                              "nodeType": "ExpressionStatement",
                              "src": "26814:105:19"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8467,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8448,
                            "src": "25459:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8468,
                                "name": "hat",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8435,
                                "src": "25463:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                }
                              },
                              "id": 8469,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "proportions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9391,
                              "src": "25463:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                "typeString": "uint32[] storage ref"
                              }
                            },
                            "id": 8470,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "25463:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25459:26:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8595,
                        "initializationExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8465,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8463,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8448,
                              "src": "25452:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25456:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "25452:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8466,
                          "nodeType": "ExpressionStatement",
                          "src": "25452:5:19"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "25487:3:19",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 8472,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8448,
                              "src": "25489:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8474,
                          "nodeType": "ExpressionStatement",
                          "src": "25487:3:19"
                        },
                        "nodeType": "ForStatement",
                        "src": "25447:1487:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Distribute the incoming tokens to the recipients as loans.\n     The tokens are immediately invested into the saving strategy and\n     add to the sAmount of the recipient account.\n     Recipient also inherits the owner's hat if it does already have one.\n@param owner Owner account address\n@param rAmount rToken amount being loaned to the recipients\n@param sInternalAmount Amount of saving assets (internal amount) being given to the recipients",
            "id": 8630,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8421,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8630,
                  "src": "25039:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8420,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25039:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8423,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8630,
                  "src": "25062:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25062:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8630,
                  "src": "25087:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25087:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25029:87:19"
            },
            "returnParameters": {
              "id": 8427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25126:0:19"
            },
            "scope": 9287,
            "src": "25005:2289:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8657,
              "nodeType": "Block",
              "src": "27846:216:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8640,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "27917:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          },
                          "id": 8641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accrueInterest",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6111,
                          "src": "27917:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_bool_$",
                            "typeString": "function () external returns (bool)"
                          }
                        },
                        "id": 8642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27917:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "616363727565496e746572657374206661696c6564",
                        "id": 8643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27939:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        },
                        "value": "accrueInterest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        }
                      ],
                      "id": 8639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "27909:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27909:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8645,
                  "nodeType": "ExpressionStatement",
                  "src": "27909:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8646,
                      "name": "sInternalEstimated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8637,
                      "src": "27973:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8648,
                          "name": "rAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8634,
                          "src": "28007:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8647,
                        "name": "rToSInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9205,
                        "src": "27994:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 8649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27994:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27973:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8651,
                  "nodeType": "ExpressionStatement",
                  "src": "27973:42:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8653,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8632,
                        "src": "28040:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8654,
                        "name": "rAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8634,
                        "src": "28047:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8652,
                      "name": "recollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8972,
                      "src": "28025:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 8655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28025:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8656,
                  "nodeType": "ExpressionStatement",
                  "src": "28025:30:19"
                }
              ]
            },
            "documentation": "@dev Recollect loans from the recipients for further distribution\n     without actually redeeming the saving assets\n@param owner Owner account address\n@param rAmount rToken amount neeeds to be recollected from the recipients\n               by giving back estimated amount of saving assets\n@return Estimated amount of saving assets (internal) needs to recollected",
            "id": 8658,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "estimateAndRecollectLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8632,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "27756:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27756:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8634,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "27771:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27771:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27755:32:19"
            },
            "returnParameters": {
              "id": 8638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8637,
                  "name": "sInternalEstimated",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "27814:26:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8636,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27814:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27813:28:19"
            },
            "scope": 9287,
            "src": "27721:341:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8695,
              "nodeType": "Block",
              "src": "28566:375:19",
              "statements": [
                {
                  "assignments": [
                    8666
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8666,
                      "name": "sOriginalBurned",
                      "nodeType": "VariableDeclaration",
                      "scope": 8695,
                      "src": "28576:23:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8665,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28576:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8671,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8669,
                        "name": "rAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8662,
                        "src": "28623:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8667,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "28602:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 8668,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemUnderlying",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6125,
                      "src": "28602:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) external returns (uint256)"
                      }
                    },
                    "id": 8670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28602:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28576:55:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8673,
                        "name": "sOriginalBurned",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8666,
                        "src": "28662:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8672,
                      "name": "sOriginalToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9239,
                      "src": "28641:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28641:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8675,
                  "nodeType": "ExpressionStatement",
                  "src": "28641:37:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8677,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8660,
                        "src": "28703:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8678,
                        "name": "rAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8662,
                        "src": "28710:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8676,
                      "name": "recollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8972,
                      "src": "28688:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 8679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28688:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8680,
                  "nodeType": "ExpressionStatement",
                  "src": "28688:30:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8681,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "28764:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8682,
                      "name": "sOriginalBurned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8666,
                      "src": "28791:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28764:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8693,
                    "nodeType": "Block",
                    "src": "28882:53:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8689,
                            "name": "savingAssetOrignalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9320,
                            "src": "28896:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "28923:1:19",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "28896:28:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8692,
                        "nodeType": "ExpressionStatement",
                        "src": "28896:28:19"
                      }
                    ]
                  },
                  "id": 8694,
                  "nodeType": "IfStatement",
                  "src": "28760:175:19",
                  "trueBody": {
                    "id": 8688,
                    "nodeType": "Block",
                    "src": "28808:68:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8684,
                            "name": "savingAssetOrignalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9320,
                            "src": "28822:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8685,
                            "name": "sOriginalBurned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8666,
                            "src": "28850:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28822:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8687,
                        "nodeType": "ExpressionStatement",
                        "src": "28822:43:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Recollect loans from the recipients for further distribution\n     by redeeming the saving assets in `rAmount`\n@param owner Owner account address\n@param rAmount rToken amount neeeds to be recollected from the recipients\n               by redeeming equivalent value of the saving assets\n@return Amount of saving assets redeemed for rAmount of tokens.",
            "id": 8696,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemAndRecollectLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8660,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8696,
                  "src": "28513:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "28513:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8662,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8696,
                  "src": "28528:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8661,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28528:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28512:32:19"
            },
            "returnParameters": {
              "id": 8664,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28566:0:19"
            },
            "scope": 9287,
            "src": "28480:461:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8971,
              "nodeType": "Block",
              "src": "29213:3239:19",
              "statements": [
                {
                  "assignments": [
                    8704
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8704,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29223:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8703,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "29223:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8708,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8705,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "29249:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8707,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8706,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8698,
                      "src": "29258:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29249:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29223:41:19"
                },
                {
                  "assignments": [
                    8710
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8710,
                      "name": "hat",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29274:15:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                        "typeString": "struct RTokenStructs.Hat"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8709,
                        "name": "Hat",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9392,
                        "src": "29274:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                          "typeString": "struct RTokenStructs.Hat"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8721,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8711,
                      "name": "hats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9331,
                      "src": "29292:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                        "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                      }
                    },
                    "id": 8720,
                    "indexExpression": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8712,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8704,
                            "src": "29297:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8713,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hatID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9394,
                          "src": "29297:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8714,
                          "name": "SELF_HAT_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6692,
                          "src": "29314:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "29297:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8717,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8704,
                          "src": "29356:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "29356:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "29297:72:19",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8716,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29340:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29292:78:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Hat_$9392_storage",
                      "typeString": "struct RTokenStructs.Hat storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29274:96:19"
                },
                {
                  "assignments": [
                    8723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8723,
                      "name": "debtToCollect",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29489:21:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8722,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29489:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8730,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8725,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8704,
                          "src": "29523:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8726,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "29523:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8727,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8704,
                          "src": "29540:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8728,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rInterest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9398,
                        "src": "29540:17:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8724,
                      "name": "gentleSub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9169,
                      "src": "29513:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29513:45:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29489:69:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8731,
                      "name": "debtToCollect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8723,
                      "src": "29628:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8732,
                      "name": "rAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8700,
                      "src": "29644:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29628:23:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8739,
                  "nodeType": "IfStatement",
                  "src": "29624:77:19",
                  "trueBody": {
                    "id": 8738,
                    "nodeType": "Block",
                    "src": "29653:48:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8734,
                            "name": "debtToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8723,
                            "src": "29667:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8735,
                            "name": "rAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8700,
                            "src": "29683:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29667:23:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8737,
                        "nodeType": "ExpressionStatement",
                        "src": "29667:23:19"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8741
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8741,
                      "name": "sInternalToCollect",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29710:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8740,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29710:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8745,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8743,
                        "name": "debtToCollect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8723,
                        "src": "29752:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8742,
                      "name": "rToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9205,
                      "src": "29739:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29739:27:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29710:56:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8746,
                          "name": "hat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8710,
                          "src": "29780:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                            "typeString": "struct RTokenStructs.Hat storage pointer"
                          }
                        },
                        "id": 8747,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipients",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9388,
                        "src": "29780:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8748,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29780:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29804:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "29780:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8942,
                    "nodeType": "Block",
                    "src": "31650:467:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8908,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "31784:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8910,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "lDebt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9404,
                            "src": "31784:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8912,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8704,
                                  "src": "31810:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8913,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lDebt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9404,
                                "src": "31810:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8914,
                                "name": "debtToCollect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8723,
                                "src": "31825:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8911,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "31800:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 8915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31800:39:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31784:55:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8917,
                        "nodeType": "ExpressionStatement",
                        "src": "31784:55:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8918,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "31885:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8920,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sInternalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9406,
                            "src": "31885:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8922,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8704,
                                  "src": "31921:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8923,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sInternalAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9406,
                                "src": "31921:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8924,
                                "name": "sInternalToCollect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8741,
                                "src": "31946:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8921,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "31911:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 8925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31911:54:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31885:80:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8927,
                        "nodeType": "ExpressionStatement",
                        "src": "31885:80:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8929,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "31996:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            ],
                            "id": 8928,
                            "name": "adjustRInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9286,
                            "src": "31980:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Account_$9407_storage_ptr_$returns$__$",
                              "typeString": "function (struct RTokenStructs.Account storage pointer)"
                            }
                          },
                          "id": 8930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31980:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8931,
                        "nodeType": "ExpressionStatement",
                        "src": "31980:24:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8933,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8698,
                              "src": "32036:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8934,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8698,
                              "src": "32043:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8935,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8704,
                                "src": "32050:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8936,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "32050:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 8937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32065:5:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "argumentTypes": null,
                              "id": 8938,
                              "name": "debtToCollect",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8723,
                              "src": "32072:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8939,
                              "name": "sInternalToCollect",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8741,
                              "src": "32087:18:19",
                              "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_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8932,
                            "name": "_updateLoanStats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9133,
                            "src": "32019:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 8940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32019:87:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8941,
                        "nodeType": "ExpressionStatement",
                        "src": "32019:87:19"
                      }
                    ]
                  },
                  "id": 8943,
                  "nodeType": "IfStatement",
                  "src": "29776:2341:19",
                  "trueBody": {
                    "id": 8907,
                    "nodeType": "Block",
                    "src": "29807:1837:19",
                    "statements": [
                      {
                        "assignments": [
                          8752
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8752,
                            "name": "rLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8907,
                            "src": "29821:13:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8751,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29821:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8754,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29837:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29821:17:19"
                      },
                      {
                        "assignments": [
                          8756
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8756,
                            "name": "sInternalLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8907,
                            "src": "29852:21:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8755,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29852:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8758,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29876:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29852:25:19"
                      },
                      {
                        "assignments": [
                          8760
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8760,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 8907,
                            "src": "29891:9:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8759,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29891:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8761,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29891:9:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8762,
                            "name": "rLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8752,
                            "src": "29965:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8763,
                            "name": "debtToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8723,
                            "src": "29973:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29965:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8765,
                        "nodeType": "ExpressionStatement",
                        "src": "29965:21:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8766,
                            "name": "sInternalLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8756,
                            "src": "30000:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8767,
                            "name": "sInternalToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8741,
                            "src": "30016:18:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30000:34:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8769,
                        "nodeType": "ExpressionStatement",
                        "src": "30000:34:19"
                      },
                      {
                        "body": {
                          "id": 8905,
                          "nodeType": "Block",
                          "src": "30093:1541:19",
                          "statements": [
                            {
                              "assignments": [
                                8783
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8783,
                                  "name": "recipientAccount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30111:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "storage",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 8782,
                                    "name": "Account",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 9407,
                                    "src": "30111:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8790,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8784,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "30146:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 8789,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8785,
                                      "name": "hat",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8710,
                                      "src": "30155:3:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                        "typeString": "struct RTokenStructs.Hat storage pointer"
                                      }
                                    },
                                    "id": 8786,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9388,
                                    "src": "30155:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 8788,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8787,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8760,
                                    "src": "30170:1:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30155:17:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "30146:27:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30111:62:19"
                            },
                            {
                              "assignments": [
                                8792
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8792,
                                  "name": "isLastRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30191:20:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 8791,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30191:4:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8801,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8800,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8793,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8760,
                                  "src": "30214:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8798,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8794,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8710,
                                            "src": "30220:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8795,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "proportions",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9391,
                                          "src": "30220:15:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                            "typeString": "uint32[] storage ref"
                                          }
                                        },
                                        "id": 8796,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "30220:22:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8797,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "30245:1:19",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "30220:26:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 8799,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "30219:28:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30214:33:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30191:56:19"
                            },
                            {
                              "assignments": [
                                8803
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8803,
                                  "name": "lDebtRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30335:22:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8802,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30335:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8817,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8804,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8792,
                                  "src": "30360:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8815,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8808,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8710,
                                                "src": "30445:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8809,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "30445:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8811,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8810,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8760,
                                              "src": "30461:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "30445:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8806,
                                            "name": "debtToCollect",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8723,
                                            "src": "30427:13:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8807,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "30427:17:19",
                                          "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": 8812,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "30427:37:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8813,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "30426:39:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8814,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "30468:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "30426:57:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8816,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "30360:123:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8805,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8752,
                                  "src": "30398:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30335:148:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8826,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8818,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8783,
                                    "src": "30501:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8820,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lDebt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9404,
                                  "src": "30501:22:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8822,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8783,
                                        "src": "30557:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8823,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "lDebt",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9404,
                                      "src": "30557:22:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8824,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8803,
                                      "src": "30601:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8821,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "30526:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8825,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "30526:90:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30501:115:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8827,
                              "nodeType": "ExpressionStatement",
                              "src": "30501:115:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8846,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8828,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8704,
                                      "src": "30634:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8834,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "lRecipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9402,
                                    "src": "30634:19:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8835,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8830,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8710,
                                        "src": "30654:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8831,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "30654:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8833,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8832,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8760,
                                      "src": "30669:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "30654:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "30634:38:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8837,
                                          "name": "account",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8704,
                                          "src": "30706:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                            "typeString": "struct RTokenStructs.Account storage pointer"
                                          }
                                        },
                                        "id": 8838,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "lRecipients",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 9402,
                                        "src": "30706:19:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 8843,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8839,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8710,
                                            "src": "30726:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8840,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "recipients",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9388,
                                          "src": "30726:14:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                            "typeString": "address[] storage ref"
                                          }
                                        },
                                        "id": 8842,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8841,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8760,
                                          "src": "30741:1:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "30726:17:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "30706:38:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8844,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8803,
                                      "src": "30766:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8836,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "30675:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8845,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "30675:106:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30634:147:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8847,
                              "nodeType": "ExpressionStatement",
                              "src": "30634:147:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8848,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8752,
                                  "src": "30845:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8850,
                                      "name": "rLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8752,
                                      "src": "30863:5:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8851,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8803,
                                      "src": "30870:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8849,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "30853:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8852,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "30853:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30845:40:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8854,
                              "nodeType": "ExpressionStatement",
                              "src": "30845:40:19"
                            },
                            {
                              "assignments": [
                                8856
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8856,
                                  "name": "sInternalAmountRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30976:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8855,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30976:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8870,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8857,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8792,
                                  "src": "31011:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8861,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8710,
                                                "src": "31109:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8862,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "31109:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8864,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8863,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8760,
                                              "src": "31125:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "31109:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8859,
                                            "name": "sInternalToCollect",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8741,
                                            "src": "31086:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8860,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "31086:22:19",
                                          "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": 8865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "31086:42:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8866,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31085:44:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8867,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "31132:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "31085:62:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8869,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "31011:136:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8858,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8756,
                                  "src": "31049:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30976:171:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8871,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8783,
                                    "src": "31165:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8873,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "sInternalAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9406,
                                  "src": "31165:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8875,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8783,
                                        "src": "31231:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8876,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sInternalAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9406,
                                      "src": "31231:32:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8877,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8856,
                                      "src": "31285:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8874,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "31200:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8878,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "31200:110:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "31165:145:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8880,
                              "nodeType": "ExpressionStatement",
                              "src": "31165:145:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8886,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8881,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8756,
                                  "src": "31376:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8883,
                                      "name": "sInternalLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8756,
                                      "src": "31402:13:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8884,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8856,
                                      "src": "31417:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8882,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "31392:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8885,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "31392:50:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "31376:66:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8887,
                              "nodeType": "ExpressionStatement",
                              "src": "31376:66:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8889,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8783,
                                    "src": "31477:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  ],
                                  "id": 8888,
                                  "name": "adjustRInterest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9286,
                                  "src": "31461:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Account_$9407_storage_ptr_$returns$__$",
                                    "typeString": "function (struct RTokenStructs.Account storage pointer)"
                                  }
                                },
                                "id": 8890,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31461:33:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8891,
                              "nodeType": "ExpressionStatement",
                              "src": "31461:33:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8893,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8698,
                                    "src": "31530:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8894,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8710,
                                        "src": "31537:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8895,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "31537:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8897,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8896,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8760,
                                      "src": "31552:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "31537:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8898,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8704,
                                      "src": "31556:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8899,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "hatID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9394,
                                    "src": "31556:13:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "66616c7365",
                                    "id": 8900,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31571:5:19",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8901,
                                    "name": "lDebtRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8803,
                                    "src": "31578:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8902,
                                    "name": "sInternalAmountRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8856,
                                    "src": "31594:24:19",
                                    "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_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8892,
                                  "name": "_updateLoanStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9133,
                                  "src": "31513:16:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                                  }
                                },
                                "id": 8903,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31513:106:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8904,
                              "nodeType": "ExpressionStatement",
                              "src": "31513:106:19"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8774,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8760,
                            "src": "30060:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8775,
                                "name": "hat",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8710,
                                "src": "30064:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                }
                              },
                              "id": 8776,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "proportions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9391,
                              "src": "30064:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                "typeString": "uint32[] storage ref"
                              }
                            },
                            "id": 8777,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "30064:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30060:26:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8906,
                        "initializationExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8770,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8760,
                              "src": "30053:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "30057:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "30053:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8773,
                          "nodeType": "ExpressionStatement",
                          "src": "30053:5:19"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8780,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "30088:3:19",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 8779,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8760,
                              "src": "30090:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8781,
                          "nodeType": "ExpressionStatement",
                          "src": "30088:3:19"
                        },
                        "nodeType": "ForStatement",
                        "src": "30048:1586:19"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8944,
                      "name": "rAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8700,
                      "src": "32206:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8945,
                      "name": "debtToCollect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8723,
                      "src": "32216:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32206:23:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8970,
                  "nodeType": "IfStatement",
                  "src": "32202:244:19",
                  "trueBody": {
                    "id": 8969,
                    "nodeType": "Block",
                    "src": "32231:215:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8947,
                            "name": "sInternalToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8741,
                            "src": "32245:18:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8951,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8949,
                                  "name": "rAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8700,
                                  "src": "32279:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8950,
                                  "name": "debtToCollect",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8723,
                                  "src": "32289:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "32279:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8948,
                              "name": "rToSInternal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9205,
                              "src": "32266:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 8952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32266:37:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32245:58:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8954,
                        "nodeType": "ExpressionStatement",
                        "src": "32245:58:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8955,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "32317:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sInternalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9406,
                            "src": "32317:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8959,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8704,
                                  "src": "32353:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8960,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sInternalAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9406,
                                "src": "32353:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8961,
                                "name": "sInternalToCollect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8741,
                                "src": "32378:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8958,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "32343:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 8962,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32343:54:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32317:80:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8964,
                        "nodeType": "ExpressionStatement",
                        "src": "32317:80:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8966,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "32427:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            ],
                            "id": 8965,
                            "name": "adjustRInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9286,
                            "src": "32411:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Account_$9407_storage_ptr_$returns$__$",
                              "typeString": "function (struct RTokenStructs.Account storage pointer)"
                            }
                          },
                          "id": 8967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32411:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8968,
                        "nodeType": "ExpressionStatement",
                        "src": "32411:24:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Recollect loan from the recipients\n@param owner   Owner address\n@param rAmount rToken amount of debt to be collected from the recipients",
            "id": 8972,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recollectLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8698,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8972,
                  "src": "29159:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29159:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8700,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8972,
                  "src": "29182:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8699,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29182:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29149:54:19"
            },
            "returnParameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29213:0:19"
            },
            "scope": 9287,
            "src": "29126:3326:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9057,
              "nodeType": "Block",
              "src": "32607:728:19",
              "statements": [
                {
                  "assignments": [
                    8978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8978,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 9057,
                      "src": "32617:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8977,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "32617:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8982,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8979,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "32643:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8981,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8980,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8974,
                      "src": "32652:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32643:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32617:41:19"
                },
                {
                  "assignments": [
                    8984
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8984,
                      "name": "stats",
                      "nodeType": "VariableDeclaration",
                      "scope": 9057,
                      "src": "32668:32:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                        "typeString": "struct RTokenStructs.AccountStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8983,
                        "name": "AccountStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9371,
                        "src": "32668:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8988,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8985,
                      "name": "accountStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9339,
                      "src": "32703:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AccountStatsStored_$9371_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.AccountStatsStored storage ref)"
                      }
                    },
                    "id": 8987,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8986,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8974,
                      "src": "32716:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32703:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage",
                      "typeString": "struct RTokenStructs.AccountStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32668:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8990,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "32741:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          },
                          "id": 8991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accrueInterest",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6111,
                          "src": "32741:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_bool_$",
                            "typeString": "function () external returns (bool)"
                          }
                        },
                        "id": 8992,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32741:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "616363727565496e746572657374206661696c6564",
                        "id": 8993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32763:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        },
                        "value": "accrueInterest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        }
                      ],
                      "id": 8989,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "32733:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32733:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8995,
                  "nodeType": "ExpressionStatement",
                  "src": "32733:54:19"
                },
                {
                  "assignments": [
                    8997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8997,
                      "name": "interestAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 9057,
                      "src": "32797:22:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32797:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9001,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8999,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8978,
                        "src": "32843:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      ],
                      "id": 8998,
                      "name": "getInterestPayableOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8419,
                      "src": "32822:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Account_$9407_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct RTokenStructs.Account storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 9000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32822:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32797:54:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9002,
                      "name": "interestAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8997,
                      "src": "32866:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32883:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32866:18:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9056,
                  "nodeType": "IfStatement",
                  "src": "32862:467:19",
                  "trueBody": {
                    "id": 9055,
                    "nodeType": "Block",
                    "src": "32886:443:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9005,
                              "name": "stats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8984,
                              "src": "32900:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                                "typeString": "struct RTokenStructs.AccountStatsStored storage pointer"
                              }
                            },
                            "id": 9007,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "cumulativeInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9370,
                            "src": "32900:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9011,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "32990:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9008,
                                  "name": "stats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8984,
                                  "src": "32927:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                                    "typeString": "struct RTokenStructs.AccountStatsStored storage pointer"
                                  }
                                },
                                "id": 9009,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "cumulativeInterest",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9370,
                                "src": "32927:41:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "32927:62:19",
                              "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": 9012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32927:78:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32900:105:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9014,
                        "nodeType": "ExpressionStatement",
                        "src": "32900:105:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9015,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8978,
                              "src": "33019:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 9017,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9398,
                            "src": "33019:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9021,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "33061:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9018,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8978,
                                  "src": "33039:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 9019,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rInterest",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9398,
                                "src": "33039:17:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33039:21:19",
                              "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": 9022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33039:37:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33019:57:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9024,
                        "nodeType": "ExpressionStatement",
                        "src": "33019:57:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9033,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9025,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8978,
                              "src": "33090:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 9027,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9396,
                            "src": "33090:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9031,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "33128:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9028,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8978,
                                  "src": "33108:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 9029,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9396,
                                "src": "33108:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9030,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33108:19:19",
                              "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": 9032,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33108:35:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33090:53:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9034,
                        "nodeType": "ExpressionStatement",
                        "src": "33090:53:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9040,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 9035,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9314,
                            "src": "33157:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9038,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "33187:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9036,
                                "name": "totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9314,
                                "src": "33171:11:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9037,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33171:15:19",
                              "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": 9039,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33171:31:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33157:45:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9041,
                        "nodeType": "ExpressionStatement",
                        "src": "33157:45:19"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9043,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8974,
                              "src": "33234:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9044,
                              "name": "interestAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8997,
                              "src": "33241:14:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9042,
                            "name": "InterestPaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6377,
                            "src": "33221:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33221:35:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9046,
                        "nodeType": "EmitStatement",
                        "src": "33216:40:19"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 9049,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "33292:1:19",
                                  "subdenomination": null,
                                  "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": 9048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "33284:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 9050,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33284:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9051,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8974,
                              "src": "33296:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9052,
                              "name": "interestAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8997,
                              "src": "33303:14:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9047,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11461,
                            "src": "33275:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33275:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9054,
                        "nodeType": "EmitStatement",
                        "src": "33270:48:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev pay interest to the owner\n@param owner Account owner address",
            "id": 9058,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payInterestInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8974,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 9058,
                  "src": "32583:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32583:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32582:15:19"
            },
            "returnParameters": {
              "id": 8976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32607:0:19"
            },
            "scope": 9287,
            "src": "32554:781:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9132,
              "nodeType": "Block",
              "src": "33545:678:19",
              "statements": [
                {
                  "assignments": [
                    9074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9074,
                      "name": "hatStats",
                      "nodeType": "VariableDeclaration",
                      "scope": 9132,
                      "src": "33555:31:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9073,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "33555:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9078,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9075,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "33589:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 9077,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9076,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9064,
                      "src": "33598:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "33589:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33555:49:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9080,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9060,
                        "src": "33637:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9081,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9062,
                        "src": "33644:9:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9082,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9064,
                        "src": "33655:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9083,
                        "name": "isDistribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9066,
                        "src": "33674:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9084,
                        "name": "redeemableAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9068,
                        "src": "33702:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9085,
                        "name": "sInternalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9070,
                        "src": "33732:15:19",
                        "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_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9079,
                      "name": "LoansTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6371,
                      "src": "33620:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                      }
                    },
                    "id": 9086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33620:128:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9087,
                  "nodeType": "EmitStatement",
                  "src": "33615:133:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 9088,
                    "name": "isDistribution",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9066,
                    "src": "33763:14:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 9130,
                    "nodeType": "Block",
                    "src": "33986:231:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9110,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "34000:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9112,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalLoans",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9382,
                            "src": "34000:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9114,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "34032:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9115,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalLoans",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9382,
                                "src": "34032:19:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 9116,
                                "name": "redeemableAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9068,
                                "src": "34053:16:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 9113,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "34022:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 9117,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34022:48:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34000:70:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9119,
                        "nodeType": "ExpressionStatement",
                        "src": "34000:70:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9120,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "34084:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9122,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalInternalSavings",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9384,
                            "src": "34084:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9124,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "34143:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9125,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalInternalSavings",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9384,
                                "src": "34143:29:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 9126,
                                "name": "sInternalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9070,
                                "src": "34190:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 9123,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "34116:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 9127,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34116:90:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34084:122:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9129,
                        "nodeType": "ExpressionStatement",
                        "src": "34084:122:19"
                      }
                    ]
                  },
                  "id": 9131,
                  "nodeType": "IfStatement",
                  "src": "33759:458:19",
                  "trueBody": {
                    "id": 9109,
                    "nodeType": "Block",
                    "src": "33779:201:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9089,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "33793:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9091,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalLoans",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9382,
                            "src": "33793:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9095,
                                "name": "redeemableAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9068,
                                "src": "33839:16:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9092,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "33815:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9093,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalLoans",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9382,
                                "src": "33815:19:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33815:23:19",
                              "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": 9096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33815:41:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33793:63:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9098,
                        "nodeType": "ExpressionStatement",
                        "src": "33793:63:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9099,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "33870:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9101,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalInternalSavings",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9384,
                            "src": "33870:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9105,
                                "name": "sInternalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9070,
                                "src": "33953:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9102,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "33902:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9103,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalInternalSavings",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9384,
                                "src": "33902:29:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33902:50:19",
                              "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": 9106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33902:67:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33870:99:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9108,
                        "nodeType": "ExpressionStatement",
                        "src": "33870:99:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 9133,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateLoanStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9060,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33376:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33376:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9062,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33399:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33399:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9064,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33426:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33426:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9066,
                  "name": "isDistribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33449:19:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9065,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "33449:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9068,
                  "name": "redeemableAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33478:24:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33478:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9070,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33512:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33512:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33366:170:19"
            },
            "returnParameters": {
              "id": 9072,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "33545:0:19"
            },
            "scope": 9287,
            "src": "33341:882:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9148,
              "nodeType": "Block",
              "src": "34292:92:19",
              "statements": [
                {
                  "assignments": [
                    9141
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9141,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 9148,
                      "src": "34300:9:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9140,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "34300:4:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9142,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34300:9:19"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 9141,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "34328:4:19",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 9135,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "34348:4:19",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9143,
                  "nodeType": "InlineAssembly",
                  "operations": "{ size := extcodesize(addr) }",
                  "src": "34317:38:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9144,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9141,
                      "src": "34369:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34376:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "34369:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9139,
                  "id": 9147,
                  "nodeType": "Return",
                  "src": "34362:15:19"
                }
              ]
            },
            "documentation": null,
            "id": 9149,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9135,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 9149,
                  "src": "34250:12:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34250:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34249:14:19"
            },
            "returnParameters": {
              "id": 9139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9138,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9149,
                  "src": "34286:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9137,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "34286:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34285:6:19"
            },
            "scope": 9287,
            "src": "34229:155:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9168,
              "nodeType": "Block",
              "src": "34688:63:19",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9158,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9151,
                      "src": "34702:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 9159,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9153,
                      "src": "34706:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "34702:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9163,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9151,
                        "src": "34739:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9164,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9153,
                        "src": "34743:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "34739:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 9157,
                    "id": 9166,
                    "nodeType": "Return",
                    "src": "34732:12:19"
                  },
                  "id": 9167,
                  "nodeType": "IfStatement",
                  "src": "34698:46:19",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34716:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 9157,
                    "id": 9162,
                    "nodeType": "Return",
                    "src": "34709:8:19"
                  }
                }
              ]
            },
            "documentation": "@dev Gently subtract b from a without revert\n     * Due to the use of integer arithmatic, imprecision may cause a tiny\namount to be off when substracting the otherwise precise proportions.",
            "id": 9169,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "gentleSub",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9151,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 9169,
                  "src": "34635:9:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34635:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9153,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 9169,
                  "src": "34646:9:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34646:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34634:22:19"
            },
            "returnParameters": {
              "id": 9157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9156,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9169,
                  "src": "34679:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34679:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34678:9:19"
            },
            "scope": 9287,
            "src": "34616:135:19",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9186,
              "nodeType": "Block",
              "src": "34925:503:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9183,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "35395:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9178,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "35352:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              },
                              "id": 9179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exchangeRateStored",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6106,
                              "src": "35352:22:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 9180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35352:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9176,
                            "name": "sInternalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9171,
                            "src": "35319:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "35319:32:19",
                          "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": 9181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35319:58:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "35319:75:19",
                      "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": 9184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35319:102:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9175,
                  "id": 9185,
                  "nodeType": "Return",
                  "src": "35312:109:19"
                }
              ]
            },
            "documentation": "@dev convert internal savings amount to redeemable amount",
            "id": 9187,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sInternalToR",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9171,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9187,
                  "src": "34845:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34845:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34844:25:19"
            },
            "returnParameters": {
              "id": 9175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9174,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9187,
                  "src": "34908:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9173,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34908:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34907:17:19"
            },
            "scope": 9287,
            "src": "34823:605:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9204,
              "nodeType": "Block",
              "src": "35602:118:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9199,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "35688:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          },
                          "id": 9200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exchangeRateStored",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6106,
                          "src": "35688:22:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 9201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35688:24:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9196,
                            "name": "savingAssetConversionRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9322,
                            "src": "35644:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9194,
                            "name": "rAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9189,
                            "src": "35619:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "35619:24:19",
                          "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": 9197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35619:51:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "35619:68:19",
                      "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": 9202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35619:94:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9193,
                  "id": 9203,
                  "nodeType": "Return",
                  "src": "35612:101:19"
                }
              ]
            },
            "documentation": "@dev convert redeemable amount to internal savings amount",
            "id": 9205,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rToSInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9189,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9205,
                  "src": "35522:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35522:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35521:17:19"
            },
            "returnParameters": {
              "id": 9193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9192,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9205,
                  "src": "35577:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35577:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35576:25:19"
            },
            "scope": 9287,
            "src": "35500:220:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9222,
              "nodeType": "Block",
              "src": "35899:140:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9219,
                        "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6678,
                        "src": "35992:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9214,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "35949:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              },
                              "id": 9215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exchangeRateStored",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6106,
                              "src": "35949:22:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 9216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35949:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9212,
                            "name": "sOriginalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9207,
                            "src": "35916:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "35916:32:19",
                          "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": 9217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35916:58:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "35916:75:19",
                      "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": 9220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35916:116:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9211,
                  "id": 9221,
                  "nodeType": "Return",
                  "src": "35909:123:19"
                }
              ]
            },
            "documentation": "@dev convert original savings amount to redeemable amount",
            "id": 9223,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sOriginalToR",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9207,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9223,
                  "src": "35814:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9206,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "35814:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35813:22:19"
            },
            "returnParameters": {
              "id": 9211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9210,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9223,
                  "src": "35874:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35874:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35873:25:19"
            },
            "scope": 9287,
            "src": "35792:247:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9238,
              "nodeType": "Block",
              "src": "36236:196:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9235,
                        "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6678,
                        "src": "36385:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9232,
                            "name": "savingAssetConversionRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9322,
                            "src": "36341:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9230,
                            "name": "sOriginalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9225,
                            "src": "36308:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "36308:32:19",
                          "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": 9233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "36308:59:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "36308:76:19",
                      "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": 9236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36308:117:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9229,
                  "id": 9237,
                  "nodeType": "Return",
                  "src": "36301:124:19"
                }
              ]
            },
            "documentation": null,
            "id": 9239,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sOriginalToSInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9225,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9239,
                  "src": "36151:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9224,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "36151:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36150:22:19"
            },
            "returnParameters": {
              "id": 9229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9228,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9239,
                  "src": "36211:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36211:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36210:25:19"
            },
            "scope": 9287,
            "src": "36121:311:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9254,
              "nodeType": "Block",
              "src": "36629:196:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9251,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "36792:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9248,
                            "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6678,
                            "src": "36734:39:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9246,
                            "name": "sInternalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9241,
                            "src": "36701:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "36701:32:19",
                          "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": 9249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "36701:73:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "36701:90:19",
                      "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": 9252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36701:117:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9245,
                  "id": 9253,
                  "nodeType": "Return",
                  "src": "36694:124:19"
                }
              ]
            },
            "documentation": null,
            "id": 9255,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sInternalToSOriginal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9241,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9255,
                  "src": "36544:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9240,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "36544:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36543:22:19"
            },
            "returnParameters": {
              "id": 9245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9244,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9255,
                  "src": "36604:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36604:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36603:25:19"
            },
            "scope": 9287,
            "src": "36514:311:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9285,
              "nodeType": "Block",
              "src": "36998:195:19",
              "statements": [
                {
                  "assignments": [
                    9261
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9261,
                      "name": "rGross",
                      "nodeType": "VariableDeclaration",
                      "scope": 9285,
                      "src": "37008:14:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9260,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "37008:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9266,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9263,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9257,
                          "src": "37038:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 9264,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sInternalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9406,
                        "src": "37038:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9262,
                      "name": "sInternalToR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9187,
                      "src": "37025:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 9265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37025:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37008:54:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9267,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9257,
                        "src": "37076:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 9268,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9398,
                      "src": "37076:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9269,
                        "name": "rGross",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9261,
                        "src": "37096:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9270,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9257,
                          "src": "37105:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 9271,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "lDebt",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9404,
                        "src": "37105:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "37096:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37076:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9284,
                  "nodeType": "IfStatement",
                  "src": "37072:115:19",
                  "trueBody": {
                    "id": 9283,
                    "nodeType": "Block",
                    "src": "37120:67:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9274,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9257,
                              "src": "37134:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 9276,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9398,
                            "src": "37134:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 9277,
                              "name": "rGross",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9261,
                              "src": "37154:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 9278,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9257,
                                "src": "37163:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 9279,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lDebt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9404,
                              "src": "37163:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "37154:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "37134:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9282,
                        "nodeType": "ExpressionStatement",
                        "src": "37134:42:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 9286,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "adjustRInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9257,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 9286,
                  "src": "36965:23:19",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                    "typeString": "struct RTokenStructs.Account"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9256,
                    "name": "Account",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9407,
                    "src": "36965:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                      "typeString": "struct RTokenStructs.Account"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36964:25:19"
            },
            "returnParameters": {
              "id": 9259,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36998:0:19"
            },
            "scope": 9287,
            "src": "36940:253:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 9288,
        "src": "879:36316:19"
      }
    ],
    "src": "202:36994:19"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RToken.sol",
    "exportedSymbols": {
      "RToken": [
        9287
      ]
    },
    "id": 9288,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6636,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".10",
          "<",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "202:32:19"
      },
      {
        "id": 6637,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "235:33:19"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Proxiable.sol",
        "file": "./Proxiable.sol",
        "id": 6639,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6606,
        "src": "270:42:19",
        "symbolAliases": [
          {
            "foreign": 6638,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/Ownable.sol",
        "file": "./Ownable.sol",
        "id": 6641,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6575,
        "src": "313:38:19",
        "symbolAliases": [
          {
            "foreign": 6640,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/LibraryLock.sol",
        "file": "./LibraryLock.sol",
        "id": 6643,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6462,
        "src": "352:46:19",
        "symbolAliases": [
          {
            "foreign": 6642,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 6645,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 10855,
        "src": "399:67:19",
        "symbolAliases": [
          {
            "foreign": 6644,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 6647,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 9435,
        "src": "467:54:19",
        "symbolAliases": [
          {
            "foreign": 6646,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStructs.sol",
        "file": "./RTokenStructs.sol",
        "id": 6649,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 9409,
        "src": "522:50:19",
        "symbolAliases": [
          {
            "foreign": 6648,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/RTokenStorage.sol",
        "file": "./RTokenStorage.sol",
        "id": 6651,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 9345,
        "src": "573:50:19",
        "symbolAliases": [
          {
            "foreign": 6650,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRToken.sol",
        "file": "./IRToken.sol",
        "id": 6654,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6391,
        "src": "624:46:19",
        "symbolAliases": [
          {
            "foreign": 6652,
            "local": null
          },
          {
            "foreign": 6653,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IRTokenAdmin.sol",
        "file": "./IRTokenAdmin.sol",
        "id": 6656,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6436,
        "src": "671:48:19",
        "symbolAliases": [
          {
            "foreign": 6655,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/contracts/IAllocationStrategy.sol",
        "file": "./IAllocationStrategy.sol",
        "id": 6658,
        "nodeType": "ImportDirective",
        "scope": 9288,
        "sourceUnit": 6134,
        "src": "720:62:19",
        "symbolAliases": [
          {
            "foreign": 6657,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6659,
              "name": "IRToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6390,
              "src": "902:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRToken_$6390",
                "typeString": "contract IRToken"
              }
            },
            "id": 6660,
            "nodeType": "InheritanceSpecifier",
            "src": "902:7:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6661,
              "name": "IRTokenAdmin",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6435,
              "src": "915:12:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IRTokenAdmin_$6435",
                "typeString": "contract IRTokenAdmin"
              }
            },
            "id": 6662,
            "nodeType": "InheritanceSpecifier",
            "src": "915:12:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6663,
              "name": "RTokenStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9344,
              "src": "933:13:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RTokenStorage_$9344",
                "typeString": "contract RTokenStorage"
              }
            },
            "id": 6664,
            "nodeType": "InheritanceSpecifier",
            "src": "933:13:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6665,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6574,
              "src": "952:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$6574",
                "typeString": "contract Ownable"
              }
            },
            "id": 6666,
            "nodeType": "InheritanceSpecifier",
            "src": "952:7:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6667,
              "name": "Proxiable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6605,
              "src": "965:9:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxiable_$6605",
                "typeString": "contract Proxiable"
              }
            },
            "id": 6668,
            "nodeType": "InheritanceSpecifier",
            "src": "965:9:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6669,
              "name": "LibraryLock",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6461,
              "src": "980:11:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LibraryLock_$6461",
                "typeString": "contract LibraryLock"
              }
            },
            "id": 6670,
            "nodeType": "InheritanceSpecifier",
            "src": "980:11:19"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6671,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9434,
              "src": "997:15:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$9434",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 6672,
            "nodeType": "InheritanceSpecifier",
            "src": "997:15:19"
          }
        ],
        "contractDependencies": [
          6390,
          6435,
          6461,
          6574,
          6605,
          9344,
          9408,
          9434,
          11470
        ],
        "contractKind": "contract",
        "documentation": "@notice RToken an ERC20 token that is 1:1 redeemable to its underlying ERC20 token.",
        "fullyImplemented": true,
        "id": 9287,
        "linearizedBaseContracts": [
          9287,
          9434,
          6461,
          6605,
          6574,
          9344,
          6435,
          6390,
          11470,
          9408
        ],
        "name": "RToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6675,
            "libraryName": {
              "contractScope": null,
              "id": 6673,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10854,
              "src": "1025:8:19",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$10854",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1019:27:19",
            "typeName": {
              "id": 6674,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1038:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 6678,
            "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1053:70:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6676,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1053:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 6677,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1119:4:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6681,
            "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1129:67:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6679,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1129:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 6680,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1192:4:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6689,
            "name": "MAX_UINT256",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1202:57:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6682,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1202:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "id": 6686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "1255:2:19",
                      "subExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 6685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1256:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_minus_1_by_1",
                        "typeString": "int_const -1"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_rational_minus_1_by_1",
                        "typeString": "int_const -1"
                      }
                    ],
                    "id": 6684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1248:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_int256_$",
                      "typeString": "type(int256)"
                    },
                    "typeName": "int256"
                  },
                  "id": 6687,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1248:10:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  }
                ],
                "id": 6683,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1240:7:19",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint256_$",
                  "typeString": "type(uint256)"
                },
                "typeName": "uint256"
              },
              "id": 6688,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1240:19:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6692,
            "name": "SELF_HAT_ID",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1265:49:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6690,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1265:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "id": 6691,
              "name": "MAX_UINT256",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 6689,
              "src": "1303:11:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6695,
            "name": "PROPORTION_BASE",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1320:51:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 6693,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1320:6:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30784646464646464646",
              "id": 6694,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1361:10:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_4294967295_by_1",
                "typeString": "int_const 4294967295"
              },
              "value": "0xFFFFFFFF"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 6698,
            "name": "MAX_NUM_HAT_RECIPIENTS",
            "nodeType": "VariableDeclaration",
            "scope": 9287,
            "src": "1377:51:19",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6696,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1377:7:19",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3530",
              "id": 6697,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1426:2:19",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50_by_1",
                "typeString": "int_const 50"
              },
              "value": "50"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 6788,
              "nodeType": "Block",
              "src": "1675:681:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "1693:12:19",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 6710,
                          "name": "initialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9304,
                          "src": "1694:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546865206c6962726172792068617320616c7265616479206265656e20696e697469616c697a65642e",
                        "id": 6712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1707:43:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4d5150b31be418954b338a6a4073a64941098cf086ed005585a5da1122e907cf",
                          "typeString": "literal_string \"The library has already been initialized.\""
                        },
                        "value": "The library has already been initialized."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4d5150b31be418954b338a6a4073a64941098cf086ed005585a5da1122e907cf",
                          "typeString": "literal_string \"The library has already been initialized.\""
                        }
                      ],
                      "id": 6709,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "1685:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1685:66:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6714,
                  "nodeType": "ExpressionStatement",
                  "src": "1685:66:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6715,
                        "name": "LibraryLock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6461,
                        "src": "1761:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LibraryLock_$6461_$",
                          "typeString": "type(contract LibraryLock)"
                        }
                      },
                      "id": 6717,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6460,
                      "src": "1761:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6718,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1761:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6719,
                  "nodeType": "ExpressionStatement",
                  "src": "1761:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6720,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9302,
                      "src": "1795:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6721,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "1804:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 6722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1804:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1795:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6724,
                  "nodeType": "ExpressionStatement",
                  "src": "1795:19:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6725,
                      "name": "_guardCounter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9306,
                      "src": "1824:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 6726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1840:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "1824:17:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6728,
                  "nodeType": "ExpressionStatement",
                  "src": "1824:17:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6729,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9308,
                      "src": "1851:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6730,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6702,
                      "src": "1858:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1851:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6732,
                  "nodeType": "ExpressionStatement",
                  "src": "1851:12:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6733,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9310,
                      "src": "1873:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6734,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6704,
                      "src": "1882:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1873:16:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6736,
                  "nodeType": "ExpressionStatement",
                  "src": "1873:16:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6737,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9312,
                      "src": "1899:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6738,
                      "name": "decimals_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6706,
                      "src": "1910:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1899:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6740,
                  "nodeType": "ExpressionStatement",
                  "src": "1899:20:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6741,
                      "name": "savingAssetConversionRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9322,
                      "src": "1929:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6742,
                      "name": "INITIAL_SAVING_ASSET_CONVERSION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6681,
                      "src": "1957:36:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1929:64:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6744,
                  "nodeType": "ExpressionStatement",
                  "src": "1929:64:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6745,
                      "name": "ias",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9316,
                      "src": "2003:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6746,
                      "name": "allocationStrategy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6700,
                      "src": "2009:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "src": "2003:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "id": 6748,
                  "nodeType": "ExpressionStatement",
                  "src": "2003:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6749,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9318,
                      "src": "2037:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$11470",
                        "typeString": "contract IERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6751,
                              "name": "ias",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9316,
                              "src": "2052:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                "typeString": "contract IAllocationStrategy"
                              }
                            },
                            "id": 6752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "underlying",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6101,
                            "src": "2052:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 6753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2052:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 6750,
                        "name": "IERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11470,
                        "src": "2045:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IERC20_$11470_$",
                          "typeString": "type(contract IERC20)"
                        }
                      },
                      "id": 6754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2045:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$11470",
                        "typeString": "contract IERC20"
                      }
                    },
                    "src": "2037:32:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$11470",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 6756,
                  "nodeType": "ExpressionStatement",
                  "src": "2037:32:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6764,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2157:1:19",
                                "subdenomination": null,
                                "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": 6763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "2143:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (address[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 6761,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2147:7:19",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 6762,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "2147:9:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                  "typeString": "address[]"
                                }
                              }
                            },
                            "id": 6765,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2143:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2174:1:19",
                                "subdenomination": null,
                                "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": 6768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "2161:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 6766,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2165:6:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 6767,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "2165:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 6770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2161:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          ],
                          "id": 6760,
                          "name": "Hat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9392,
                          "src": "2139:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Hat_$9392_storage_ptr_$",
                            "typeString": "type(struct RTokenStructs.Hat storage pointer)"
                          }
                        },
                        "id": 6771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2139:38:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_memory",
                          "typeString": "struct RTokenStructs.Hat memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Hat_$9392_memory",
                          "typeString": "struct RTokenStructs.Hat memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6757,
                        "name": "hats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9331,
                        "src": "2129:4:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                          "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                        }
                      },
                      "id": 6759,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2129:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Hat_$9392_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct RTokenStructs.Hat storage ref) returns (uint256)"
                      }
                    },
                    "id": 6772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2129:49:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6773,
                  "nodeType": "ExpressionStatement",
                  "src": "2129:49:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6774,
                          "name": "hatStats",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9343,
                          "src": "2233:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                            "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                          }
                        },
                        "id": 6776,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 6775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2242:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2233:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                          "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                        }
                      },
                      "id": 6777,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "2233:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6778,
                      "name": "MAX_UINT256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6689,
                      "src": "2256:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2233:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6780,
                  "nodeType": "ExpressionStatement",
                  "src": "2233:34:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6783,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "2317:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          ],
                          "id": 6782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2309:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 6784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2309:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6785,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "2323:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6781,
                      "name": "AllocationStrategyChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6434,
                      "src": "2283:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 6786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2283:66:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6787,
                  "nodeType": "EmitStatement",
                  "src": "2278:71:19"
                }
              ]
            },
            "documentation": "@notice Create rToken linked with cToken at `cToken_`",
            "id": 6789,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6700,
                  "name": "allocationStrategy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1541:38:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                    "typeString": "contract IAllocationStrategy"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6699,
                    "name": "IAllocationStrategy",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6133,
                    "src": "1541:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6702,
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1589:19:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6701,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1589:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6704,
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1618:21:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6703,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1618:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6706,
                  "name": "decimals_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6789,
                  "src": "1649:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6705,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1649:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1531:136:19"
            },
            "returnParameters": {
              "id": 6708,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1675:0:19"
            },
            "scope": 9287,
            "src": "1512:844:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6801,
              "nodeType": "Block",
              "src": "2546:47:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6796,
                        "name": "accounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9335,
                        "src": "2563:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                          "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                        }
                      },
                      "id": 6798,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6797,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6791,
                        "src": "2572:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2563:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage",
                        "typeString": "struct RTokenStructs.Account storage ref"
                      }
                    },
                    "id": 6799,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "rAmount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9396,
                    "src": "2563:23:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6795,
                  "id": 6800,
                  "nodeType": "Return",
                  "src": "2556:30:19"
                }
              ]
            },
            "documentation": "@notice Returns the amount of tokens owned by `account`.",
            "id": 6802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6791,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6802,
                  "src": "2499:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2499:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2498:15:19"
            },
            "returnParameters": {
              "id": 6795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6794,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6802,
                  "src": "2537:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6793,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2537:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2536:9:19"
            },
            "scope": 9287,
            "src": "2480:113:19",
            "stateMutability": "view",
            "superFunction": 11415,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6817,
              "nodeType": "Block",
              "src": "2982:58:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 6811,
                        "name": "transferAllowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9328,
                        "src": "2999:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 6813,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6812,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6804,
                        "src": "3018:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2999:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 6815,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 6814,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6806,
                      "src": "3025:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2999:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6810,
                  "id": 6816,
                  "nodeType": "Return",
                  "src": "2992:41:19"
                }
              ]
            },
            "documentation": "@notice Returns the remaining number of tokens that `spender` will be\nallowed to spend on behalf of `owner` through `transferFrom`. This is\nzero by default.\n     * This value changes when `approve` or `transferFrom` are called.",
            "id": 6818,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6804,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 6818,
                  "src": "2890:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6803,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2890:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6806,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 6818,
                  "src": "2905:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6805,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2905:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2889:32:19"
            },
            "returnParameters": {
              "id": 6810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6809,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6818,
                  "src": "2969:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2969:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2968:9:19"
            },
            "scope": 9287,
            "src": "2871:169:19",
            "stateMutability": "view",
            "superFunction": 11433,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6848,
              "nodeType": "Block",
              "src": "3761:158:19",
              "statements": [
                {
                  "assignments": [
                    6828
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6828,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 6848,
                      "src": "3771:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6827,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3771:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6831,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 6829,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "3785:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 6830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3785:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3771:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6832,
                          "name": "transferAllowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9328,
                          "src": "3805:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 6835,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 6833,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6828,
                          "src": "3824:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3805:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 6836,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 6834,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6820,
                        "src": "3829:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3805:32:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6837,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6822,
                      "src": "3840:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3805:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6839,
                  "nodeType": "ExpressionStatement",
                  "src": "3805:41:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6841,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6828,
                        "src": "3870:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6842,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6820,
                        "src": "3875:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6843,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6822,
                        "src": "3884:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6840,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11469,
                      "src": "3861:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3861:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6845,
                  "nodeType": "EmitStatement",
                  "src": "3856:35:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3908:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6826,
                  "id": 6847,
                  "nodeType": "Return",
                  "src": "3901:11:19"
                }
              ]
            },
            "documentation": "@notice Sets `amount` as the allowance of `spender` over the caller's tokens.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * > Beware that changing an allowance with this method brings the risk\nthat someone may use both the old and the new allowance by unfortunate\ntransaction ordering. One possible solution to mitigate this race\ncondition is to first reduce the spender's allowance to 0 and set the\ndesired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * Emits an `Approval` event.",
            "id": 6849,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6820,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 6849,
                  "src": "3704:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6819,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3704:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6822,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 6849,
                  "src": "3721:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6821,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3721:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3703:33:19"
            },
            "returnParameters": {
              "id": 6826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6825,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6849,
                  "src": "3755:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6824,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3755:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3754:6:19"
            },
            "scope": 9287,
            "src": "3687:232:19",
            "stateMutability": "nonpayable",
            "superFunction": 11442,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6882,
              "nodeType": "Block",
              "src": "4291:179:19",
              "statements": [
                {
                  "assignments": [
                    6861
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6861,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 6882,
                      "src": "4301:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6860,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4301:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6864,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 6862,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "4315:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 6863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4315:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4301:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6866,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6861,
                        "src": "4355:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6865,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4335:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4335:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6868,
                  "nodeType": "ExpressionStatement",
                  "src": "4335:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6870,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6861,
                        "src": "4386:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6871,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6861,
                        "src": "4391:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6872,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6851,
                        "src": "4396:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6873,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6853,
                        "src": "4401:6:19",
                        "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"
                        }
                      ],
                      "id": 6869,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "4369:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4369:39:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6875,
                  "nodeType": "ExpressionStatement",
                  "src": "4369:39:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6877,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6851,
                        "src": "4438:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6876,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4418:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6878,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4418:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6879,
                  "nodeType": "ExpressionStatement",
                  "src": "4418:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4459:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6859,
                  "id": 6881,
                  "nodeType": "Return",
                  "src": "4452:11:19"
                }
              ]
            },
            "documentation": "@notice Moves `amount` tokens from the caller's account to `dst`.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * Emits a `Transfer` event.\nMay also emit `InterestPaid` event.",
            "id": 6883,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6856,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6855,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "4251:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4251:12:19"
              }
            ],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6851,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6883,
                  "src": "4197:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6850,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4197:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6853,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 6883,
                  "src": "4210:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6852,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4210:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4196:29:19"
            },
            "returnParameters": {
              "id": 6859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6858,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6883,
                  "src": "4281:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6857,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4281:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4280:6:19"
            },
            "scope": 9287,
            "src": "4179:291:19",
            "stateMutability": "nonpayable",
            "superFunction": 11424,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6917,
              "nodeType": "Block",
              "src": "4595:194:19",
              "statements": [
                {
                  "assignments": [
                    6893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6893,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 6917,
                      "src": "4605:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6892,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4605:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6896,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 6894,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "4619:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 6895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4619:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4605:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6898,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6893,
                        "src": "4659:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6897,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4639:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4639:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6900,
                  "nodeType": "ExpressionStatement",
                  "src": "4639:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6902,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6893,
                        "src": "4690:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6903,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6893,
                        "src": "4695:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6904,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6885,
                        "src": "4700:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6905,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "4705:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 6907,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6906,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6893,
                            "src": "4714:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4705:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 6908,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "4705:21:19",
                        "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"
                        }
                      ],
                      "id": 6901,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "4673:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4673:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6910,
                  "nodeType": "ExpressionStatement",
                  "src": "4673:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6912,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6885,
                        "src": "4757:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6911,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4737:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4737:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6914,
                  "nodeType": "ExpressionStatement",
                  "src": "4737:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4778:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6891,
                  "id": 6916,
                  "nodeType": "Return",
                  "src": "4771:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.transferAll implementation",
            "id": 6918,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6888,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6887,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "4567:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4567:12:19"
              }
            ],
            "name": "transferAll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6885,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6918,
                  "src": "4545:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6884,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4545:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4544:13:19"
            },
            "returnParameters": {
              "id": 6891,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6890,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6918,
                  "src": "4589:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6889,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4589:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4588:6:19"
            },
            "scope": 9287,
            "src": "4524:265:19",
            "stateMutability": "nonpayable",
            "superFunction": 6202,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6950,
              "nodeType": "Block",
              "src": "4963:167:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6930,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6920,
                        "src": "4993:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6929,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "4973:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4973:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6932,
                  "nodeType": "ExpressionStatement",
                  "src": "4973:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6934,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "5024:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5024:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6936,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6920,
                        "src": "5036:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6937,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6922,
                        "src": "5041:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 6938,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "5046:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 6940,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6939,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6920,
                            "src": "5055:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5046:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 6941,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "5046:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6933,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "5007:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5007:61:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6943,
                  "nodeType": "ExpressionStatement",
                  "src": "5007:61:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6945,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6922,
                        "src": "5098:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6944,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5078:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5078:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6947,
                  "nodeType": "ExpressionStatement",
                  "src": "5078:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5119:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6928,
                  "id": 6949,
                  "nodeType": "Return",
                  "src": "5112:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.transferAllFrom implementation",
            "id": 6951,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6925,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6924,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "4923:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4923:12:19"
              }
            ],
            "name": "transferAllFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6923,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6920,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 6951,
                  "src": "4872:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6919,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4872:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6922,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6951,
                  "src": "4885:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6921,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4885:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4871:26:19"
            },
            "returnParameters": {
              "id": 6928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6927,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6951,
                  "src": "4953:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6926,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4953:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4952:6:19"
            },
            "scope": 9287,
            "src": "4847:283:19",
            "stateMutability": "nonpayable",
            "superFunction": 6211,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6982,
              "nodeType": "Block",
              "src": "5569:152:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6965,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6953,
                        "src": "5599:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6964,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5579:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5579:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6967,
                  "nodeType": "ExpressionStatement",
                  "src": "5579:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6969,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "5630:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5630:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6971,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6953,
                        "src": "5642:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6972,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6955,
                        "src": "5647:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6973,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6957,
                        "src": "5652:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6968,
                      "name": "transferInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7979,
                      "src": "5613:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 6974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5613:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6975,
                  "nodeType": "ExpressionStatement",
                  "src": "5613:46:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6977,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6955,
                        "src": "5689:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6976,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5669:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5669:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6979,
                  "nodeType": "ExpressionStatement",
                  "src": "5669:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5710:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6963,
                  "id": 6981,
                  "nodeType": "Return",
                  "src": "5703:11:19"
                }
              ]
            },
            "documentation": "@notice Moves `amount` tokens from `sender` to `recipient` using the\nallowance mechanism. `amount` is then deducted from the caller's\nallowance.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * Emits a `Transfer` event.",
            "id": 6983,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6960,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6959,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "5529:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5529:12:19"
              }
            ],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6953,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5462:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6952,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5462:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6955,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5475:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6954,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5475:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6957,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5488:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6956,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5488:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5461:42:19"
            },
            "returnParameters": {
              "id": 6963,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6962,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6983,
                  "src": "5559:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6961,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5559:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5558:6:19"
            },
            "scope": 9287,
            "src": "5440:281:19",
            "stateMutability": "nonpayable",
            "superFunction": 11453,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7003,
              "nodeType": "Block",
              "src": "5878:103:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6993,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6985,
                        "src": "5901:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6992,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "5888:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 6994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5888:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6995,
                  "nodeType": "ExpressionStatement",
                  "src": "5888:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6997,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "5942:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 6998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5942:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 6996,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "5922:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5922:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7000,
                  "nodeType": "ExpressionStatement",
                  "src": "5922:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5970:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 6991,
                  "id": 7002,
                  "nodeType": "Return",
                  "src": "5963:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.mint implementation",
            "id": 7004,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6988,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6987,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "5850:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5850:12:19"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6985,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7004,
                  "src": "5821:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5821:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5820:20:19"
            },
            "returnParameters": {
              "id": 6991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6990,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7004,
                  "src": "5872:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6989,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5872:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5871:6:19"
            },
            "scope": 9287,
            "src": "5807:174:19",
            "stateMutability": "nonpayable",
            "superFunction": 6173,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7032,
              "nodeType": "Block",
              "src": "6172:149:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7016,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6200:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6200:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7018,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7008,
                        "src": "6212:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7015,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "6182:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6182:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7020,
                  "nodeType": "ExpressionStatement",
                  "src": "6182:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7022,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7006,
                        "src": "6241:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7021,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "6228:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6228:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7024,
                  "nodeType": "ExpressionStatement",
                  "src": "6228:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7026,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6282:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6282:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7025,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "6262:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6262:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7029,
                  "nodeType": "ExpressionStatement",
                  "src": "6262:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6310:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7014,
                  "id": 7031,
                  "nodeType": "Return",
                  "src": "6303:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.mintWithSelectedHat implementation",
            "id": 7033,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7011,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7010,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "6132:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6132:12:19"
              }
            ],
            "name": "mintWithSelectedHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7006,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7033,
                  "src": "6072:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7005,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6072:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7008,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7033,
                  "src": "6092:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6092:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6071:35:19"
            },
            "returnParameters": {
              "id": 7014,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7013,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7033,
                  "src": "6162:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7012,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6162:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6161:6:19"
            },
            "scope": 9287,
            "src": "6043:278:19",
            "stateMutability": "nonpayable",
            "superFunction": 6182,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7072,
              "nodeType": "Block",
              "src": "6566:217:19",
              "statements": [
                {
                  "assignments": [
                    7049
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7049,
                      "name": "hatID",
                      "nodeType": "VariableDeclaration",
                      "scope": 7072,
                      "src": "6576:13:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7048,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6576:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7051,
                        "name": "recipients",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7038,
                        "src": "6610:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7052,
                        "name": "proportions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7041,
                        "src": "6622:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[] calldata"
                        }
                      ],
                      "id": 7050,
                      "name": "createHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8287,
                      "src": "6592:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (address[] memory,uint32[] memory) returns (uint256)"
                      }
                    },
                    "id": 7053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6592:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6576:58:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7056,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6662:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6662:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7058,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7049,
                        "src": "6674:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7055,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "6644:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6644:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7060,
                  "nodeType": "ExpressionStatement",
                  "src": "6644:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7062,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7035,
                        "src": "6703:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7061,
                      "name": "mintInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "6690:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6690:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7064,
                  "nodeType": "ExpressionStatement",
                  "src": "6690:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7066,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "6744:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6744:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7065,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "6724:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6724:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7069,
                  "nodeType": "ExpressionStatement",
                  "src": "6724:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6772:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7047,
                  "id": 7071,
                  "nodeType": "Return",
                  "src": "6765:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.mintWithNewHat implementation",
            "id": 7073,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7044,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7043,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "6538:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6538:12:19"
              }
            ],
            "name": "mintWithNewHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7042,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7035,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6426:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7034,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6426:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7038,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6454:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7036,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6454:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7037,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6454:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7041,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6493:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7039,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "6493:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7040,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6493:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6416:112:19"
            },
            "returnParameters": {
              "id": 7047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7046,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7073,
                  "src": "6560:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7045,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6560:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6559:6:19"
            },
            "scope": 9287,
            "src": "6393:390:19",
            "stateMutability": "nonpayable",
            "superFunction": 6195,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7098,
              "nodeType": "Block",
              "src": "7000:139:19",
              "statements": [
                {
                  "assignments": [
                    7083
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7083,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7098,
                      "src": "7010:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7082,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7010:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7086,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7084,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7024:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7024:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7010:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7088,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7083,
                        "src": "7064:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7087,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7044:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7044:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7090,
                  "nodeType": "ExpressionStatement",
                  "src": "7044:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7092,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7083,
                        "src": "7093:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7093,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7075,
                        "src": "7098:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7091,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7078:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7078:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7095,
                  "nodeType": "ExpressionStatement",
                  "src": "7078:33:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7128:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7081,
                  "id": 7097,
                  "nodeType": "Return",
                  "src": "7121:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeem implementation\n     It withdraws equal amount of initially supplied underlying assets",
            "id": 7099,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7078,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7077,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "6972:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6972:12:19"
              }
            ],
            "name": "redeem",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7075,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "6941:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6941:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6940:22:19"
            },
            "returnParameters": {
              "id": 7081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7080,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7099,
                  "src": "6994:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7079,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6994:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6993:6:19"
            },
            "scope": 9287,
            "src": "6925:214:19",
            "stateMutability": "nonpayable",
            "superFunction": 6218,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7125,
              "nodeType": "Block",
              "src": "7249:148:19",
              "statements": [
                {
                  "assignments": [
                    7107
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7107,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7125,
                      "src": "7259:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7106,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7259:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7110,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7108,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7273:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7273:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7259:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7112,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7107,
                        "src": "7313:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7111,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7293:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7293:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7114,
                  "nodeType": "ExpressionStatement",
                  "src": "7293:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7116,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7107,
                        "src": "7342:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7117,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "7347:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7119,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7118,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7107,
                            "src": "7356:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7347:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7120,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "7347:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7115,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7327:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7327:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7122,
                  "nodeType": "ExpressionStatement",
                  "src": "7327:42:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7386:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7105,
                  "id": 7124,
                  "nodeType": "Return",
                  "src": "7379:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeemAll implementation",
            "id": 7126,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7102,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7101,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "7221:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7221:12:19"
              }
            ],
            "name": "redeemAll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7100,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7209:2:19"
            },
            "returnParameters": {
              "id": 7105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7104,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7126,
                  "src": "7243:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7103,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7243:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7242:6:19"
            },
            "scope": 9287,
            "src": "7191:206:19",
            "stateMutability": "nonpayable",
            "superFunction": 6223,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7153,
              "nodeType": "Block",
              "src": "7589:144:19",
              "statements": [
                {
                  "assignments": [
                    7138
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7138,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7153,
                      "src": "7599:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7137,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7599:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7141,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7139,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7613:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7613:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7599:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7143,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7138,
                        "src": "7653:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7142,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7633:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7633:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7145,
                  "nodeType": "ExpressionStatement",
                  "src": "7633:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7147,
                        "name": "redeemTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7128,
                        "src": "7682:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7148,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7130,
                        "src": "7692:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7146,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7667:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7667:38:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7150,
                  "nodeType": "ExpressionStatement",
                  "src": "7667:38:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7722:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7136,
                  "id": 7152,
                  "nodeType": "Return",
                  "src": "7715:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeemAndTransfer implementation",
            "id": 7154,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7133,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7132,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "7549:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7549:12:19"
              }
            ],
            "name": "redeemAndTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7128,
                  "name": "redeemTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "7484:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7484:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7130,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "7502:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7502:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7483:40:19"
            },
            "returnParameters": {
              "id": 7136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7135,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7154,
                  "src": "7579:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7134,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7579:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7578:6:19"
            },
            "scope": 9287,
            "src": "7457:276:19",
            "stateMutability": "nonpayable",
            "superFunction": 6232,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7182,
              "nodeType": "Block",
              "src": "7909:153:19",
              "statements": [
                {
                  "assignments": [
                    7164
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7164,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 7182,
                      "src": "7919:11:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 7163,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7919:7:19",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7167,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7165,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "7933:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 7166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7933:10:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7919:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7169,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7164,
                        "src": "7973:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7168,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "7953:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7953:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7171,
                  "nodeType": "ExpressionStatement",
                  "src": "7953:24:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7173,
                        "name": "redeemTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7156,
                        "src": "8002:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7174,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "8012:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7176,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7175,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7164,
                            "src": "8021:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8012:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7177,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "8012:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7172,
                      "name": "redeemInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8154,
                      "src": "7987:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7987:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7179,
                  "nodeType": "ExpressionStatement",
                  "src": "7987:47:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8051:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7162,
                  "id": 7181,
                  "nodeType": "Return",
                  "src": "8044:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.redeemAndTransferAll implementation",
            "id": 7183,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7159,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7158,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "7869:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7869:12:19"
              }
            ],
            "name": "redeemAndTransferAll",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7156,
                  "name": "redeemTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 7183,
                  "src": "7826:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7826:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7825:18:19"
            },
            "returnParameters": {
              "id": 7162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7161,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7183,
                  "src": "7899:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7160,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7899:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7898:6:19"
            },
            "scope": 9287,
            "src": "7796:266:19",
            "stateMutability": "nonpayable",
            "superFunction": 6239,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7214,
              "nodeType": "Block",
              "src": "8289:154:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7198,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7196,
                      "src": "8299:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7200,
                          "name": "recipients",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7186,
                          "src": "8325:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7201,
                          "name": "proportions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7189,
                          "src": "8337:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          },
                          {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                            "typeString": "uint32[] calldata"
                          }
                        ],
                        "id": 7199,
                        "name": "createHatInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8287,
                        "src": "8307:17:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_uint256_$",
                          "typeString": "function (address[] memory,uint32[] memory) returns (uint256)"
                        }
                      },
                      "id": 7202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8307:42:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8299:50:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7204,
                  "nodeType": "ExpressionStatement",
                  "src": "8299:50:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 7205,
                    "name": "doChangeHat",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7191,
                    "src": "8363:11:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7213,
                  "nodeType": "IfStatement",
                  "src": "8359:78:19",
                  "trueBody": {
                    "id": 7212,
                    "nodeType": "Block",
                    "src": "8376:61:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7207,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11485,
                                "src": "8408:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7208,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8408:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7209,
                              "name": "hatID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7196,
                              "src": "8420:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7206,
                            "name": "changeHatInternal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8382,
                            "src": "8390:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8390:36:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7211,
                        "nodeType": "ExpressionStatement",
                        "src": "8390:36:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev IRToken.createHat implementation",
            "id": 7215,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7194,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7193,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "8252:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8252:12:19"
              }
            ],
            "name": "createHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7186,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8142:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7184,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8142:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7185,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8142:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7189,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8181:29:19",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7187,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "8181:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7188,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "8181:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7191,
                  "name": "doChangeHat",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8220:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7190,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8220:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8132:110:19"
            },
            "returnParameters": {
              "id": 7197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7196,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7215,
                  "src": "8274:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7195,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8274:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8273:15:19"
            },
            "scope": 9287,
            "src": "8114:329:19",
            "stateMutability": "nonpayable",
            "superFunction": 6252,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7237,
              "nodeType": "Block",
              "src": "8566:115:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7225,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "8594:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8594:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7227,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7217,
                        "src": "8606:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7224,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "8576:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8576:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7229,
                  "nodeType": "ExpressionStatement",
                  "src": "8576:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7231,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "8642:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 7232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "8642:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 7230,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "8622:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8622:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7234,
                  "nodeType": "ExpressionStatement",
                  "src": "8622:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8670:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7223,
                  "id": 7236,
                  "nodeType": "Return",
                  "src": "8663:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeHat implementation",
            "id": 7238,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7220,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7219,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "8538:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8538:12:19"
              }
            ],
            "name": "changeHat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7217,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7238,
                  "src": "8514:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7216,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8514:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8513:15:19"
            },
            "returnParameters": {
              "id": 7223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7222,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7238,
                  "src": "8560:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7221,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8560:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8559:6:19"
            },
            "scope": 9287,
            "src": "8495:186:19",
            "stateMutability": "nonpayable",
            "superFunction": 6259,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7248,
              "nodeType": "Block",
              "src": "8804:39:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7243,
                        "name": "hats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9331,
                        "src": "8821:4:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                          "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                        }
                      },
                      "id": 7244,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8821:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 7245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8835:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8821:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7242,
                  "id": 7247,
                  "nodeType": "Return",
                  "src": "8814:22:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getMaximumHatID implementation",
            "id": 7249,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaximumHatID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7239,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8763:2:19"
            },
            "returnParameters": {
              "id": 7242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7241,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7249,
                  "src": "8789:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8789:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8788:15:19"
            },
            "scope": 9287,
            "src": "8739:104:19",
            "stateMutability": "view",
            "superFunction": 6271,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7277,
              "nodeType": "Block",
              "src": "9111:102:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7262,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7254,
                      "src": "9121:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7263,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "9129:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                            "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                          }
                        },
                        "id": 7265,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7264,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7251,
                          "src": "9138:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9129:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage",
                          "typeString": "struct RTokenStructs.Account storage ref"
                        }
                      },
                      "id": 7266,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hatID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9394,
                      "src": "9129:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9121:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7268,
                  "nodeType": "ExpressionStatement",
                  "src": "9121:29:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 7269,
                          "name": "recipients",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7257,
                          "src": "9161:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7270,
                          "name": "proportions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7260,
                          "src": "9173:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        }
                      ],
                      "id": 7271,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9160:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7273,
                          "name": "hatID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7254,
                          "src": "9200:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7272,
                        "name": "_getHatByID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7352,
                        "src": "9188:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) view returns (address[] memory,uint32[] memory)"
                        }
                      },
                      "id": 7274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9188:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "src": "9160:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7276,
                  "nodeType": "ExpressionStatement",
                  "src": "9160:46:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getHatByAddress implementation",
            "id": 7278,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHatByAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7251,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "8926:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8926:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8925:15:19"
            },
            "returnParameters": {
              "id": 7261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7254,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "9001:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9001:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7257,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "9028:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7255,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9028:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7256,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9028:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7260,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7278,
                  "src": "9069:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7258,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9069:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7259,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9069:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8987:119:19"
            },
            "scope": 9287,
            "src": "8901:312:19",
            "stateMutability": "view",
            "superFunction": 6284,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7297,
              "nodeType": "Block",
              "src": "9406:63:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 7289,
                          "name": "recipients",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7284,
                          "src": "9417:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 7290,
                          "name": "proportions",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7287,
                          "src": "9429:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        }
                      ],
                      "id": 7291,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9416:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7293,
                          "name": "hatID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7280,
                          "src": "9456:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7292,
                        "name": "_getHatByID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7352,
                        "src": "9444:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) view returns (address[] memory,uint32[] memory)"
                        }
                      },
                      "id": 7294,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9444:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint32_$dyn_memory_ptr_$",
                        "typeString": "tuple(address[] memory,uint32[] memory)"
                      }
                    },
                    "src": "9416:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7296,
                  "nodeType": "ExpressionStatement",
                  "src": "9416:46:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getHatByID implementation",
            "id": 7298,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHatByID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7281,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7280,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "9286:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7279,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9286:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9285:15:19"
            },
            "returnParameters": {
              "id": 7288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7284,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "9348:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7282,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9348:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7283,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9348:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7287,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7298,
                  "src": "9377:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7285,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9377:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7286,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9377:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9347:58:19"
            },
            "scope": 9287,
            "src": "9266:203:19",
            "stateMutability": "view",
            "superFunction": 6295,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7351,
              "nodeType": "Block",
              "src": "9615:296:19",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7309,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7300,
                        "src": "9629:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9638:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "9629:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 7312,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7300,
                        "src": "9643:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7313,
                        "name": "SELF_HAT_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6692,
                        "src": "9652:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9643:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9629:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7349,
                    "nodeType": "Block",
                    "src": "9808:97:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7333,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7304,
                            "src": "9822:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 7337,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9849:1:19",
                                "subdenomination": null,
                                "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": 7336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9835:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (address[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 7334,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9839:7:19",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 7335,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "9839:9:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                  "typeString": "address[]"
                                }
                              }
                            },
                            "id": 7338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9835:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "9822:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 7340,
                        "nodeType": "ExpressionStatement",
                        "src": "9822:29:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7341,
                            "name": "proportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7307,
                            "src": "9865:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 7345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9892:1:19",
                                "subdenomination": null,
                                "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": 7344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "9879:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_$",
                                "typeString": "function (uint256) pure returns (uint32[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 7342,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9883:6:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                "id": 7343,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "9883:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                  "typeString": "uint32[]"
                                }
                              }
                            },
                            "id": 7346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9879:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "9865:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 7348,
                        "nodeType": "ExpressionStatement",
                        "src": "9865:29:19"
                      }
                    ]
                  },
                  "id": 7350,
                  "nodeType": "IfStatement",
                  "src": "9625:280:19",
                  "trueBody": {
                    "id": 7332,
                    "nodeType": "Block",
                    "src": "9665:137:19",
                    "statements": [
                      {
                        "assignments": [
                          7317
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7317,
                            "name": "hat",
                            "nodeType": "VariableDeclaration",
                            "scope": 7332,
                            "src": "9679:14:19",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Hat_$9392_memory_ptr",
                              "typeString": "struct RTokenStructs.Hat"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 7316,
                              "name": "Hat",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 9392,
                              "src": "9679:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                "typeString": "struct RTokenStructs.Hat"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7321,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7318,
                            "name": "hats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9331,
                            "src": "9696:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                              "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                            }
                          },
                          "id": 7320,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7319,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7300,
                            "src": "9701:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9696:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Hat_$9392_storage",
                            "typeString": "struct RTokenStructs.Hat storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9679:28:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7322,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7304,
                            "src": "9721:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7323,
                              "name": "hat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "9734:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Hat_$9392_memory_ptr",
                                "typeString": "struct RTokenStructs.Hat memory"
                              }
                            },
                            "id": 7324,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "recipients",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9388,
                            "src": "9734:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "9721:27:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 7326,
                        "nodeType": "ExpressionStatement",
                        "src": "9721:27:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7327,
                            "name": "proportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7307,
                            "src": "9762:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7328,
                              "name": "hat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "9776:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Hat_$9392_memory_ptr",
                                "typeString": "struct RTokenStructs.Hat memory"
                              }
                            },
                            "id": 7329,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "proportions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9391,
                            "src": "9776:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "src": "9762:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "id": 7331,
                        "nodeType": "ExpressionStatement",
                        "src": "9762:29:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 7352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getHatByID",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7300,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7352,
                  "src": "9496:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7299,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9496:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9495:15:19"
            },
            "returnParameters": {
              "id": 7308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7304,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 7352,
                  "src": "9557:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7302,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9557:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 7303,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9557:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7307,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 7352,
                  "src": "9586:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 7305,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9586:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 7306,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9586:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9556:58:19"
            },
            "scope": 9287,
            "src": "9475:436:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7374,
              "nodeType": "Block",
              "src": "10080:145:19",
              "statements": [
                {
                  "assignments": [
                    7360
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7360,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7374,
                      "src": "10090:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7359,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "10090:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7364,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7361,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "10116:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7363,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7362,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7354,
                      "src": "10125:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10116:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10090:41:19"
                },
                {
                  "assignments": [
                    7366
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7366,
                      "name": "rGross",
                      "nodeType": "VariableDeclaration",
                      "scope": 7374,
                      "src": "10141:14:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7365,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10141:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7371,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7368,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7360,
                          "src": "10171:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7369,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sInternalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9406,
                        "src": "10171:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7367,
                      "name": "sInternalToR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9187,
                      "src": "10158:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 7370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10158:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10141:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7372,
                    "name": "rGross",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7366,
                    "src": "10212:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7358,
                  "id": 7373,
                  "nodeType": "Return",
                  "src": "10205:13:19"
                }
              ]
            },
            "documentation": "@dev IRToken.receivedSavingsOf implementation",
            "id": 7375,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "receivedSavingsOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7355,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7354,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7375,
                  "src": "9998:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7353,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9998:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9997:15:19"
            },
            "returnParameters": {
              "id": 7358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7357,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7375,
                  "src": "10060:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10060:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10059:16:19"
            },
            "scope": 9287,
            "src": "9971:254:19",
            "stateMutability": "view",
            "superFunction": 6302,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7391,
              "nodeType": "Block",
              "src": "10388:88:19",
              "statements": [
                {
                  "assignments": [
                    7383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7383,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7391,
                      "src": "10398:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7382,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "10398:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7387,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7384,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "10424:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7386,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7385,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7377,
                      "src": "10433:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10424:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10398:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 7388,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7383,
                      "src": "10456:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account storage pointer"
                      }
                    },
                    "id": 7389,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "lDebt",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9404,
                    "src": "10456:13:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7381,
                  "id": 7390,
                  "nodeType": "Return",
                  "src": "10449:20:19"
                }
              ]
            },
            "documentation": "@dev IRToken.receivedLoanOf implementation",
            "id": 7392,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "receivedLoanOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7377,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7392,
                  "src": "10306:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7376,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10306:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10305:15:19"
            },
            "returnParameters": {
              "id": 7381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7380,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7392,
                  "src": "10368:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7379,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10368:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10367:16:19"
            },
            "scope": 9287,
            "src": "10282:194:19",
            "stateMutability": "view",
            "superFunction": 6309,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7409,
              "nodeType": "Block",
              "src": "10645:104:19",
              "statements": [
                {
                  "assignments": [
                    7400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7400,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7409,
                      "src": "10655:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7399,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "10655:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7404,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7401,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "10681:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7403,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7402,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7394,
                      "src": "10690:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10681:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10655:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7406,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7400,
                        "src": "10734:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      ],
                      "id": 7405,
                      "name": "getInterestPayableOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8419,
                      "src": "10713:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Account_$9407_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct RTokenStructs.Account storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 7407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10713:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7398,
                  "id": 7408,
                  "nodeType": "Return",
                  "src": "10706:36:19"
                }
              ]
            },
            "documentation": "@dev IRToken.interestPayableOf implementation",
            "id": 7410,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "interestPayableOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7394,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7410,
                  "src": "10563:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7393,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10563:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10562:15:19"
            },
            "returnParameters": {
              "id": 7398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7397,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7410,
                  "src": "10625:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7396,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10625:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10624:16:19"
            },
            "scope": 9287,
            "src": "10536:213:19",
            "stateMutability": "view",
            "superFunction": 6316,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7425,
              "nodeType": "Block",
              "src": "10876:64:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7420,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7412,
                        "src": "10906:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7419,
                      "name": "payInterestInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9058,
                      "src": "10886:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10886:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7422,
                  "nodeType": "ExpressionStatement",
                  "src": "10886:26:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 7423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10929:4:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 7418,
                  "id": 7424,
                  "nodeType": "Return",
                  "src": "10922:11:19"
                }
              ]
            },
            "documentation": "@dev IRToken.payInterest implementation",
            "id": 7426,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7415,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7414,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "10848:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10848:12:19"
              }
            ],
            "name": "payInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7412,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7426,
                  "src": "10824:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7411,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10824:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10823:15:19"
            },
            "returnParameters": {
              "id": 7418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7417,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7426,
                  "src": "10870:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7416,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10870:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10869:6:19"
            },
            "scope": 9287,
            "src": "10803:137:19",
            "stateMutability": "nonpayable",
            "superFunction": 6266,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7445,
              "nodeType": "Block",
              "src": "11069:267:19",
              "statements": [
                {
                  "assignments": [
                    7432
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7432,
                      "name": "totalSavingsAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 7445,
                      "src": "11079:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7431,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11079:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7433,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11079:26:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7434,
                      "name": "totalSavingsAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7432,
                      "src": "11115:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7436,
                          "name": "savingAssetOrignalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9320,
                          "src": "11150:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7435,
                        "name": "sOriginalToR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9223,
                        "src": "11137:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11137:38:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11115:60:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7439,
                  "nodeType": "ExpressionStatement",
                  "src": "11115:60:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7441,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9314,
                        "src": "11247:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7442,
                        "name": "totalSavingsAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7432,
                        "src": "11296:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7440,
                      "name": "GlobalStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9351,
                      "src": "11204:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_GlobalStats_$9351_storage_ptr_$",
                        "typeString": "type(struct RTokenStructs.GlobalStats storage pointer)"
                      }
                    },
                    "id": 7443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "totalSupply",
                      "totalSavingsAmount"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "11204:125:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalStats_$9351_memory",
                      "typeString": "struct RTokenStructs.GlobalStats memory"
                    }
                  },
                  "functionReturnParameters": 7430,
                  "id": 7444,
                  "nodeType": "Return",
                  "src": "11185:144:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getAccountStats implementation!1",
            "id": 7446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getGlobalStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11023:2:19"
            },
            "returnParameters": {
              "id": 7430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7429,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7446,
                  "src": "11049:18:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_GlobalStats_$9351_memory_ptr",
                    "typeString": "struct RTokenStructs.GlobalStats"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7428,
                    "name": "GlobalStats",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9351,
                    "src": "11049:11:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_GlobalStats_$9351_storage_ptr",
                      "typeString": "struct RTokenStructs.GlobalStats"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11048:20:19"
            },
            "scope": 9287,
            "src": "11000:336:19",
            "stateMutability": "view",
            "superFunction": 6343,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7579,
              "nodeType": "Block",
              "src": "11516:1207:19",
              "statements": [
                {
                  "assignments": [
                    7454
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7454,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 7579,
                      "src": "11526:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7453,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "11526:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7458,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7455,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "11552:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 7457,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7456,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7448,
                      "src": "11561:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11552:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11526:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7459,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11577:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7461,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "hatID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9353,
                      "src": "11577:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7462,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11591:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7463,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hatID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9394,
                      "src": "11591:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11577:27:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7465,
                  "nodeType": "ExpressionStatement",
                  "src": "11577:27:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7466,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11614:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7468,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9355,
                      "src": "11614:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7469,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11630:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7470,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "11630:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11614:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7472,
                  "nodeType": "ExpressionStatement",
                  "src": "11614:31:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7473,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11655:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7475,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9357,
                      "src": "11655:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7476,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11673:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7477,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9398,
                      "src": "11673:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11655:35:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7479,
                  "nodeType": "ExpressionStatement",
                  "src": "11655:35:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7480,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11700:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7482,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9359,
                      "src": "11700:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7483,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11714:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7484,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9404,
                      "src": "11714:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11700:27:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7486,
                  "nodeType": "ExpressionStatement",
                  "src": "11700:27:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7487,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11737:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7489,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "sInternalAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9361,
                      "src": "11737:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7490,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7454,
                        "src": "11761:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 7491,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sInternalAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9406,
                      "src": "11761:23:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11737:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7493,
                  "nodeType": "ExpressionStatement",
                  "src": "11737:47:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7494,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11795:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7496,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rInterestPayable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9363,
                      "src": "11795:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7498,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "11841:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        ],
                        "id": 7497,
                        "name": "getInterestPayableOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8419,
                        "src": "11820:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Account_$9407_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct RTokenStructs.Account storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 7499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11820:29:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11795:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7501,
                  "nodeType": "ExpressionStatement",
                  "src": "11795:54:19"
                },
                {
                  "assignments": [
                    7503
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7503,
                      "name": "statsStored",
                      "nodeType": "VariableDeclaration",
                      "scope": 7579,
                      "src": "11860:38:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                        "typeString": "struct RTokenStructs.AccountStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7502,
                        "name": "AccountStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9371,
                        "src": "11860:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7507,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7504,
                      "name": "accountStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9339,
                      "src": "11901:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AccountStatsStored_$9371_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.AccountStatsStored storage ref)"
                      }
                    },
                    "id": 7506,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7505,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7448,
                      "src": "11914:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11901:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage",
                      "typeString": "struct RTokenStructs.AccountStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11860:60:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7508,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7451,
                        "src": "11930:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsView memory"
                        }
                      },
                      "id": 7510,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "cumulativeInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9365,
                      "src": "11930:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7511,
                        "name": "statsStored",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7503,
                        "src": "11957:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsStored storage pointer"
                        }
                      },
                      "id": 7512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "cumulativeInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9370,
                      "src": "11957:30:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11930:57:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7514,
                  "nodeType": "ExpressionStatement",
                  "src": "11930:57:19"
                },
                {
                  "assignments": [
                    7516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7516,
                      "name": "hat",
                      "nodeType": "VariableDeclaration",
                      "scope": 7579,
                      "src": "11998:15:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                        "typeString": "struct RTokenStructs.Hat"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7515,
                        "name": "Hat",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9392,
                        "src": "11998:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                          "typeString": "struct RTokenStructs.Hat"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7527,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7517,
                      "name": "hats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9331,
                      "src": "12016:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                        "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                      }
                    },
                    "id": 7526,
                    "indexExpression": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7518,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7454,
                            "src": "12021:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 7519,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hatID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9394,
                          "src": "12021:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7520,
                          "name": "SELF_HAT_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6692,
                          "src": "12038:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12021:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7523,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "12080:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7524,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "12080:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7525,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "12021:72:19",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12064:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12016:78:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Hat_$9392_storage",
                      "typeString": "struct RTokenStructs.Hat storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11998:96:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7528,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "12108:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7529,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "12108:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 7530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12125:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "12108:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 7532,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7454,
                          "src": "12130:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 7533,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "12130:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 7534,
                        "name": "SELF_HAT_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6692,
                        "src": "12147:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "12130:28:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "12108:50:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7575,
                    "nodeType": "Block",
                    "src": "12522:172:19",
                    "statements": [
                      {
                        "body": {
                          "id": 7573,
                          "nodeType": "Block",
                          "src": "12589:95:19",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 7571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7561,
                                    "name": "stats",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7451,
                                    "src": "12607:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                      "typeString": "struct RTokenStructs.AccountStatsView memory"
                                    }
                                  },
                                  "id": 7563,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lRecipientsSum",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9367,
                                  "src": "12607:20:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7564,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7454,
                                      "src": "12631:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 7565,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "lRecipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9402,
                                    "src": "12631:19:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7570,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7566,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7516,
                                        "src": "12651:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 7567,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "12651:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 7569,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 7568,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7550,
                                      "src": "12666:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12651:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12631:38:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12607:62:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7572,
                              "nodeType": "ExpressionStatement",
                              "src": "12607:62:19"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7553,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7550,
                            "src": "12556:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7554,
                                "name": "hat",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7516,
                                "src": "12560:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                }
                              },
                              "id": 7555,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "proportions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9391,
                              "src": "12560:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                "typeString": "uint32[] storage ref"
                              }
                            },
                            "id": 7556,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "12560:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12556:26:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7574,
                        "initializationExpression": {
                          "assignments": [
                            7550
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 7550,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 7574,
                              "src": "12541:9:19",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 7549,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "12541:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 7552,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 7551,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12553:1:19",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "12541:13:19"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 7559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "12584:3:19",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 7558,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7550,
                              "src": "12586:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7560,
                          "nodeType": "ExpressionStatement",
                          "src": "12584:3:19"
                        },
                        "nodeType": "ForStatement",
                        "src": "12536:148:19"
                      }
                    ]
                  },
                  "id": 7576,
                  "nodeType": "IfStatement",
                  "src": "12104:590:19",
                  "trueBody": {
                    "id": 7548,
                    "nodeType": "Block",
                    "src": "12160:356:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7537,
                              "name": "stats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7451,
                              "src": "12441:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                "typeString": "struct RTokenStructs.AccountStatsView memory"
                              }
                            },
                            "id": 7539,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "lRecipientsSum",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9367,
                            "src": "12441:20:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7541,
                                  "name": "stats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7451,
                                  "src": "12474:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                    "typeString": "struct RTokenStructs.AccountStatsView memory"
                                  }
                                },
                                "id": 7542,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9355,
                                "src": "12474:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7543,
                                  "name": "stats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7451,
                                  "src": "12489:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                                    "typeString": "struct RTokenStructs.AccountStatsView memory"
                                  }
                                },
                                "id": 7544,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rInterest",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9357,
                                "src": "12489:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7540,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "12464:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12464:41:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12441:64:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7547,
                        "nodeType": "ExpressionStatement",
                        "src": "12441:64:19"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7577,
                    "name": "stats",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7451,
                    "src": "12711:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                      "typeString": "struct RTokenStructs.AccountStatsView memory"
                    }
                  },
                  "functionReturnParameters": 7452,
                  "id": 7578,
                  "nodeType": "Return",
                  "src": "12704:12:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getAccountStats implementation",
            "id": 7580,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7448,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 7580,
                  "src": "11419:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11419:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11418:15:19"
            },
            "returnParameters": {
              "id": 7452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7451,
                  "name": "stats",
                  "nodeType": "VariableDeclaration",
                  "scope": 7580,
                  "src": "11481:29:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AccountStatsView_$9368_memory_ptr",
                    "typeString": "struct RTokenStructs.AccountStatsView"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7450,
                    "name": "AccountStatsView",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9368,
                    "src": "11481:16:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsView_$9368_storage_ptr",
                      "typeString": "struct RTokenStructs.AccountStatsView"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11480:31:19"
            },
            "scope": 9287,
            "src": "11394:1329:19",
            "stateMutability": "view",
            "superFunction": 6350,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7618,
              "nodeType": "Block",
              "src": "12887:267:19",
              "statements": [
                {
                  "assignments": [
                    7588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7588,
                      "name": "statsStored",
                      "nodeType": "VariableDeclaration",
                      "scope": 7618,
                      "src": "12897:34:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7587,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "12897:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7592,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 7589,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "12934:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 7591,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 7590,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7582,
                      "src": "12943:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12934:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12897:52:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7593,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7585,
                        "src": "12959:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                          "typeString": "struct RTokenStructs.HatStatsView memory"
                        }
                      },
                      "id": 7595,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9373,
                      "src": "12959:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7596,
                        "name": "statsStored",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7588,
                        "src": "12976:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 7597,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "12976:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12959:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7599,
                  "nodeType": "ExpressionStatement",
                  "src": "12959:37:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7600,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7585,
                        "src": "13006:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                          "typeString": "struct RTokenStructs.HatStatsView memory"
                        }
                      },
                      "id": 7602,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalLoans",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9375,
                      "src": "13006:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7603,
                        "name": "statsStored",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7588,
                        "src": "13025:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 7604,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalLoans",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9382,
                      "src": "13025:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13006:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7606,
                  "nodeType": "ExpressionStatement",
                  "src": "13006:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7607,
                        "name": "stats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7585,
                        "src": "13058:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                          "typeString": "struct RTokenStructs.HatStatsView memory"
                        }
                      },
                      "id": 7609,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalSavings",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9377,
                      "src": "13058:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 7611,
                            "name": "statsStored",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7588,
                            "src": "13092:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                              "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                            }
                          },
                          "id": 7612,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalInternalSavings",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9384,
                          "src": "13092:32:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7610,
                        "name": "sInternalToR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9187,
                        "src": "13079:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13079:46:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13058:67:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7615,
                  "nodeType": "ExpressionStatement",
                  "src": "13058:67:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7616,
                    "name": "stats",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7585,
                    "src": "13142:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                      "typeString": "struct RTokenStructs.HatStatsView memory"
                    }
                  },
                  "functionReturnParameters": 7586,
                  "id": 7617,
                  "nodeType": "Return",
                  "src": "13135:12:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getHatStats implementation",
            "id": 7619,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHatStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7583,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7582,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7619,
                  "src": "12798:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7581,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12798:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12797:15:19"
            },
            "returnParameters": {
              "id": 7586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7585,
                  "name": "stats",
                  "nodeType": "VariableDeclaration",
                  "scope": 7619,
                  "src": "12860:25:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_HatStatsView_$9378_memory_ptr",
                    "typeString": "struct RTokenStructs.HatStatsView"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7584,
                    "name": "HatStatsView",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9378,
                    "src": "12860:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsView_$9378_storage_ptr",
                      "typeString": "struct RTokenStructs.HatStatsView"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12859:27:19"
            },
            "scope": 9287,
            "src": "12777:377:19",
            "stateMutability": "view",
            "superFunction": 6357,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7628,
              "nodeType": "Block",
              "src": "13289:36:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7625,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "13314:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      ],
                      "id": 7624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "13306:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 7626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13306:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 7623,
                  "id": 7627,
                  "nodeType": "Return",
                  "src": "13299:19:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getCurrentSavingStrategy implementation",
            "id": 7629,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentSavingStrategy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13254:2:19"
            },
            "returnParameters": {
              "id": 7623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7622,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7629,
                  "src": "13280:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7621,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13280:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13279:9:19"
            },
            "scope": 9287,
            "src": "13221:104:19",
            "stateMutability": "view",
            "superFunction": 6331,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7646,
              "nodeType": "Block",
              "src": "13515:108:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7636,
                      "name": "sOriginalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7634,
                      "src": "13525:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7637,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "13543:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13525:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7639,
                  "nodeType": "ExpressionStatement",
                  "src": "13525:42:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7640,
                      "name": "rAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7632,
                      "src": "13577:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7642,
                          "name": "sOriginalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7634,
                          "src": "13600:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7641,
                        "name": "sOriginalToR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9223,
                        "src": "13587:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7643,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13587:29:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13577:39:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7645,
                  "nodeType": "ExpressionStatement",
                  "src": "13577:39:19"
                }
              ]
            },
            "documentation": "@dev IRToken.getSavingAssetBalance implementation",
            "id": 7647,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSavingAssetBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7630,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13419:2:19"
            },
            "returnParameters": {
              "id": 7635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7632,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7647,
                  "src": "13469:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7631,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13469:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7634,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 7647,
                  "src": "13486:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13486:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13468:42:19"
            },
            "scope": 9287,
            "src": "13389:234:19",
            "stateMutability": "view",
            "superFunction": 6338,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7766,
              "nodeType": "Block",
              "src": "13813:2264:19",
              "statements": [
                {
                  "assignments": [
                    7657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7657,
                      "name": "allocationStrategy",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "13823:38:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7656,
                        "name": "IAllocationStrategy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6133,
                        "src": "13823:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7661,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7659,
                        "name": "allocationStrategy_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7649,
                        "src": "13884:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7658,
                      "name": "IAllocationStrategy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6133,
                      "src": "13864:19:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IAllocationStrategy_$6133_$",
                        "typeString": "type(contract IAllocationStrategy)"
                      }
                    },
                    "id": 7660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13864:40:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13823:81:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7663,
                              "name": "allocationStrategy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7657,
                              "src": "13935:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                "typeString": "contract IAllocationStrategy"
                              }
                            },
                            "id": 7664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "underlying",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6101,
                            "src": "13935:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 7665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13935:31:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7667,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9318,
                              "src": "13978:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$11470",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$11470",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 7666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13970:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 7668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13970:14:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "13935:49:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65772073747261746567792073686f756c642068617665207468652073616d6520756e6465726c79696e67206173736574",
                        "id": 7670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13998:52:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_64692d076d2423d016b054c3ae011042efd9cec21fce2e3d2eb50e670c50a910",
                          "typeString": "literal_string \"New strategy should have the same underlying asset\""
                        },
                        "value": "New strategy should have the same underlying asset"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_64692d076d2423d016b054c3ae011042efd9cec21fce2e3d2eb50e670c50a910",
                          "typeString": "literal_string \"New strategy should have the same underlying asset\""
                        }
                      ],
                      "id": 7662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "13914:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13914:146:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7672,
                  "nodeType": "ExpressionStatement",
                  "src": "13914:146:19"
                },
                {
                  "assignments": [
                    7674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7674,
                      "name": "oldIas",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14070:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7673,
                        "name": "IAllocationStrategy",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6133,
                        "src": "14070:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7676,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7675,
                    "name": "ias",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9316,
                    "src": "14099:3:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14070:32:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7677,
                      "name": "ias",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9316,
                      "src": "14112:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7678,
                      "name": "allocationStrategy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7657,
                      "src": "14118:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                        "typeString": "contract IAllocationStrategy"
                      }
                    },
                    "src": "14112:24:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                      "typeString": "contract IAllocationStrategy"
                    }
                  },
                  "id": 7680,
                  "nodeType": "ExpressionStatement",
                  "src": "14112:24:19"
                },
                {
                  "assignments": [
                    7682,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7682,
                      "name": "sOriginalBurned",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14198:23:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7681,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14198:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 7686,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7683,
                        "name": "oldIas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7674,
                        "src": "14227:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 7684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemAll",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6132,
                      "src": "14227:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function () external returns (uint256,uint256)"
                      }
                    },
                    "id": 7685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14227:18:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14197:48:19"
                },
                {
                  "assignments": [
                    7688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7688,
                      "name": "totalAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14255:19:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7687,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14255:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7695,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7692,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11553,
                            "src": "14301:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_RToken_$9287",
                              "typeString": "contract RToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_RToken_$9287",
                              "typeString": "contract RToken"
                            }
                          ],
                          "id": 7691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14293:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 7693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14293:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7689,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9318,
                        "src": "14277:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$11470",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 7690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11415,
                      "src": "14277:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 7694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14277:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14255:52:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7700,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "14398:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              ],
                              "id": 7699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14390:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 7701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14390:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7702,
                            "name": "totalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7688,
                            "src": "14404:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7697,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "14376:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 7698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11442,
                          "src": "14376:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 7703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14376:40:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e20617070726f7665206661696c6564",
                        "id": 7704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14418:22:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        },
                        "value": "token approve failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        }
                      ],
                      "id": 7696,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "14368:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14368:73:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7706,
                  "nodeType": "ExpressionStatement",
                  "src": "14368:73:19"
                },
                {
                  "assignments": [
                    7708
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7708,
                      "name": "sOriginalCreated",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "14451:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7707,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14451:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7713,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7711,
                        "name": "totalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7688,
                        "src": "14499:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7709,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "14478:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 7710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "investUnderlying",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6118,
                      "src": "14478:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) external returns (uint256)"
                      }
                    },
                    "id": 7712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14478:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14451:60:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7715,
                          "name": "ias",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9316,
                          "src": "14964:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        ],
                        "id": 7714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14956:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14956:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7718,
                          "name": "oldIas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7674,
                          "src": "14980:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                            "typeString": "contract IAllocationStrategy"
                          }
                        ],
                        "id": 7717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14972:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 7719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14972:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14956:31:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7734,
                  "nodeType": "IfStatement",
                  "src": "14952:122:19",
                  "trueBody": {
                    "id": 7733,
                    "nodeType": "Block",
                    "src": "14989:85:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 7728,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6497,
                                    "src": "15054:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 7729,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15054:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7727,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15046:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 7730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15046:16:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7723,
                                      "name": "oldIas",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7674,
                                      "src": "15019:6:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                        "typeString": "contract IAllocationStrategy"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                        "typeString": "contract IAllocationStrategy"
                                      }
                                    ],
                                    "id": 7722,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "15011:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 7724,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15011:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7721,
                                "name": "Ownable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6574,
                                "src": "15003:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Ownable_$6574_$",
                                  "typeString": "type(contract Ownable)"
                                }
                              },
                              "id": 7725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15003:24:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Ownable_$6574",
                                "typeString": "contract Ownable"
                              }
                            },
                            "id": 7726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferOwnership",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6549,
                            "src": "15003:42:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 7731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15003:60:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7732,
                        "nodeType": "ExpressionStatement",
                        "src": "15003:60:19"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7736
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7736,
                      "name": "sInternalAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "15626:23:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7735,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15626:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7740,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7738,
                        "name": "savingAssetOrignalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9320,
                        "src": "15673:24:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7737,
                      "name": "sOriginalToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9239,
                      "src": "15652:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 7739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15652:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15626:72:19"
                },
                {
                  "assignments": [
                    7742
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7742,
                      "name": "savingAssetConversionRateOld",
                      "nodeType": "VariableDeclaration",
                      "scope": 7766,
                      "src": "15708:36:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7741,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15708:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7744,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 7743,
                    "name": "savingAssetConversionRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9322,
                    "src": "15747:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15708:64:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7745,
                      "name": "savingAssetConversionRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9322,
                      "src": "15782:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7751,
                          "name": "sOriginalCreated",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7708,
                          "src": "15890:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7748,
                              "name": "savingAssetConversionRateOld",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7742,
                              "src": "15843:28:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7746,
                              "name": "sOriginalBurned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7682,
                              "src": "15810:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10771,
                            "src": "15810:32:19",
                            "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": 7749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15810:62:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10787,
                        "src": "15810:79:19",
                        "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": 7752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15810:97:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15782:125:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7754,
                  "nodeType": "ExpressionStatement",
                  "src": "15782:125:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 7755,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "15917:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 7757,
                          "name": "sInternalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7736,
                          "src": "15965:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7756,
                        "name": "sInternalToSOriginal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9255,
                        "src": "15944:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 7758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15944:37:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15917:64:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7760,
                  "nodeType": "ExpressionStatement",
                  "src": "15917:64:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7762,
                        "name": "allocationStrategy_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7649,
                        "src": "16023:19:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7763,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "16044:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7761,
                      "name": "AllocationStrategyChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6434,
                      "src": "15997:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15997:73:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7765,
                  "nodeType": "EmitStatement",
                  "src": "15992:78:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeAllocationStrategy implementation",
            "id": 7767,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7652,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7651,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9433,
                  "src": "13778:12:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13778:12:19"
              },
              {
                "arguments": null,
                "id": 7654,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7653,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "13799:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13799:9:19"
              }
            ],
            "name": "changeAllocationStrategy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7649,
                  "name": "allocationStrategy_",
                  "nodeType": "VariableDeclaration",
                  "scope": 7767,
                  "src": "13724:27:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7648,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13724:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13723:29:19"
            },
            "returnParameters": {
              "id": 7655,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13813:0:19"
            },
            "scope": 9287,
            "src": "13690:2387:19",
            "stateMutability": "nonpayable",
            "superFunction": 6412,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7776,
              "nodeType": "Block",
              "src": "16231:36:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7773,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "16256:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      ],
                      "id": 7772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16248:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 7774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16248:12:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 7771,
                  "id": 7775,
                  "nodeType": "Return",
                  "src": "16241:19:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeHatFor implementation",
            "id": 7777,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentAllocationStrategy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7768,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16169:2:19"
            },
            "returnParameters": {
              "id": 7771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7770,
                  "name": "allocationStrategy",
                  "nodeType": "VariableDeclaration",
                  "scope": 7777,
                  "src": "16203:26:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7769,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16203:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16202:28:19"
            },
            "scope": 9287,
            "src": "16132:135:19",
            "stateMutability": "view",
            "superFunction": 6407,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7798,
              "nodeType": "Block",
              "src": "16403:155:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7788,
                            "name": "contractAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7779,
                            "src": "16433:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7787,
                          "name": "_isContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9149,
                          "src": "16421:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 7789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16421:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "41646d696e2063616e206f6e6c79206368616e67652068617420666f7220636f6e74726163742061646472657373",
                        "id": 7790,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16451:48:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4ea06904805f14cdb96147469b8b74a6cf2d4e445516a1081172ae5ef5b073f8",
                          "typeString": "literal_string \"Admin can only change hat for contract address\""
                        },
                        "value": "Admin can only change hat for contract address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4ea06904805f14cdb96147469b8b74a6cf2d4e445516a1081172ae5ef5b073f8",
                          "typeString": "literal_string \"Admin can only change hat for contract address\""
                        }
                      ],
                      "id": 7786,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16413:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16413:87:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7792,
                  "nodeType": "ExpressionStatement",
                  "src": "16413:87:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7794,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7779,
                        "src": "16528:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7795,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7781,
                        "src": "16545:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7793,
                      "name": "changeHatInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8382,
                      "src": "16510:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 7796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16510:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7797,
                  "nodeType": "ExpressionStatement",
                  "src": "16510:41:19"
                }
              ]
            },
            "documentation": "@dev IRToken.changeHatFor implementation",
            "id": 7799,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7784,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7783,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "16393:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16393:9:19"
              }
            ],
            "name": "changeHatFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7779,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 7799,
                  "src": "16344:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16344:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7781,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 7799,
                  "src": "16369:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7780,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16369:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16343:40:19"
            },
            "returnParameters": {
              "id": 7785,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16403:0:19"
            },
            "scope": 9287,
            "src": "16322:236:19",
            "stateMutability": "nonpayable",
            "superFunction": 6419,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7816,
              "nodeType": "Block",
              "src": "16685:78:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7809,
                        "name": "newCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7801,
                        "src": "16713:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7808,
                      "name": "updateCodeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6596,
                      "src": "16695:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16695:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7811,
                  "nodeType": "ExpressionStatement",
                  "src": "16695:26:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7813,
                        "name": "newCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7801,
                        "src": "16748:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7812,
                      "name": "CodeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6428,
                      "src": "16736:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 7814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16736:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7815,
                  "nodeType": "EmitStatement",
                  "src": "16731:25:19"
                }
              ]
            },
            "documentation": "@dev Update the rToken logic contract code",
            "id": 7817,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 7804,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7803,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6507,
                  "src": "16661:9:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16661:9:19"
              },
              {
                "arguments": null,
                "id": 7806,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 7805,
                  "name": "delegatedOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6452,
                  "src": "16671:13:19",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16671:13:19"
              }
            ],
            "name": "updateCode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7801,
                  "name": "newCode",
                  "nodeType": "VariableDeclaration",
                  "scope": 7817,
                  "src": "16635:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7800,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16635:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16634:17:19"
            },
            "returnParameters": {
              "id": 7807,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16685:0:19"
            },
            "scope": 9287,
            "src": "16615:148:19",
            "stateMutability": "nonpayable",
            "superFunction": 6424,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7978,
              "nodeType": "Block",
              "src": "17344:1623:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7829,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7821,
                          "src": "17362:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7830,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7823,
                          "src": "17369:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "17362:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7372632073686f756c64206e6f7420657175616c20647374",
                        "id": 7832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17374:26:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5cadebdca1c77de3ee4c202672e859d40979e1306af76927793afba42f15bacb",
                          "typeString": "literal_string \"src should not equal dst\""
                        },
                        "value": "src should not equal dst"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5cadebdca1c77de3ee4c202672e859d40979e1306af76927793afba42f15bacb",
                          "typeString": "literal_string \"src should not equal dst\""
                        }
                      ],
                      "id": 7828,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17354:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17354:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7834,
                  "nodeType": "ExpressionStatement",
                  "src": "17354:47:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7836,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9335,
                              "src": "17433:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                              }
                            },
                            "id": 7838,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7837,
                              "name": "src",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7821,
                              "src": "17442:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17433:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage",
                              "typeString": "struct RTokenStructs.Account storage ref"
                            }
                          },
                          "id": 7839,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "17433:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7840,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7825,
                          "src": "17458:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17433:31:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f7567682062616c616e636520746f207472616e73666572",
                        "id": 7842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17478:32:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a72616f29521a03aedf888c3828752867ede410a093ae0e38c6270325f6641c6",
                          "typeString": "literal_string \"Not enough balance to transfer\""
                        },
                        "value": "Not enough balance to transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a72616f29521a03aedf888c3828752867ede410a093ae0e38c6270325f6641c6",
                          "typeString": "literal_string \"Not enough balance to transfer\""
                        }
                      ],
                      "id": 7835,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17412:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17412:108:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7844,
                  "nodeType": "ExpressionStatement",
                  "src": "17412:108:19"
                },
                {
                  "assignments": [
                    7846
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7846,
                      "name": "startingAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "17595:25:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7845,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17595:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7848,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 7847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17623:1:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17595:29:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 7851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7849,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7819,
                      "src": "17638:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7850,
                      "name": "src",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7821,
                      "src": "17649:3:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17638:14:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7865,
                    "nodeType": "Block",
                    "src": "17716:77:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7857,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7846,
                            "src": "17730:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7858,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9328,
                                "src": "17750:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7860,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7859,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7821,
                                "src": "17769:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "17750:23:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7862,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7861,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7819,
                              "src": "17774:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17750:32:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17730:52:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7864,
                        "nodeType": "ExpressionStatement",
                        "src": "17730:52:19"
                      }
                    ]
                  },
                  "id": 7866,
                  "nodeType": "IfStatement",
                  "src": "17634:159:19",
                  "trueBody": {
                    "id": 7856,
                    "nodeType": "Block",
                    "src": "17654:56:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7852,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7846,
                            "src": "17668:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7853,
                            "name": "MAX_UINT256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6689,
                            "src": "17688:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17668:31:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7855,
                        "nodeType": "ExpressionStatement",
                        "src": "17668:31:19"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 7868,
                          "name": "startingAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7846,
                          "src": "17823:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7869,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7825,
                          "src": "17844:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17823:27:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f75676820616c6c6f77616e636520666f72207472616e73666572",
                        "id": 7871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17864:35:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e977e708d71179266f4ef734bb7d21e1e7e25a74ec4c12926444b1b98c0a4f2",
                          "typeString": "literal_string \"Not enough allowance for transfer\""
                        },
                        "value": "Not enough allowance for transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0e977e708d71179266f4ef734bb7d21e1e7e25a74ec4c12926444b1b98c0a4f2",
                          "typeString": "literal_string \"Not enough allowance for transfer\""
                        }
                      ],
                      "id": 7867,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17802:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17802:107:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7873,
                  "nodeType": "ExpressionStatement",
                  "src": "17802:107:19"
                },
                {
                  "assignments": [
                    7875
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7875,
                      "name": "allowanceNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "17985:20:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7874,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17985:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7878,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18030:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7876,
                        "name": "startingAllowance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7846,
                        "src": "18008:17:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10710,
                      "src": "18008:21:19",
                      "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": 7879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18008:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17985:52:19"
                },
                {
                  "assignments": [
                    7882
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7882,
                      "name": "srcTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "18047:20:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7881,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18047:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7890,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7888,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18096:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7883,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "18070:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7885,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7884,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7821,
                            "src": "18079:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18070:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "18070:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10710,
                      "src": "18070:25:19",
                      "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": 7889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18070:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18047:56:19"
                },
                {
                  "assignments": [
                    7892
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7892,
                      "name": "dstTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "18113:20:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7891,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18113:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7900,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7898,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18162:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 7893,
                            "name": "accounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9335,
                            "src": "18136:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                              "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                            }
                          },
                          "id": 7895,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 7894,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7823,
                            "src": "18145:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18136:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage",
                            "typeString": "struct RTokenStructs.Account storage ref"
                          }
                        },
                        "id": 7896,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "18136:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 7897,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10694,
                      "src": "18136:25:19",
                      "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": 7899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18136:33:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18113:56:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 7901,
                      "name": "startingAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7846,
                      "src": "18239:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 7902,
                      "name": "MAX_UINT256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6689,
                      "src": "18260:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18239:32:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7913,
                  "nodeType": "IfStatement",
                  "src": "18235:110:19",
                  "trueBody": {
                    "id": 7912,
                    "nodeType": "Block",
                    "src": "18273:72:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7904,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9328,
                                "src": "18287:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7907,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7905,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7821,
                                "src": "18306:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18287:23:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7908,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7906,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7819,
                              "src": "18311:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "18287:32:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7909,
                            "name": "allowanceNew",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7875,
                            "src": "18322:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18287:47:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7911,
                        "nodeType": "ExpressionStatement",
                        "src": "18287:47:19"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    7915
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7915,
                      "name": "sInternalEstimated",
                      "nodeType": "VariableDeclaration",
                      "scope": 7978,
                      "src": "18390:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7914,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18390:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7920,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7917,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7821,
                        "src": "18445:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7918,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18450:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7916,
                      "name": "estimateAndRecollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8658,
                      "src": "18419:25:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 7919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18419:38:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18390:67:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7922,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7823,
                        "src": "18483:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7923,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18488:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7924,
                        "name": "sInternalEstimated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7915,
                        "src": "18496:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7921,
                      "name": "distributeLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8630,
                      "src": "18467:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 7925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18467:48:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7926,
                  "nodeType": "ExpressionStatement",
                  "src": "18467:48:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7932,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7927,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "18559:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                            "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                          }
                        },
                        "id": 7929,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7928,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7821,
                          "src": "18568:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18559:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage",
                          "typeString": "struct RTokenStructs.Account storage ref"
                        }
                      },
                      "id": 7930,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "18559:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7931,
                      "name": "srcTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7882,
                      "src": "18583:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18559:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7933,
                  "nodeType": "ExpressionStatement",
                  "src": "18559:36:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 7939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 7934,
                          "name": "accounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "18605:8:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                            "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                          }
                        },
                        "id": 7936,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 7935,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7823,
                          "src": "18614:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18605:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage",
                          "typeString": "struct RTokenStructs.Account storage ref"
                        }
                      },
                      "id": 7937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "18605:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 7938,
                      "name": "dstTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7892,
                      "src": "18629:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18605:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7940,
                  "nodeType": "ExpressionStatement",
                  "src": "18605:36:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 7960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 7953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7941,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "18695:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 7943,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 7942,
                                  "name": "src",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7821,
                                  "src": "18704:3:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "18695:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "id": 7944,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "18695:19:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18718:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "18695:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7947,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "18735:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 7949,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 7948,
                                  "name": "dst",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7823,
                                  "src": "18744:3:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "18735:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "id": 7950,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "18735:19:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 7951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18758:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "18735:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "18695:64:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7954,
                                "name": "accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9335,
                                "src": "18775:8:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                  "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                }
                              },
                              "id": 7956,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7955,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7821,
                                "src": "18784:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "18775:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage",
                                "typeString": "struct RTokenStructs.Account storage ref"
                              }
                            },
                            "id": 7957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hatID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9394,
                            "src": "18775:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 7958,
                            "name": "SELF_HAT_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6692,
                            "src": "18798:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18775:34:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "18695:114:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 7961,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "18694:116:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7971,
                  "nodeType": "IfStatement",
                  "src": "18690:190:19",
                  "trueBody": {
                    "id": 7970,
                    "nodeType": "Block",
                    "src": "18812:68:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7963,
                              "name": "dst",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7823,
                              "src": "18844:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7964,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "18849:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 7966,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 7965,
                                  "name": "src",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7821,
                                  "src": "18858:3:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "18849:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "id": 7967,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "18849:19:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7962,
                            "name": "changeHatInternal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8382,
                            "src": "18826:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18826:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7969,
                        "nodeType": "ExpressionStatement",
                        "src": "18826:43:19"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7973,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7821,
                        "src": "18943:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7974,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7823,
                        "src": "18948:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7975,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7825,
                        "src": "18953:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7972,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11461,
                      "src": "18934:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 7976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18934:26:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7977,
                  "nodeType": "EmitStatement",
                  "src": "18929:31:19"
                }
              ]
            },
            "documentation": "@dev Transfer `tokens` tokens from `src` to `dst` by `spender`\nCalled by both `transfer` and `transferFrom` internally\n@param spender The address of the account performing the transfer\n@param src The address of the source account\n@param dst The address of the destination account\n@param tokens The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 7979,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7819,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17247:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7818,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17247:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7821,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17272:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17272:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7823,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17293:11:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7822,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17293:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7825,
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 7979,
                  "src": "17314:14:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7824,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17314:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17237:97:19"
            },
            "returnParameters": {
              "id": 7827,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17344:0:19"
            },
            "scope": 9287,
            "src": "17212:1755:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8082,
              "nodeType": "Block",
              "src": "19248:1018:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7994,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7987,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11485,
                                "src": "19295:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7988,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19295:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7990,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11553,
                                  "src": "19315:4:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_RToken_$9287",
                                    "typeString": "contract RToken"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_RToken_$9287",
                                    "typeString": "contract RToken"
                                  }
                                ],
                                "id": 7989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "19307:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 7991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19307:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7985,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9318,
                              "src": "19279:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$11470",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11433,
                            "src": "19279:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 7992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19279:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 7993,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7981,
                          "src": "19325:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19279:56:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f75676820616c6c6f77616e6365",
                        "id": 7995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19349:22:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b022b055ca598d53dea4e2d13bd2864e05a62be10c287a4dddfb651804a110cc",
                          "typeString": "literal_string \"Not enough allowance\""
                        },
                        "value": "Not enough allowance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b022b055ca598d53dea4e2d13bd2864e05a62be10c287a4dddfb651804a110cc",
                          "typeString": "literal_string \"Not enough allowance\""
                        }
                      ],
                      "id": 7984,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19258:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19258:123:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7997,
                  "nodeType": "ExpressionStatement",
                  "src": "19258:123:19"
                },
                {
                  "assignments": [
                    7999
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7999,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8082,
                      "src": "19392:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7998,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "19392:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8004,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8000,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "19418:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8003,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8001,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "19427:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 8002,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19427:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19418:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19392:46:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8008,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11485,
                              "src": "19508:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19508:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8011,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11553,
                                "src": "19528:4:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_RToken_$9287",
                                  "typeString": "contract RToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_RToken_$9287",
                                  "typeString": "contract RToken"
                                }
                              ],
                              "id": 8010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19520:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19520:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8013,
                            "name": "mintAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7981,
                            "src": "19535:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8006,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "19489:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 8007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11453,
                          "src": "19489:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19489:57:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207472616e73666572206661696c6564",
                        "id": 8015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19548:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        },
                        "value": "token transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        }
                      ],
                      "id": 8005,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19481:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19481:91:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8017,
                  "nodeType": "ExpressionStatement",
                  "src": "19481:91:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8022,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "19612:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              ],
                              "id": 8021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19604:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8023,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19604:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8024,
                            "name": "mintAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7981,
                            "src": "19618:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8019,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "19590:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 8020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11442,
                          "src": "19590:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19590:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e20617070726f7665206661696c6564",
                        "id": 8026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19631:22:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        },
                        "value": "token approve failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45b832371179ab7b8de6190064b3ffa7b095ac14dd306bfa6ef292fcfec463e4",
                          "typeString": "literal_string \"token approve failed\""
                        }
                      ],
                      "id": 8018,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19582:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19582:72:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8028,
                  "nodeType": "ExpressionStatement",
                  "src": "19582:72:19"
                },
                {
                  "assignments": [
                    8030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8030,
                      "name": "sOriginalCreated",
                      "nodeType": "VariableDeclaration",
                      "scope": 8082,
                      "src": "19664:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8029,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19664:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8035,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8033,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7981,
                        "src": "19712:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8031,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "19691:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 8032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "investUnderlying",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6118,
                      "src": "19691:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) external returns (uint256)"
                      }
                    },
                    "id": 8034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19691:32:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19664:59:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8036,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9314,
                      "src": "19782:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8039,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7981,
                          "src": "19812:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8037,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9314,
                          "src": "19796:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10694,
                        "src": "19796:15:19",
                        "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": 8040,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19796:27:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19782:41:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8042,
                  "nodeType": "ExpressionStatement",
                  "src": "19782:41:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8043,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7999,
                        "src": "19833:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 8045,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "19833:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8049,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7981,
                          "src": "19871:10:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8046,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7999,
                            "src": "19851:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8047,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "19851:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10694,
                        "src": "19851:19:19",
                        "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": 8050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19851:31:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19833:49:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8052,
                  "nodeType": "ExpressionStatement",
                  "src": "19833:49:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8053,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "19924:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8056,
                          "name": "sOriginalCreated",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8030,
                          "src": "19980:16:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8054,
                          "name": "savingAssetOrignalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9320,
                          "src": "19951:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10694,
                        "src": "19951:28:19",
                        "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": 8057,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19951:46:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19924:73:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8059,
                  "nodeType": "ExpressionStatement",
                  "src": "19924:73:19"
                },
                {
                  "assignments": [
                    8061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8061,
                      "name": "sInternalCreated",
                      "nodeType": "VariableDeclaration",
                      "scope": 8082,
                      "src": "20067:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8060,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20067:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8065,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8063,
                        "name": "sOriginalCreated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8030,
                        "src": "20115:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8062,
                      "name": "sOriginalToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9239,
                      "src": "20094:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20094:38:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20067:65:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8067,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "20158:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8068,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20158:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8069,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7981,
                        "src": "20170:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8070,
                        "name": "sInternalCreated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8061,
                        "src": "20182:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8066,
                      "name": "distributeLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8630,
                      "src": "20142:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 8071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20142:57:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8072,
                  "nodeType": "ExpressionStatement",
                  "src": "20142:57:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8075,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20232:1:19",
                            "subdenomination": null,
                            "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": 8074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20224:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20224:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8077,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "20236:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8078,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20236:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8079,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7981,
                        "src": "20248:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8073,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11461,
                      "src": "20215:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 8080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20215:44:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8081,
                  "nodeType": "EmitStatement",
                  "src": "20210:49:19"
                }
              ]
            },
            "documentation": "@dev Sender supplies assets into the market and receives rTokens in exchange\n@dev Invest into underlying assets immediately\n@param mintAmount The amount of the underlying asset to supply",
            "id": 8083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mintInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7981,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8083,
                  "src": "19219:18:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7980,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19219:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19218:20:19"
            },
            "returnParameters": {
              "id": 7983,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19248:0:19"
            },
            "scope": 9287,
            "src": "19197:1069:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8153,
              "nodeType": "Block",
              "src": "20659:660:19",
              "statements": [
                {
                  "assignments": [
                    8091
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8091,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8153,
                      "src": "20669:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8090,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "20669:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8096,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8092,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "20695:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8095,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8093,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "20704:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 8094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "20704:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20695:20:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20669:46:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8098,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "20733:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20748:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "20733:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52656465656d20616d6f756e742063616e6e6f74206265207a65726f",
                        "id": 8101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20751:30:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_acf1f5b4fc90142c95408a639c4dbf42a0972caed5524ba91bbcbcabf4fb96aa",
                          "typeString": "literal_string \"Redeem amount cannot be zero\""
                        },
                        "value": "Redeem amount cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_acf1f5b4fc90142c95408a639c4dbf42a0972caed5524ba91bbcbcabf4fb96aa",
                          "typeString": "literal_string \"Redeem amount cannot be zero\""
                        }
                      ],
                      "id": 8097,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "20725:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20725:57:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8103,
                  "nodeType": "ExpressionStatement",
                  "src": "20725:57:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8105,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "20813:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8106,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8091,
                            "src": "20829:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8107,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "20829:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20813:31:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f7567682062616c616e636520746f2072656465656d",
                        "id": 8109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20858:30:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6209def0ee1e007e83a5b6666a866519adb9ecb0ba9a52821eda4d26961fd830",
                          "typeString": "literal_string \"Not enough balance to redeem\""
                        },
                        "value": "Not enough balance to redeem"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6209def0ee1e007e83a5b6666a866519adb9ecb0ba9a52821eda4d26961fd830",
                          "typeString": "literal_string \"Not enough balance to redeem\""
                        }
                      ],
                      "id": 8104,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "20792:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20792:106:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8111,
                  "nodeType": "ExpressionStatement",
                  "src": "20792:106:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8113,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "20933:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8114,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20933:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8115,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8087,
                        "src": "20945:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8112,
                      "name": "redeemAndRecollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8696,
                      "src": "20909:23:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 8116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20909:49:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8117,
                  "nodeType": "ExpressionStatement",
                  "src": "20909:49:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8118,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8091,
                        "src": "21028:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 8120,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "21028:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8124,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "21066:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8121,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8091,
                            "src": "21046:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8122,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9396,
                          "src": "21046:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10710,
                        "src": "21046:19:19",
                        "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": 8125,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21046:33:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21028:51:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8127,
                  "nodeType": "ExpressionStatement",
                  "src": "21028:51:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8128,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9314,
                      "src": "21089:11:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8131,
                          "name": "redeemAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8087,
                          "src": "21119:12:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8129,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9314,
                          "src": "21103:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10710,
                        "src": "21103:15:19",
                        "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": 8132,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21103:29:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21089:43:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8134,
                  "nodeType": "ExpressionStatement",
                  "src": "21089:43:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8138,
                            "name": "redeemTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8085,
                            "src": "21201:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8139,
                            "name": "redeemAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8087,
                            "src": "21211:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8136,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9318,
                            "src": "21186:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$11470",
                              "typeString": "contract IERC20"
                            }
                          },
                          "id": 8137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11424,
                          "src": "21186:14:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 8140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21186:38:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207472616e73666572206661696c6564",
                        "id": 8141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21226:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        },
                        "value": "token transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e0e15db4c96bf1c66815fccf71879261558bd589036400d52d5b1e4b59c5f30",
                          "typeString": "literal_string \"token transfer failed\""
                        }
                      ],
                      "id": 8135,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21178:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21178:72:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8143,
                  "nodeType": "ExpressionStatement",
                  "src": "21178:72:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8145,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "21275:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21275:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21295:1:19",
                            "subdenomination": null,
                            "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": 8147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21287:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21287:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8150,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8087,
                        "src": "21299:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8144,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11461,
                      "src": "21266:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 8151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21266:46:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8152,
                  "nodeType": "EmitStatement",
                  "src": "21261:51:19"
                }
              ]
            },
            "documentation": "@notice Sender redeems rTokens in exchange for the underlying asset\n@dev Withdraw equal amount of initially supplied underlying assets\n@param redeemTo Destination address to send the redeemed tokens to\n@param redeemAmount The number of rTokens to redeem into underlying",
            "id": 8154,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8085,
                  "name": "redeemTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 8154,
                  "src": "20610:16:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20610:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8087,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8154,
                  "src": "20628:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20628:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20609:40:19"
            },
            "returnParameters": {
              "id": 8089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20659:0:19"
            },
            "scope": 9287,
            "src": "20586:733:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8286,
              "nodeType": "Block",
              "src": "21651:1325:19",
              "statements": [
                {
                  "assignments": [
                    8166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8166,
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "scope": 8286,
                      "src": "21661:9:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8165,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21661:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8167,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21661:9:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8169,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8157,
                            "src": "21689:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 8170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21689:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21709:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "21689:21:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206861743a206174206c65617374206f6e6520726563697069656e74",
                        "id": 8173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21712:37:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc0ddad9b29a71f9a6909224453564500ee767a44f06548943d8dc6c353f8e42",
                          "typeString": "literal_string \"Invalid hat: at least one recipient\""
                        },
                        "value": "Invalid hat: at least one recipient"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc0ddad9b29a71f9a6909224453564500ee767a44f06548943d8dc6c353f8e42",
                          "typeString": "literal_string \"Invalid hat: at least one recipient\""
                        }
                      ],
                      "id": 8168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21681:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21681:69:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8175,
                  "nodeType": "ExpressionStatement",
                  "src": "21681:69:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8177,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8157,
                            "src": "21768:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 8178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21768:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8179,
                          "name": "MAX_NUM_HAT_RECIPIENTS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6698,
                          "src": "21789:22:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21768:43:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c696c64206861743a206d6178696d756d206e756d626572206f6620726563697069656e74732072656163686564",
                        "id": 8181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21813:52:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bed33f2d8113f62fedec8838832829078f28c97d91080dccf10e9d8410a5c5c3",
                          "typeString": "literal_string \"Invalild hat: maximum number of recipients reached\""
                        },
                        "value": "Invalild hat: maximum number of recipients reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bed33f2d8113f62fedec8838832829078f28c97d91080dccf10e9d8410a5c5c3",
                          "typeString": "literal_string \"Invalild hat: maximum number of recipients reached\""
                        }
                      ],
                      "id": 8176,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21760:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21760:106:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8183,
                  "nodeType": "ExpressionStatement",
                  "src": "21760:106:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8185,
                            "name": "recipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8157,
                            "src": "21897:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 8186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21897:17:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8187,
                            "name": "proportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8160,
                            "src": "21918:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "id": 8188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21918:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21897:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206861743a206c656e677468206e6f74206d61746368696e67",
                        "id": 8190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21950:34:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2bff1c469384c5f5cf75f6141d542ce3bde49a9b59bc1b7739e1850c1d33b927",
                          "typeString": "literal_string \"Invalid hat: length not matching\""
                        },
                        "value": "Invalid hat: length not matching"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2bff1c469384c5f5cf75f6141d542ce3bde49a9b59bc1b7739e1850c1d33b927",
                          "typeString": "literal_string \"Invalid hat: length not matching\""
                        }
                      ],
                      "id": 8184,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "21876:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21876:118:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8192,
                  "nodeType": "ExpressionStatement",
                  "src": "21876:118:19"
                },
                {
                  "assignments": [
                    8194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8194,
                      "name": "totalProportions",
                      "nodeType": "VariableDeclaration",
                      "scope": 8286,
                      "src": "22153:24:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8193,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22153:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8196,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 8195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22180:1:19",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22153:28:19"
                },
                {
                  "body": {
                    "id": 8236,
                    "nodeType": "Block",
                    "src": "22231:360:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "id": 8213,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8209,
                                  "name": "proportions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8160,
                                  "src": "22270:11:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 8211,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8210,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8166,
                                  "src": "22282:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22270:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 8212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "22287:1:19",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "22270:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964206861743a2070726f706f7274696f6e2073686f756c64206265206c6172676572207468616e2030",
                              "id": 8214,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22306:49:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c990278af974d965462fe70f985e8409cb7daed0126bbcb213475d89f5a8fd78",
                                "typeString": "literal_string \"Invalid hat: proportion should be larger than 0\""
                              },
                              "value": "Invalid hat: proportion should be larger than 0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c990278af974d965462fe70f985e8409cb7daed0126bbcb213475d89f5a8fd78",
                                "typeString": "literal_string \"Invalid hat: proportion should be larger than 0\""
                              }
                            ],
                            "id": 8208,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              11488,
                              11489
                            ],
                            "referencedDeclaration": 11489,
                            "src": "22245:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22245:124:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8216,
                        "nodeType": "ExpressionStatement",
                        "src": "22245:124:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 8224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8218,
                                  "name": "recipients",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8157,
                                  "src": "22391:10:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 8220,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8219,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8166,
                                  "src": "22402:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22391:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 8222,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22416:1:19",
                                    "subdenomination": null,
                                    "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": 8221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "22408:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 8223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22408:10:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "22391:27:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964206861743a20726563697069656e742073686f756c64206e6f7420626520307830",
                              "id": 8225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22420:42:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f6ab34497a3e5568793d416e59cf3a35d33911c6a2f8b9e8aa1d8e53f346806",
                                "typeString": "literal_string \"Invalid hat: recipient should not be 0x0\""
                              },
                              "value": "Invalid hat: recipient should not be 0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f6ab34497a3e5568793d416e59cf3a35d33911c6a2f8b9e8aa1d8e53f346806",
                                "typeString": "literal_string \"Invalid hat: recipient should not be 0x0\""
                              }
                            ],
                            "id": 8217,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              11488,
                              11489
                            ],
                            "referencedDeclaration": 11489,
                            "src": "22383:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22383:80:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8227,
                        "nodeType": "ExpressionStatement",
                        "src": "22383:80:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8228,
                            "name": "totalProportions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8194,
                            "src": "22537:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8230,
                                  "name": "proportions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8160,
                                  "src": "22565:11:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 8232,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 8231,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8166,
                                  "src": "22577:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "22565:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 8229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22557:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 8233,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22557:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22537:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8235,
                        "nodeType": "ExpressionStatement",
                        "src": "22537:43:19"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8201,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8166,
                      "src": "22203:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8202,
                        "name": "recipients",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8157,
                        "src": "22207:10:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 8203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22207:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22203:21:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8237,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8197,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22196:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22200:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "22196:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8200,
                    "nodeType": "ExpressionStatement",
                    "src": "22196:5:19"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "22226:3:19",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8205,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22228:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8207,
                    "nodeType": "ExpressionStatement",
                    "src": "22226:3:19"
                  },
                  "nodeType": "ForStatement",
                  "src": "22191:400:19"
                },
                {
                  "body": {
                    "id": 8268,
                    "nodeType": "Block",
                    "src": "22641:235:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 8249,
                              "name": "proportions",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8160,
                              "src": "22655:11:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            "id": 8251,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 8250,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8166,
                              "src": "22667:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "22655:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8264,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8261,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 8254,
                                              "name": "proportions",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8160,
                                              "src": "22769:11:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                                "typeString": "uint32[] memory"
                                              }
                                            },
                                            "id": 8256,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8255,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8166,
                                              "src": "22781:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "22769:14:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "id": 8253,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "22761:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 8257,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "22761:23:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 8259,
                                            "name": "PROPORTION_BASE",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6695,
                                            "src": "22795:15:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "id": 8258,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "22787:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 8260,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "22787:24:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22761:50:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 8262,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "22760:52:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8263,
                                  "name": "totalProportions",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8194,
                                  "src": "22835:16:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "22760:91:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22672:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              },
                              "typeName": "uint32"
                            },
                            "id": 8265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22672:193:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "22655:210:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 8267,
                        "nodeType": "ExpressionStatement",
                        "src": "22655:210:19"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8242,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8166,
                      "src": "22612:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8243,
                        "name": "proportions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8160,
                        "src": "22616:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 8244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22616:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22612:22:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8269,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 8238,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22605:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22609:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "22605:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8241,
                    "nodeType": "ExpressionStatement",
                    "src": "22605:5:19"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 8247,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "22636:3:19",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 8246,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8166,
                        "src": "22638:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 8248,
                    "nodeType": "ExpressionStatement",
                    "src": "22636:3:19"
                  },
                  "nodeType": "ForStatement",
                  "src": "22600:276:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8270,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8163,
                      "src": "22886:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 8279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8274,
                                "name": "recipients",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8157,
                                "src": "22908:10:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8275,
                                "name": "proportions",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8160,
                                "src": "22920:11:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                  "typeString": "uint32[] memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                  "typeString": "uint32[] memory"
                                }
                              ],
                              "id": 8273,
                              "name": "Hat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9392,
                              "src": "22904:3:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Hat_$9392_storage_ptr_$",
                                "typeString": "type(struct RTokenStructs.Hat storage pointer)"
                              }
                            },
                            "id": 8276,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22904:28:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Hat_$9392_memory",
                              "typeString": "struct RTokenStructs.Hat memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Hat_$9392_memory",
                              "typeString": "struct RTokenStructs.Hat memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8271,
                            "name": "hats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9331,
                            "src": "22894:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                              "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                            }
                          },
                          "id": 8272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "push",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "22894:9:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Hat_$9392_storage_$returns$_t_uint256_$",
                            "typeString": "function (struct RTokenStructs.Hat storage ref) returns (uint256)"
                          }
                        },
                        "id": 8277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22894:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 8278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22936:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "22894:43:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22886:51:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8281,
                  "nodeType": "ExpressionStatement",
                  "src": "22886:51:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8283,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8163,
                        "src": "22963:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8282,
                      "name": "HatCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6381,
                      "src": "22952:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 8284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22952:17:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8285,
                  "nodeType": "EmitStatement",
                  "src": "22947:22:19"
                }
              ]
            },
            "documentation": "@dev Create a new Hat\n@param recipients List of beneficial recipients\n   * @param proportions Relative proportions of benefits received by the recipients",
            "id": 8287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createHatInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8157,
                  "name": "recipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 8287,
                  "src": "21547:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8155,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "21547:7:19",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 8156,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21547:9:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8160,
                  "name": "proportions",
                  "nodeType": "VariableDeclaration",
                  "scope": 8287,
                  "src": "21584:27:19",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 8158,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "21584:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 8159,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21584:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21537:80:19"
            },
            "returnParameters": {
              "id": 8164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8163,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 8287,
                  "src": "21636:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21636:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21635:15:19"
            },
            "scope": 9287,
            "src": "21511:1465:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8381,
              "nodeType": "Block",
              "src": "23175:723:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8295,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23193:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 8296,
                            "name": "SELF_HAT_ID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6692,
                            "src": "23202:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23193:20:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8298,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23217:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8299,
                              "name": "hats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9331,
                              "src": "23225:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                                "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                              }
                            },
                            "id": 8300,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23225:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23217:19:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "23193:43:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c696420686174204944",
                        "id": 8303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23238:16:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2fead7b7bf176463541cf441aa983de6c382e26ffaefb815e9cf4b5166ad0de3",
                          "typeString": "literal_string \"Invalid hat ID\""
                        },
                        "value": "Invalid hat ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2fead7b7bf176463541cf441aa983de6c382e26ffaefb815e9cf4b5166ad0de3",
                          "typeString": "literal_string \"Invalid hat ID\""
                        }
                      ],
                      "id": 8294,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "23185:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23185:70:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8305,
                  "nodeType": "ExpressionStatement",
                  "src": "23185:70:19"
                },
                {
                  "assignments": [
                    8307
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8307,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23265:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8306,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "23265:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8311,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8308,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "23291:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8310,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8309,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8289,
                      "src": "23300:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23291:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23265:41:19"
                },
                {
                  "assignments": [
                    8313
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8313,
                      "name": "oldHatID",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23316:16:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8312,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23316:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8316,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8314,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8307,
                      "src": "23335:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account storage pointer"
                      }
                    },
                    "id": 8315,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "hatID",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9394,
                    "src": "23335:13:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23316:32:19"
                },
                {
                  "assignments": [
                    8318
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8318,
                      "name": "oldHatStats",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23358:34:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8317,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "23358:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8322,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8319,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "23395:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 8321,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8320,
                      "name": "oldHatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8313,
                      "src": "23404:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23395:18:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23358:55:19"
                },
                {
                  "assignments": [
                    8324
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8324,
                      "name": "newHatStats",
                      "nodeType": "VariableDeclaration",
                      "scope": 8381,
                      "src": "23423:34:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8323,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "23423:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8328,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8325,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "23460:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 8327,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8326,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8291,
                      "src": "23469:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "23460:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23423:52:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8329,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8307,
                        "src": "23489:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 8330,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9396,
                      "src": "23489:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8331,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23507:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23489:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8361,
                    "nodeType": "Block",
                    "src": "23727:46:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8355,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8307,
                              "src": "23741:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8357,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hatID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9394,
                            "src": "23741:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8358,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23757:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23741:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8360,
                        "nodeType": "ExpressionStatement",
                        "src": "23741:21:19"
                      }
                    ]
                  },
                  "id": 8362,
                  "nodeType": "IfStatement",
                  "src": "23485:288:19",
                  "trueBody": {
                    "id": 8354,
                    "nodeType": "Block",
                    "src": "23510:211:19",
                    "statements": [
                      {
                        "assignments": [
                          8334
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8334,
                            "name": "sInternalEstimated",
                            "nodeType": "VariableDeclaration",
                            "scope": 8354,
                            "src": "23524:26:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8333,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "23524:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8340,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8336,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8289,
                              "src": "23579:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8337,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8307,
                                "src": "23586:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8338,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9396,
                              "src": "23586:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8335,
                            "name": "estimateAndRecollectLoans",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8658,
                            "src": "23553:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) returns (uint256)"
                            }
                          },
                          "id": 8339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23553:49:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23524:78:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8341,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8307,
                              "src": "23616:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8343,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hatID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9394,
                            "src": "23616:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8344,
                            "name": "hatID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8291,
                            "src": "23632:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23616:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8346,
                        "nodeType": "ExpressionStatement",
                        "src": "23616:21:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8348,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8289,
                              "src": "23667:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8349,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8307,
                                "src": "23674:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8350,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9396,
                              "src": "23674:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8351,
                              "name": "sInternalEstimated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8334,
                              "src": "23691:18:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8347,
                            "name": "distributeLoans",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8630,
                            "src": "23651:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 8352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23651:59:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8353,
                        "nodeType": "ExpressionStatement",
                        "src": "23651:59:19"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8363,
                        "name": "oldHatStats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8318,
                        "src": "23782:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 8365,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "23782:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 8366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23806:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "23782:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8368,
                  "nodeType": "ExpressionStatement",
                  "src": "23782:25:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 8369,
                        "name": "newHatStats",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8324,
                        "src": "23817:11:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                        }
                      },
                      "id": 8371,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "useCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9380,
                      "src": "23817:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 8372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23841:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "23817:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8374,
                  "nodeType": "ExpressionStatement",
                  "src": "23817:25:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8376,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8289,
                        "src": "23868:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8377,
                        "name": "oldHatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8313,
                        "src": "23875:8:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8378,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8291,
                        "src": "23885:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8375,
                      "name": "HatChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6389,
                      "src": "23857:10:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 8379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23857:34:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8380,
                  "nodeType": "EmitStatement",
                  "src": "23852:39:19"
                }
              ]
            },
            "documentation": "@dev Change the hat for `owner`\n@param owner Account owner\n@param hatID The id of the Hat",
            "id": 8382,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "changeHatInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8289,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8382,
                  "src": "23136:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23136:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8291,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 8382,
                  "src": "23151:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23151:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23135:30:19"
            },
            "returnParameters": {
              "id": 8293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23175:0:19"
            },
            "scope": 9287,
            "src": "23109:789:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8418,
              "nodeType": "Block",
              "src": "24083:403:19",
              "statements": [
                {
                  "assignments": [
                    8390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8390,
                      "name": "rGross",
                      "nodeType": "VariableDeclaration",
                      "scope": 8418,
                      "src": "24093:14:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8389,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24093:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8395,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8392,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8384,
                          "src": "24123:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8393,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sInternalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9406,
                        "src": "24123:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8391,
                      "name": "sInternalToR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9187,
                      "src": "24110:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24110:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24093:54:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8396,
                      "name": "rGross",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8390,
                      "src": "24161:6:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8400,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8384,
                                "src": "24189:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8401,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rInterest",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9398,
                              "src": "24189:17:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8397,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8384,
                                "src": "24171:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8398,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lDebt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9404,
                              "src": "24171:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 8399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10694,
                            "src": "24171:17:19",
                            "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": 8402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24171:36:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 8403,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24170:38:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24161:47:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8416,
                    "nodeType": "Block",
                    "src": "24371:109:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24468:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 8388,
                        "id": 8415,
                        "nodeType": "Return",
                        "src": "24461:8:19"
                      }
                    ]
                  },
                  "id": 8417,
                  "nodeType": "IfStatement",
                  "src": "24157:323:19",
                  "trueBody": {
                    "id": 8413,
                    "nodeType": "Block",
                    "src": "24210:155:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 8405,
                              "name": "rGross",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8390,
                              "src": "24312:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8406,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8384,
                                "src": "24321:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8407,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lDebt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9404,
                              "src": "24321:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24312:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8409,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8384,
                              "src": "24337:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8410,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9398,
                            "src": "24337:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24312:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 8388,
                        "id": 8412,
                        "nodeType": "Return",
                        "src": "24305:49:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Get interest payable of the account",
            "id": 8419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getInterestPayableOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8384,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 8419,
                  "src": "23998:23:19",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                    "typeString": "struct RTokenStructs.Account"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8383,
                    "name": "Account",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9407,
                    "src": "23998:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                      "typeString": "struct RTokenStructs.Account"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23997:25:19"
            },
            "returnParameters": {
              "id": 8388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8387,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8419,
                  "src": "24070:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8386,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24070:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24069:9:19"
            },
            "scope": 9287,
            "src": "23968:518:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8629,
              "nodeType": "Block",
              "src": "25126:2168:19",
              "statements": [
                {
                  "assignments": [
                    8429
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8429,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8629,
                      "src": "25136:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8428,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "25136:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8433,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8430,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "25162:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8432,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8431,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8421,
                      "src": "25171:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25162:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25136:41:19"
                },
                {
                  "assignments": [
                    8435
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8435,
                      "name": "hat",
                      "nodeType": "VariableDeclaration",
                      "scope": 8629,
                      "src": "25187:15:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                        "typeString": "struct RTokenStructs.Hat"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8434,
                        "name": "Hat",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9392,
                        "src": "25187:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                          "typeString": "struct RTokenStructs.Hat"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8446,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8436,
                      "name": "hats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9331,
                      "src": "25205:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                        "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                      }
                    },
                    "id": 8445,
                    "indexExpression": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8437,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8429,
                            "src": "25210:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8438,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hatID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9394,
                          "src": "25210:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8439,
                          "name": "SELF_HAT_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6692,
                          "src": "25227:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25210:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8442,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8429,
                          "src": "25269:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "25269:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "25210:72:19",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25253:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "25205:78:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Hat_$9392_storage",
                      "typeString": "struct RTokenStructs.Hat storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25187:96:19"
                },
                {
                  "assignments": [
                    8448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8448,
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "scope": 8629,
                      "src": "25293:9:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8447,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25293:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8449,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25293:9:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8450,
                          "name": "hat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8435,
                          "src": "25316:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                            "typeString": "struct RTokenStructs.Hat storage pointer"
                          }
                        },
                        "id": 8451,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipients",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9388,
                        "src": "25316:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8452,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25316:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25340:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "25316:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8627,
                    "nodeType": "Block",
                    "src": "26950:338:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8605,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8597,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8429,
                              "src": "27042:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8599,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "lDebt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9404,
                            "src": "27042:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8603,
                                "name": "rAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8423,
                                "src": "27076:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8600,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8429,
                                  "src": "27058:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8601,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lDebt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9404,
                                "src": "27058:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8602,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "27058:17:19",
                              "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": 8604,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27058:26:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27042:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8606,
                        "nodeType": "ExpressionStatement",
                        "src": "27042:42:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8607,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8429,
                              "src": "27098:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8609,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sInternalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9406,
                            "src": "27098:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8613,
                                "name": "sInternalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8425,
                                "src": "27169:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8610,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8429,
                                  "src": "27124:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8611,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sInternalAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9406,
                                "src": "27124:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8612,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "27124:44:19",
                              "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": 8614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27124:61:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27098:87:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8616,
                        "nodeType": "ExpressionStatement",
                        "src": "27098:87:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8618,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8421,
                              "src": "27217:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8619,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8421,
                              "src": "27224:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8620,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8429,
                                "src": "27231:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8621,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "27231:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "74727565",
                              "id": 8622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27246:4:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "argumentTypes": null,
                              "id": 8623,
                              "name": "rAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8423,
                              "src": "27252:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8624,
                              "name": "sInternalAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8425,
                              "src": "27261:15:19",
                              "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_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8617,
                            "name": "_updateLoanStats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9133,
                            "src": "27200:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 8625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27200:77:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8626,
                        "nodeType": "ExpressionStatement",
                        "src": "27200:77:19"
                      }
                    ]
                  },
                  "id": 8628,
                  "nodeType": "IfStatement",
                  "src": "25312:1976:19",
                  "trueBody": {
                    "id": 8596,
                    "nodeType": "Block",
                    "src": "25343:1601:19",
                    "statements": [
                      {
                        "assignments": [
                          8456
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8456,
                            "name": "rLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8596,
                            "src": "25357:13:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8455,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25357:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8458,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 8457,
                          "name": "rAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8423,
                          "src": "25373:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25357:23:19"
                      },
                      {
                        "assignments": [
                          8460
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8460,
                            "name": "sInternalLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8596,
                            "src": "25394:21:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8459,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25394:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8462,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 8461,
                          "name": "sInternalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8425,
                          "src": "25418:15:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25394:39:19"
                      },
                      {
                        "body": {
                          "id": 8594,
                          "nodeType": "Block",
                          "src": "25492:1442:19",
                          "statements": [
                            {
                              "assignments": [
                                8476
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8476,
                                  "name": "recipientAccount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "25510:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "storage",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 8475,
                                    "name": "Account",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 9407,
                                    "src": "25510:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8483,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8477,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "25545:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 8482,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8478,
                                      "name": "hat",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8435,
                                      "src": "25554:3:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                        "typeString": "struct RTokenStructs.Hat storage pointer"
                                      }
                                    },
                                    "id": 8479,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9388,
                                    "src": "25554:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 8481,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8480,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8448,
                                    "src": "25569:1:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "25554:17:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25545:27:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "25510:62:19"
                            },
                            {
                              "assignments": [
                                8485
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8485,
                                  "name": "isLastRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "25590:20:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 8484,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "25590:4:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8494,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8493,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8486,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8448,
                                  "src": "25613:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8491,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8487,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8435,
                                            "src": "25619:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8488,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "proportions",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9391,
                                          "src": "25619:15:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                            "typeString": "uint32[] storage ref"
                                          }
                                        },
                                        "id": 8489,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "25619:22:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8490,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "25644:1:19",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "25619:26:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 8492,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25618:28:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25613:33:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "25590:56:19"
                            },
                            {
                              "assignments": [
                                8496
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8496,
                                  "name": "lDebtRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "25727:22:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8495,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "25727:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8510,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8497,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8485,
                                  "src": "25752:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8501,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8435,
                                                "src": "25831:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8502,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "25831:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8504,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8503,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8448,
                                              "src": "25847:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "25831:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8499,
                                            "name": "rAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8423,
                                            "src": "25819:7:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8500,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "25819:11:19",
                                          "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": 8505,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25819:31:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8506,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "25818:33:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8507,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "25854:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "25818:51:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "25752:117:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8498,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8456,
                                  "src": "25790:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "25727:142:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8529,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8511,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8429,
                                      "src": "25943:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8517,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "lRecipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9402,
                                    "src": "25943:19:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8518,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8513,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8435,
                                        "src": "25963:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8514,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "25963:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8516,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8515,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8448,
                                      "src": "25978:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "25963:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "25943:38:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8527,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8496,
                                      "src": "26048:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8519,
                                          "name": "account",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8429,
                                          "src": "25984:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                            "typeString": "struct RTokenStructs.Account storage pointer"
                                          }
                                        },
                                        "id": 8520,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "lRecipients",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 9402,
                                        "src": "25984:19:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 8525,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8521,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8435,
                                            "src": "26004:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8522,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "recipients",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9388,
                                          "src": "26004:14:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                            "typeString": "address[] storage ref"
                                          }
                                        },
                                        "id": 8524,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8523,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8448,
                                          "src": "26019:1:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "26004:17:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "25984:38:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8526,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 10694,
                                    "src": "25984:63:19",
                                    "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": 8528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25984:79:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25943:120:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8530,
                              "nodeType": "ExpressionStatement",
                              "src": "25943:120:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8539,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8531,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8476,
                                    "src": "26081:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8533,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lDebt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9404,
                                  "src": "26081:22:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8537,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8496,
                                      "src": "26154:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8534,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8476,
                                        "src": "26106:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8535,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "lDebt",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9404,
                                      "src": "26106:22:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8536,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 10694,
                                    "src": "26106:47:19",
                                    "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": 8538,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26106:63:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26081:88:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8540,
                              "nodeType": "ExpressionStatement",
                              "src": "26081:88:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8541,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8456,
                                  "src": "26234:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8543,
                                      "name": "rLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8456,
                                      "src": "26252:5:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8544,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8496,
                                      "src": "26259:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8542,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "26242:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8545,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26242:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26234:40:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8547,
                              "nodeType": "ExpressionStatement",
                              "src": "26234:40:19"
                            },
                            {
                              "assignments": [
                                8549
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8549,
                                  "name": "sInternalAmountRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8594,
                                  "src": "26360:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8548,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "26360:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8563,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8550,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8485,
                                  "src": "26395:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8561,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8554,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8435,
                                                "src": "26490:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8555,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "26490:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8557,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8556,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8448,
                                              "src": "26506:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "26490:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8552,
                                            "name": "sInternalAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8425,
                                            "src": "26470:15:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8553,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "26470:19:19",
                                          "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": 8558,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26470:39:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8559,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26469:41:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8560,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "26513:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "26469:59:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8562,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "26395:133:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8551,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8460,
                                  "src": "26433:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "26360:168:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8572,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8564,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8476,
                                    "src": "26546:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8566,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "sInternalAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9406,
                                  "src": "26546:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8570,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8549,
                                      "src": "26639:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8567,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8476,
                                        "src": "26581:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8568,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sInternalAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9406,
                                      "src": "26581:32:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 8569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 10694,
                                    "src": "26581:57:19",
                                    "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": 8571,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26581:83:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26546:118:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8573,
                              "nodeType": "ExpressionStatement",
                              "src": "26546:118:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8579,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8574,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8460,
                                  "src": "26729:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8576,
                                      "name": "sInternalLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8460,
                                      "src": "26755:13:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8577,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8549,
                                      "src": "26770:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8575,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "26745:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8578,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "26745:50:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26729:66:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8580,
                              "nodeType": "ExpressionStatement",
                              "src": "26729:66:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8582,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8421,
                                    "src": "26831:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8583,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8435,
                                        "src": "26838:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8584,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "26838:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8586,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8585,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8448,
                                      "src": "26853:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "26838:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8587,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8429,
                                      "src": "26857:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8588,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "hatID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9394,
                                    "src": "26857:13:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "74727565",
                                    "id": 8589,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26872:4:19",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8590,
                                    "name": "lDebtRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8496,
                                    "src": "26878:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8591,
                                    "name": "sInternalAmountRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8549,
                                    "src": "26894:24:19",
                                    "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_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8581,
                                  "name": "_updateLoanStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9133,
                                  "src": "26814:16:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                                  }
                                },
                                "id": 8592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26814:105:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8593,
                              "nodeType": "ExpressionStatement",
                              "src": "26814:105:19"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8467,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8448,
                            "src": "25459:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8468,
                                "name": "hat",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8435,
                                "src": "25463:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                }
                              },
                              "id": 8469,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "proportions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9391,
                              "src": "25463:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                "typeString": "uint32[] storage ref"
                              }
                            },
                            "id": 8470,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "25463:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25459:26:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8595,
                        "initializationExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8465,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8463,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8448,
                              "src": "25452:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25456:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "25452:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8466,
                          "nodeType": "ExpressionStatement",
                          "src": "25452:5:19"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "25487:3:19",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 8472,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8448,
                              "src": "25489:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8474,
                          "nodeType": "ExpressionStatement",
                          "src": "25487:3:19"
                        },
                        "nodeType": "ForStatement",
                        "src": "25447:1487:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Distribute the incoming tokens to the recipients as loans.\n     The tokens are immediately invested into the saving strategy and\n     add to the sAmount of the recipient account.\n     Recipient also inherits the owner's hat if it does already have one.\n@param owner Owner account address\n@param rAmount rToken amount being loaned to the recipients\n@param sInternalAmount Amount of saving assets (internal amount) being given to the recipients",
            "id": 8630,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8421,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8630,
                  "src": "25039:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8420,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25039:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8423,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8630,
                  "src": "25062:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25062:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8630,
                  "src": "25087:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25087:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25029:87:19"
            },
            "returnParameters": {
              "id": 8427,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25126:0:19"
            },
            "scope": 9287,
            "src": "25005:2289:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8657,
              "nodeType": "Block",
              "src": "27846:216:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8640,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "27917:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          },
                          "id": 8641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accrueInterest",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6111,
                          "src": "27917:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_bool_$",
                            "typeString": "function () external returns (bool)"
                          }
                        },
                        "id": 8642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27917:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "616363727565496e746572657374206661696c6564",
                        "id": 8643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "27939:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        },
                        "value": "accrueInterest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        }
                      ],
                      "id": 8639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "27909:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27909:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8645,
                  "nodeType": "ExpressionStatement",
                  "src": "27909:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8646,
                      "name": "sInternalEstimated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8637,
                      "src": "27973:18:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8648,
                          "name": "rAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8634,
                          "src": "28007:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8647,
                        "name": "rToSInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9205,
                        "src": "27994:12:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 8649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27994:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27973:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8651,
                  "nodeType": "ExpressionStatement",
                  "src": "27973:42:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8653,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8632,
                        "src": "28040:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8654,
                        "name": "rAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8634,
                        "src": "28047:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8652,
                      "name": "recollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8972,
                      "src": "28025:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 8655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28025:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8656,
                  "nodeType": "ExpressionStatement",
                  "src": "28025:30:19"
                }
              ]
            },
            "documentation": "@dev Recollect loans from the recipients for further distribution\n     without actually redeeming the saving assets\n@param owner Owner account address\n@param rAmount rToken amount neeeds to be recollected from the recipients\n               by giving back estimated amount of saving assets\n@return Estimated amount of saving assets (internal) needs to recollected",
            "id": 8658,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "estimateAndRecollectLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8632,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "27756:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8631,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27756:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8634,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "27771:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27771:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27755:32:19"
            },
            "returnParameters": {
              "id": 8638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8637,
                  "name": "sInternalEstimated",
                  "nodeType": "VariableDeclaration",
                  "scope": 8658,
                  "src": "27814:26:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8636,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27814:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27813:28:19"
            },
            "scope": 9287,
            "src": "27721:341:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8695,
              "nodeType": "Block",
              "src": "28566:375:19",
              "statements": [
                {
                  "assignments": [
                    8666
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8666,
                      "name": "sOriginalBurned",
                      "nodeType": "VariableDeclaration",
                      "scope": 8695,
                      "src": "28576:23:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8665,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28576:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8671,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8669,
                        "name": "rAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8662,
                        "src": "28623:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8667,
                        "name": "ias",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9316,
                        "src": "28602:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                          "typeString": "contract IAllocationStrategy"
                        }
                      },
                      "id": 8668,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemUnderlying",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6125,
                      "src": "28602:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) external returns (uint256)"
                      }
                    },
                    "id": 8670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28602:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28576:55:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8673,
                        "name": "sOriginalBurned",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8666,
                        "src": "28662:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8672,
                      "name": "sOriginalToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9239,
                      "src": "28641:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28641:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8675,
                  "nodeType": "ExpressionStatement",
                  "src": "28641:37:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8677,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8660,
                        "src": "28703:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8678,
                        "name": "rAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8662,
                        "src": "28710:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8676,
                      "name": "recollectLoans",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8972,
                      "src": "28688:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 8679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28688:30:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8680,
                  "nodeType": "ExpressionStatement",
                  "src": "28688:30:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8681,
                      "name": "savingAssetOrignalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9320,
                      "src": "28764:24:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8682,
                      "name": "sOriginalBurned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8666,
                      "src": "28791:15:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28764:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8693,
                    "nodeType": "Block",
                    "src": "28882:53:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8689,
                            "name": "savingAssetOrignalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9320,
                            "src": "28896:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 8690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "28923:1:19",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "28896:28:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8692,
                        "nodeType": "ExpressionStatement",
                        "src": "28896:28:19"
                      }
                    ]
                  },
                  "id": 8694,
                  "nodeType": "IfStatement",
                  "src": "28760:175:19",
                  "trueBody": {
                    "id": 8688,
                    "nodeType": "Block",
                    "src": "28808:68:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8684,
                            "name": "savingAssetOrignalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9320,
                            "src": "28822:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8685,
                            "name": "sOriginalBurned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8666,
                            "src": "28850:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28822:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8687,
                        "nodeType": "ExpressionStatement",
                        "src": "28822:43:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Recollect loans from the recipients for further distribution\n     by redeeming the saving assets in `rAmount`\n@param owner Owner account address\n@param rAmount rToken amount neeeds to be recollected from the recipients\n               by redeeming equivalent value of the saving assets\n@return Amount of saving assets redeemed for rAmount of tokens.",
            "id": 8696,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemAndRecollectLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8660,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8696,
                  "src": "28513:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8659,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "28513:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8662,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8696,
                  "src": "28528:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8661,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28528:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28512:32:19"
            },
            "returnParameters": {
              "id": 8664,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28566:0:19"
            },
            "scope": 9287,
            "src": "28480:461:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8971,
              "nodeType": "Block",
              "src": "29213:3239:19",
              "statements": [
                {
                  "assignments": [
                    8704
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8704,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29223:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8703,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "29223:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8708,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8705,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "29249:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8707,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8706,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8698,
                      "src": "29258:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29249:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29223:41:19"
                },
                {
                  "assignments": [
                    8710
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8710,
                      "name": "hat",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29274:15:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                        "typeString": "struct RTokenStructs.Hat"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8709,
                        "name": "Hat",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9392,
                        "src": "29274:3:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                          "typeString": "struct RTokenStructs.Hat"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8721,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8711,
                      "name": "hats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9331,
                      "src": "29292:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Hat_$9392_storage_$dyn_storage",
                        "typeString": "struct RTokenStructs.Hat storage ref[] storage ref"
                      }
                    },
                    "id": 8720,
                    "indexExpression": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8715,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8712,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8704,
                            "src": "29297:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                              "typeString": "struct RTokenStructs.Account storage pointer"
                            }
                          },
                          "id": 8713,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hatID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 9394,
                          "src": "29297:13:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8714,
                          "name": "SELF_HAT_ID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6692,
                          "src": "29314:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "29297:28:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8717,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8704,
                          "src": "29356:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8718,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hatID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9394,
                        "src": "29356:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "29297:72:19",
                      "trueExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8716,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29340:1:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29292:78:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Hat_$9392_storage",
                      "typeString": "struct RTokenStructs.Hat storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29274:96:19"
                },
                {
                  "assignments": [
                    8723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8723,
                      "name": "debtToCollect",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29489:21:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8722,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29489:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8730,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8725,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8704,
                          "src": "29523:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8726,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9396,
                        "src": "29523:15:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8727,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8704,
                          "src": "29540:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 8728,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rInterest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9398,
                        "src": "29540:17:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8724,
                      "name": "gentleSub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9169,
                      "src": "29513:9:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29513:45:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29489:69:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8731,
                      "name": "debtToCollect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8723,
                      "src": "29628:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8732,
                      "name": "rAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8700,
                      "src": "29644:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29628:23:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8739,
                  "nodeType": "IfStatement",
                  "src": "29624:77:19",
                  "trueBody": {
                    "id": 8738,
                    "nodeType": "Block",
                    "src": "29653:48:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8734,
                            "name": "debtToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8723,
                            "src": "29667:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8735,
                            "name": "rAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8700,
                            "src": "29683:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29667:23:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8737,
                        "nodeType": "ExpressionStatement",
                        "src": "29667:23:19"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    8741
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8741,
                      "name": "sInternalToCollect",
                      "nodeType": "VariableDeclaration",
                      "scope": 8971,
                      "src": "29710:26:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8740,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29710:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8745,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8743,
                        "name": "debtToCollect",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8723,
                        "src": "29752:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8742,
                      "name": "rToSInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9205,
                      "src": "29739:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 8744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29739:27:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29710:56:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8746,
                          "name": "hat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8710,
                          "src": "29780:3:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                            "typeString": "struct RTokenStructs.Hat storage pointer"
                          }
                        },
                        "id": 8747,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "recipients",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9388,
                        "src": "29780:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 8748,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29780:21:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29804:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "29780:25:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8942,
                    "nodeType": "Block",
                    "src": "31650:467:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8908,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "31784:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8910,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "lDebt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9404,
                            "src": "31784:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8912,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8704,
                                  "src": "31810:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8913,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lDebt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9404,
                                "src": "31810:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8914,
                                "name": "debtToCollect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8723,
                                "src": "31825:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8911,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "31800:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 8915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31800:39:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31784:55:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8917,
                        "nodeType": "ExpressionStatement",
                        "src": "31784:55:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8918,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "31885:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8920,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sInternalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9406,
                            "src": "31885:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8922,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8704,
                                  "src": "31921:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8923,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sInternalAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9406,
                                "src": "31921:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8924,
                                "name": "sInternalToCollect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8741,
                                "src": "31946:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8921,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "31911:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 8925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31911:54:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31885:80:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8927,
                        "nodeType": "ExpressionStatement",
                        "src": "31885:80:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8929,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "31996:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            ],
                            "id": 8928,
                            "name": "adjustRInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9286,
                            "src": "31980:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Account_$9407_storage_ptr_$returns$__$",
                              "typeString": "function (struct RTokenStructs.Account storage pointer)"
                            }
                          },
                          "id": 8930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31980:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8931,
                        "nodeType": "ExpressionStatement",
                        "src": "31980:24:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8933,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8698,
                              "src": "32036:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8934,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8698,
                              "src": "32043:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8935,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8704,
                                "src": "32050:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 8936,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hatID",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9394,
                              "src": "32050:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 8937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32065:5:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "argumentTypes": null,
                              "id": 8938,
                              "name": "debtToCollect",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8723,
                              "src": "32072:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8939,
                              "name": "sInternalToCollect",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8741,
                              "src": "32087:18:19",
                              "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_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8932,
                            "name": "_updateLoanStats",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9133,
                            "src": "32019:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 8940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32019:87:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8941,
                        "nodeType": "ExpressionStatement",
                        "src": "32019:87:19"
                      }
                    ]
                  },
                  "id": 8943,
                  "nodeType": "IfStatement",
                  "src": "29776:2341:19",
                  "trueBody": {
                    "id": 8907,
                    "nodeType": "Block",
                    "src": "29807:1837:19",
                    "statements": [
                      {
                        "assignments": [
                          8752
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8752,
                            "name": "rLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8907,
                            "src": "29821:13:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8751,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29821:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8754,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29837:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29821:17:19"
                      },
                      {
                        "assignments": [
                          8756
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8756,
                            "name": "sInternalLeft",
                            "nodeType": "VariableDeclaration",
                            "scope": 8907,
                            "src": "29852:21:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8755,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29852:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8758,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29876:1:19",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29852:25:19"
                      },
                      {
                        "assignments": [
                          8760
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8760,
                            "name": "i",
                            "nodeType": "VariableDeclaration",
                            "scope": 8907,
                            "src": "29891:9:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8759,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29891:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 8761,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29891:9:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8762,
                            "name": "rLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8752,
                            "src": "29965:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8763,
                            "name": "debtToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8723,
                            "src": "29973:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29965:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8765,
                        "nodeType": "ExpressionStatement",
                        "src": "29965:21:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8766,
                            "name": "sInternalLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8756,
                            "src": "30000:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 8767,
                            "name": "sInternalToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8741,
                            "src": "30016:18:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30000:34:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8769,
                        "nodeType": "ExpressionStatement",
                        "src": "30000:34:19"
                      },
                      {
                        "body": {
                          "id": 8905,
                          "nodeType": "Block",
                          "src": "30093:1541:19",
                          "statements": [
                            {
                              "assignments": [
                                8783
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8783,
                                  "name": "recipientAccount",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30111:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "storage",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 8782,
                                    "name": "Account",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 9407,
                                    "src": "30111:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8790,
                              "initialValue": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 8784,
                                  "name": "accounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9335,
                                  "src": "30146:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                                    "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                                  }
                                },
                                "id": 8789,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8785,
                                      "name": "hat",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8710,
                                      "src": "30155:3:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                        "typeString": "struct RTokenStructs.Hat storage pointer"
                                      }
                                    },
                                    "id": 8786,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "recipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9388,
                                    "src": "30155:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 8788,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 8787,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8760,
                                    "src": "30170:1:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "30155:17:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "30146:27:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage",
                                  "typeString": "struct RTokenStructs.Account storage ref"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30111:62:19"
                            },
                            {
                              "assignments": [
                                8792
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8792,
                                  "name": "isLastRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30191:20:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 8791,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30191:4:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8801,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8800,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8793,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8760,
                                  "src": "30214:1:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 8798,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8794,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8710,
                                            "src": "30220:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8795,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "proportions",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9391,
                                          "src": "30220:15:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                            "typeString": "uint32[] storage ref"
                                          }
                                        },
                                        "id": 8796,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": null,
                                        "src": "30220:22:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 8797,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "30245:1:19",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "30220:26:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 8799,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "30219:28:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30214:33:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30191:56:19"
                            },
                            {
                              "assignments": [
                                8803
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8803,
                                  "name": "lDebtRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30335:22:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8802,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30335:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8817,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8804,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8792,
                                  "src": "30360:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8815,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8808,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8710,
                                                "src": "30445:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8809,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "30445:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8811,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8810,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8760,
                                              "src": "30461:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "30445:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8806,
                                            "name": "debtToCollect",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8723,
                                            "src": "30427:13:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8807,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "30427:17:19",
                                          "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": 8812,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "30427:37:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8813,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "30426:39:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8814,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "30468:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "30426:57:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8816,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "30360:123:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8805,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8752,
                                  "src": "30398:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30335:148:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8826,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8818,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8783,
                                    "src": "30501:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8820,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "lDebt",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9404,
                                  "src": "30501:22:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8822,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8783,
                                        "src": "30557:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8823,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "lDebt",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9404,
                                      "src": "30557:22:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8824,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8803,
                                      "src": "30601:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8821,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "30526:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8825,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "30526:90:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30501:115:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8827,
                              "nodeType": "ExpressionStatement",
                              "src": "30501:115:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8846,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8828,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8704,
                                      "src": "30634:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8834,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "lRecipients",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9402,
                                    "src": "30634:19:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8835,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8830,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8710,
                                        "src": "30654:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8831,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "30654:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8833,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8832,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8760,
                                      "src": "30669:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "30654:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "30634:38:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 8837,
                                          "name": "account",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8704,
                                          "src": "30706:7:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                            "typeString": "struct RTokenStructs.Account storage pointer"
                                          }
                                        },
                                        "id": 8838,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "lRecipients",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 9402,
                                        "src": "30706:19:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 8843,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8839,
                                            "name": "hat",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8710,
                                            "src": "30726:3:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                              "typeString": "struct RTokenStructs.Hat storage pointer"
                                            }
                                          },
                                          "id": 8840,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "recipients",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 9388,
                                          "src": "30726:14:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                            "typeString": "address[] storage ref"
                                          }
                                        },
                                        "id": 8842,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 8841,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 8760,
                                          "src": "30741:1:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "30726:17:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "30706:38:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8844,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8803,
                                      "src": "30766:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8836,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "30675:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8845,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "30675:106:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30634:147:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8847,
                              "nodeType": "ExpressionStatement",
                              "src": "30634:147:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8848,
                                  "name": "rLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8752,
                                  "src": "30845:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8850,
                                      "name": "rLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8752,
                                      "src": "30863:5:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8851,
                                      "name": "lDebtRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8803,
                                      "src": "30870:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8849,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "30853:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8852,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "30853:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "30845:40:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8854,
                              "nodeType": "ExpressionStatement",
                              "src": "30845:40:19"
                            },
                            {
                              "assignments": [
                                8856
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8856,
                                  "name": "sInternalAmountRecipient",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8905,
                                  "src": "30976:32:19",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 8855,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "30976:7:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8870,
                              "initialValue": {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 8857,
                                  "name": "isLastRecipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8792,
                                  "src": "31011:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 8861,
                                                "name": "hat",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8710,
                                                "src": "31109:3:19",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                                }
                                              },
                                              "id": 8862,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "proportions",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 9391,
                                              "src": "31109:15:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                                "typeString": "uint32[] storage ref"
                                              }
                                            },
                                            "id": 8864,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 8863,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 8760,
                                              "src": "31125:1:19",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "31109:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 8859,
                                            "name": "sInternalToCollect",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8741,
                                            "src": "31086:18:19",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 8860,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 10771,
                                          "src": "31086:22:19",
                                          "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": 8865,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "31086:42:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8866,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31085:44:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 8867,
                                    "name": "PROPORTION_BASE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6695,
                                    "src": "31132:15:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "31085:62:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 8869,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "31011:136:19",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 8858,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8756,
                                  "src": "31049:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "30976:171:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8879,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8871,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8783,
                                    "src": "31165:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  },
                                  "id": 8873,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "sInternalAmount",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9406,
                                  "src": "31165:32:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8875,
                                        "name": "recipientAccount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8783,
                                        "src": "31231:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                          "typeString": "struct RTokenStructs.Account storage pointer"
                                        }
                                      },
                                      "id": 8876,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sInternalAmount",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9406,
                                      "src": "31231:32:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8877,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8856,
                                      "src": "31285:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8874,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "31200:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8878,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "31200:110:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "31165:145:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8880,
                              "nodeType": "ExpressionStatement",
                              "src": "31165:145:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 8886,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 8881,
                                  "name": "sInternalLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8756,
                                  "src": "31376:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8883,
                                      "name": "sInternalLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8756,
                                      "src": "31402:13:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 8884,
                                      "name": "sInternalAmountRecipient",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8856,
                                      "src": "31417:24:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8882,
                                    "name": "gentleSub",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "31392:9:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 8885,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "31392:50:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "31376:66:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8887,
                              "nodeType": "ExpressionStatement",
                              "src": "31376:66:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8889,
                                    "name": "recipientAccount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8783,
                                    "src": "31477:16:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                      "typeString": "struct RTokenStructs.Account storage pointer"
                                    }
                                  ],
                                  "id": 8888,
                                  "name": "adjustRInterest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9286,
                                  "src": "31461:15:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Account_$9407_storage_ptr_$returns$__$",
                                    "typeString": "function (struct RTokenStructs.Account storage pointer)"
                                  }
                                },
                                "id": 8890,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31461:33:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8891,
                              "nodeType": "ExpressionStatement",
                              "src": "31461:33:19"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 8893,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8698,
                                    "src": "31530:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 8894,
                                        "name": "hat",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8710,
                                        "src": "31537:3:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                          "typeString": "struct RTokenStructs.Hat storage pointer"
                                        }
                                      },
                                      "id": 8895,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "recipients",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 9388,
                                      "src": "31537:14:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 8897,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 8896,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8760,
                                      "src": "31552:1:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "31537:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 8898,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8704,
                                      "src": "31556:7:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                        "typeString": "struct RTokenStructs.Account storage pointer"
                                      }
                                    },
                                    "id": 8899,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "hatID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9394,
                                    "src": "31556:13:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "66616c7365",
                                    "id": 8900,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31571:5:19",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8901,
                                    "name": "lDebtRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8803,
                                    "src": "31578:14:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 8902,
                                    "name": "sInternalAmountRecipient",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8856,
                                    "src": "31594:24:19",
                                    "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_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8892,
                                  "name": "_updateLoanStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9133,
                                  "src": "31513:16:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                                  }
                                },
                                "id": 8903,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31513:106:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8904,
                              "nodeType": "ExpressionStatement",
                              "src": "31513:106:19"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 8774,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8760,
                            "src": "30060:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8775,
                                "name": "hat",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8710,
                                "src": "30064:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Hat_$9392_storage_ptr",
                                  "typeString": "struct RTokenStructs.Hat storage pointer"
                                }
                              },
                              "id": 8776,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "proportions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9391,
                              "src": "30064:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage",
                                "typeString": "uint32[] storage ref"
                              }
                            },
                            "id": 8777,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "30064:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30060:26:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8906,
                        "initializationExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 8770,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8760,
                              "src": "30053:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 8771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "30057:1:19",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "30053:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8773,
                          "nodeType": "ExpressionStatement",
                          "src": "30053:5:19"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 8780,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "30088:3:19",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 8779,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8760,
                              "src": "30090:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 8781,
                          "nodeType": "ExpressionStatement",
                          "src": "30088:3:19"
                        },
                        "nodeType": "ForStatement",
                        "src": "30048:1586:19"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8944,
                      "name": "rAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8700,
                      "src": "32206:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8945,
                      "name": "debtToCollect",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8723,
                      "src": "32216:13:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32206:23:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8970,
                  "nodeType": "IfStatement",
                  "src": "32202:244:19",
                  "trueBody": {
                    "id": 8969,
                    "nodeType": "Block",
                    "src": "32231:215:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 8947,
                            "name": "sInternalToCollect",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8741,
                            "src": "32245:18:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8951,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 8949,
                                  "name": "rAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8700,
                                  "src": "32279:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 8950,
                                  "name": "debtToCollect",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8723,
                                  "src": "32289:13:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "32279:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8948,
                              "name": "rToSInternal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9205,
                              "src": "32266:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 8952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32266:37:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32245:58:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8954,
                        "nodeType": "ExpressionStatement",
                        "src": "32245:58:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 8963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 8955,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "32317:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 8957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "sInternalAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9406,
                            "src": "32317:23:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8959,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8704,
                                  "src": "32353:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 8960,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sInternalAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9406,
                                "src": "32353:23:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 8961,
                                "name": "sInternalToCollect",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8741,
                                "src": "32378:18:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 8958,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "32343:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 8962,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32343:54:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32317:80:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8964,
                        "nodeType": "ExpressionStatement",
                        "src": "32317:80:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8966,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8704,
                              "src": "32427:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            ],
                            "id": 8965,
                            "name": "adjustRInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9286,
                            "src": "32411:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Account_$9407_storage_ptr_$returns$__$",
                              "typeString": "function (struct RTokenStructs.Account storage pointer)"
                            }
                          },
                          "id": 8967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32411:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8968,
                        "nodeType": "ExpressionStatement",
                        "src": "32411:24:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Recollect loan from the recipients\n@param owner   Owner address\n@param rAmount rToken amount of debt to be collected from the recipients",
            "id": 8972,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recollectLoans",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8698,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8972,
                  "src": "29159:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29159:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8700,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8972,
                  "src": "29182:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8699,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29182:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29149:54:19"
            },
            "returnParameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29213:0:19"
            },
            "scope": 9287,
            "src": "29126:3326:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9057,
              "nodeType": "Block",
              "src": "32607:728:19",
              "statements": [
                {
                  "assignments": [
                    8978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8978,
                      "name": "account",
                      "nodeType": "VariableDeclaration",
                      "scope": 9057,
                      "src": "32617:23:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                        "typeString": "struct RTokenStructs.Account"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8977,
                        "name": "Account",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9407,
                        "src": "32617:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8982,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8979,
                      "name": "accounts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9335,
                      "src": "32643:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Account_$9407_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.Account storage ref)"
                      }
                    },
                    "id": 8981,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8980,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8974,
                      "src": "32652:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32643:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage",
                      "typeString": "struct RTokenStructs.Account storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32617:41:19"
                },
                {
                  "assignments": [
                    8984
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8984,
                      "name": "stats",
                      "nodeType": "VariableDeclaration",
                      "scope": 9057,
                      "src": "32668:32:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                        "typeString": "struct RTokenStructs.AccountStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8983,
                        "name": "AccountStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9371,
                        "src": "32668:18:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                          "typeString": "struct RTokenStructs.AccountStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8988,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8985,
                      "name": "accountStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9339,
                      "src": "32703:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AccountStatsStored_$9371_storage_$",
                        "typeString": "mapping(address => struct RTokenStructs.AccountStatsStored storage ref)"
                      }
                    },
                    "id": 8987,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8986,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8974,
                      "src": "32716:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32703:19:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage",
                      "typeString": "struct RTokenStructs.AccountStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32668:54:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8990,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "32741:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          },
                          "id": 8991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accrueInterest",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6111,
                          "src": "32741:18:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_bool_$",
                            "typeString": "function () external returns (bool)"
                          }
                        },
                        "id": 8992,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32741:20:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "616363727565496e746572657374206661696c6564",
                        "id": 8993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32763:23:19",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        },
                        "value": "accrueInterest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0102744a4e76edd3c4112a6e9c0417fe9c7e65ad39d28a7847901c932ab1c5b6",
                          "typeString": "literal_string \"accrueInterest failed\""
                        }
                      ],
                      "id": 8989,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "32733:7:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32733:54:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8995,
                  "nodeType": "ExpressionStatement",
                  "src": "32733:54:19"
                },
                {
                  "assignments": [
                    8997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8997,
                      "name": "interestAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 9057,
                      "src": "32797:22:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32797:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9001,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8999,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8978,
                        "src": "32843:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      ],
                      "id": 8998,
                      "name": "getInterestPayableOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8419,
                      "src": "32822:20:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Account_$9407_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct RTokenStructs.Account storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 9000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32822:29:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32797:54:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9002,
                      "name": "interestAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8997,
                      "src": "32866:14:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32883:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32866:18:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9056,
                  "nodeType": "IfStatement",
                  "src": "32862:467:19",
                  "trueBody": {
                    "id": 9055,
                    "nodeType": "Block",
                    "src": "32886:443:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9005,
                              "name": "stats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8984,
                              "src": "32900:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                                "typeString": "struct RTokenStructs.AccountStatsStored storage pointer"
                              }
                            },
                            "id": 9007,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "cumulativeInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9370,
                            "src": "32900:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9011,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "32990:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9008,
                                  "name": "stats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8984,
                                  "src": "32927:5:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccountStatsStored_$9371_storage_ptr",
                                    "typeString": "struct RTokenStructs.AccountStatsStored storage pointer"
                                  }
                                },
                                "id": 9009,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "cumulativeInterest",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9370,
                                "src": "32927:41:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "32927:62:19",
                              "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": 9012,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32927:78:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "32900:105:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9014,
                        "nodeType": "ExpressionStatement",
                        "src": "32900:105:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9015,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8978,
                              "src": "33019:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 9017,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9398,
                            "src": "33019:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9021,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "33061:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9018,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8978,
                                  "src": "33039:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 9019,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rInterest",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9398,
                                "src": "33039:17:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33039:21:19",
                              "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": 9022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33039:37:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33019:57:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9024,
                        "nodeType": "ExpressionStatement",
                        "src": "33019:57:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9033,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9025,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8978,
                              "src": "33090:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 9027,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9396,
                            "src": "33090:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9031,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "33128:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9028,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8978,
                                  "src": "33108:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                    "typeString": "struct RTokenStructs.Account storage pointer"
                                  }
                                },
                                "id": 9029,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "rAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9396,
                                "src": "33108:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9030,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33108:19:19",
                              "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": 9032,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33108:35:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33090:53:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9034,
                        "nodeType": "ExpressionStatement",
                        "src": "33090:53:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9040,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 9035,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9314,
                            "src": "33157:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9038,
                                "name": "interestAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8997,
                                "src": "33187:14:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9036,
                                "name": "totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9314,
                                "src": "33171:11:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9037,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33171:15:19",
                              "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": 9039,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33171:31:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33157:45:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9041,
                        "nodeType": "ExpressionStatement",
                        "src": "33157:45:19"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9043,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8974,
                              "src": "33234:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9044,
                              "name": "interestAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8997,
                              "src": "33241:14:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9042,
                            "name": "InterestPaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6377,
                            "src": "33221:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33221:35:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9046,
                        "nodeType": "EmitStatement",
                        "src": "33216:40:19"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 9049,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "33292:1:19",
                                  "subdenomination": null,
                                  "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": 9048,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "33284:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 9050,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33284:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9051,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8974,
                              "src": "33296:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9052,
                              "name": "interestAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8997,
                              "src": "33303:14:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9047,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11461,
                            "src": "33275:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33275:43:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9054,
                        "nodeType": "EmitStatement",
                        "src": "33270:48:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev pay interest to the owner\n@param owner Account owner address",
            "id": 9058,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payInterestInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8974,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 9058,
                  "src": "32583:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32583:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32582:15:19"
            },
            "returnParameters": {
              "id": 8976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32607:0:19"
            },
            "scope": 9287,
            "src": "32554:781:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9132,
              "nodeType": "Block",
              "src": "33545:678:19",
              "statements": [
                {
                  "assignments": [
                    9074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9074,
                      "name": "hatStats",
                      "nodeType": "VariableDeclaration",
                      "scope": 9132,
                      "src": "33555:31:19",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                        "typeString": "struct RTokenStructs.HatStatsStored"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9073,
                        "name": "HatStatsStored",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9385,
                        "src": "33555:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                          "typeString": "struct RTokenStructs.HatStatsStored"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9078,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9075,
                      "name": "hatStats",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9343,
                      "src": "33589:8:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_HatStatsStored_$9385_storage_$",
                        "typeString": "mapping(uint256 => struct RTokenStructs.HatStatsStored storage ref)"
                      }
                    },
                    "id": 9077,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9076,
                      "name": "hatID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9064,
                      "src": "33598:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "33589:15:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage",
                      "typeString": "struct RTokenStructs.HatStatsStored storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33555:49:19"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9080,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9060,
                        "src": "33637:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9081,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9062,
                        "src": "33644:9:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9082,
                        "name": "hatID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9064,
                        "src": "33655:5:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9083,
                        "name": "isDistribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9066,
                        "src": "33674:14:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9084,
                        "name": "redeemableAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9068,
                        "src": "33702:16:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9085,
                        "name": "sInternalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9070,
                        "src": "33732:15:19",
                        "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_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9079,
                      "name": "LoansTransferred",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6371,
                      "src": "33620:16:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,bool,uint256,uint256)"
                      }
                    },
                    "id": 9086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33620:128:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9087,
                  "nodeType": "EmitStatement",
                  "src": "33615:133:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 9088,
                    "name": "isDistribution",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9066,
                    "src": "33763:14:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 9130,
                    "nodeType": "Block",
                    "src": "33986:231:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9110,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "34000:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9112,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalLoans",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9382,
                            "src": "34000:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9114,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "34032:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9115,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalLoans",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9382,
                                "src": "34032:19:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 9116,
                                "name": "redeemableAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9068,
                                "src": "34053:16:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 9113,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "34022:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 9117,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34022:48:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34000:70:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9119,
                        "nodeType": "ExpressionStatement",
                        "src": "34000:70:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9120,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "34084:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9122,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalInternalSavings",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9384,
                            "src": "34084:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9124,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "34143:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9125,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalInternalSavings",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9384,
                                "src": "34143:29:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 9126,
                                "name": "sInternalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9070,
                                "src": "34190:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 9123,
                              "name": "gentleSub",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9169,
                              "src": "34116:9:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 9127,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34116:90:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34084:122:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9129,
                        "nodeType": "ExpressionStatement",
                        "src": "34084:122:19"
                      }
                    ]
                  },
                  "id": 9131,
                  "nodeType": "IfStatement",
                  "src": "33759:458:19",
                  "trueBody": {
                    "id": 9109,
                    "nodeType": "Block",
                    "src": "33779:201:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9089,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "33793:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9091,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalLoans",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9382,
                            "src": "33793:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9095,
                                "name": "redeemableAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9068,
                                "src": "33839:16:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9092,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "33815:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9093,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalLoans",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9382,
                                "src": "33815:19:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33815:23:19",
                              "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": 9096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33815:41:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33793:63:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9098,
                        "nodeType": "ExpressionStatement",
                        "src": "33793:63:19"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9099,
                              "name": "hatStats",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9074,
                              "src": "33870:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                              }
                            },
                            "id": 9101,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "totalInternalSavings",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9384,
                            "src": "33870:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9105,
                                "name": "sInternalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9070,
                                "src": "33953:15:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 9102,
                                  "name": "hatStats",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9074,
                                  "src": "33902:8:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_HatStatsStored_$9385_storage_ptr",
                                    "typeString": "struct RTokenStructs.HatStatsStored storage pointer"
                                  }
                                },
                                "id": 9103,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "totalInternalSavings",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9384,
                                "src": "33902:29:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 10694,
                              "src": "33902:50:19",
                              "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": 9106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33902:67:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33870:99:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9108,
                        "nodeType": "ExpressionStatement",
                        "src": "33870:99:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 9133,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateLoanStats",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9060,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33376:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33376:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9062,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33399:17:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "33399:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9064,
                  "name": "hatID",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33426:13:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9063,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33426:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9066,
                  "name": "isDistribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33449:19:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9065,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "33449:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9068,
                  "name": "redeemableAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33478:24:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9067,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33478:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9070,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9133,
                  "src": "33512:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9069,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33512:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33366:170:19"
            },
            "returnParameters": {
              "id": 9072,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "33545:0:19"
            },
            "scope": 9287,
            "src": "33341:882:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9148,
              "nodeType": "Block",
              "src": "34292:92:19",
              "statements": [
                {
                  "assignments": [
                    9141
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9141,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 9148,
                      "src": "34300:9:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9140,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "34300:4:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9142,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34300:9:19"
                },
                {
                  "externalReferences": [
                    {
                      "size": {
                        "declaration": 9141,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "34328:4:19",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 9135,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "34348:4:19",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 9143,
                  "nodeType": "InlineAssembly",
                  "operations": "{ size := extcodesize(addr) }",
                  "src": "34317:38:19"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9144,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9141,
                      "src": "34369:4:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34376:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "34369:8:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9139,
                  "id": 9147,
                  "nodeType": "Return",
                  "src": "34362:15:19"
                }
              ]
            },
            "documentation": null,
            "id": 9149,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isContract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9135,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 9149,
                  "src": "34250:12:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34250:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34249:14:19"
            },
            "returnParameters": {
              "id": 9139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9138,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9149,
                  "src": "34286:4:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9137,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "34286:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34285:6:19"
            },
            "scope": 9287,
            "src": "34229:155:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9168,
              "nodeType": "Block",
              "src": "34688:63:19",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9158,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9151,
                      "src": "34702:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 9159,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9153,
                      "src": "34706:1:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "34702:5:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9163,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9151,
                        "src": "34739:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 9164,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9153,
                        "src": "34743:1:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "34739:5:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 9157,
                    "id": 9166,
                    "nodeType": "Return",
                    "src": "34732:12:19"
                  },
                  "id": 9167,
                  "nodeType": "IfStatement",
                  "src": "34698:46:19",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34716:1:19",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 9157,
                    "id": 9162,
                    "nodeType": "Return",
                    "src": "34709:8:19"
                  }
                }
              ]
            },
            "documentation": "@dev Gently subtract b from a without revert\n     * Due to the use of integer arithmatic, imprecision may cause a tiny\namount to be off when substracting the otherwise precise proportions.",
            "id": 9169,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "gentleSub",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9151,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 9169,
                  "src": "34635:9:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34635:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9153,
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 9169,
                  "src": "34646:9:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34646:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34634:22:19"
            },
            "returnParameters": {
              "id": 9157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9156,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9169,
                  "src": "34679:7:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34679:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34678:9:19"
            },
            "scope": 9287,
            "src": "34616:135:19",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9186,
              "nodeType": "Block",
              "src": "34925:503:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9183,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "35395:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9178,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "35352:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              },
                              "id": 9179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exchangeRateStored",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6106,
                              "src": "35352:22:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 9180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35352:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9176,
                            "name": "sInternalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9171,
                            "src": "35319:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "35319:32:19",
                          "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": 9181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35319:58:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "35319:75:19",
                      "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": 9184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35319:102:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9175,
                  "id": 9185,
                  "nodeType": "Return",
                  "src": "35312:109:19"
                }
              ]
            },
            "documentation": "@dev convert internal savings amount to redeemable amount",
            "id": 9187,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sInternalToR",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9171,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9187,
                  "src": "34845:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34845:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34844:25:19"
            },
            "returnParameters": {
              "id": 9175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9174,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9187,
                  "src": "34908:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9173,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34908:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34907:17:19"
            },
            "scope": 9287,
            "src": "34823:605:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9204,
              "nodeType": "Block",
              "src": "35602:118:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9199,
                            "name": "ias",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9316,
                            "src": "35688:3:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                              "typeString": "contract IAllocationStrategy"
                            }
                          },
                          "id": 9200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "exchangeRateStored",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6106,
                          "src": "35688:22:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 9201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35688:24:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9196,
                            "name": "savingAssetConversionRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9322,
                            "src": "35644:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9194,
                            "name": "rAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9189,
                            "src": "35619:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "35619:24:19",
                          "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": 9197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35619:51:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "35619:68:19",
                      "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": 9202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35619:94:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9193,
                  "id": 9203,
                  "nodeType": "Return",
                  "src": "35612:101:19"
                }
              ]
            },
            "documentation": "@dev convert redeemable amount to internal savings amount",
            "id": 9205,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rToSInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9189,
                  "name": "rAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9205,
                  "src": "35522:15:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35522:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35521:17:19"
            },
            "returnParameters": {
              "id": 9193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9192,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9205,
                  "src": "35577:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35577:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35576:25:19"
            },
            "scope": 9287,
            "src": "35500:220:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9222,
              "nodeType": "Block",
              "src": "35899:140:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9219,
                        "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6678,
                        "src": "35992:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9214,
                                "name": "ias",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9316,
                                "src": "35949:3:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAllocationStrategy_$6133",
                                  "typeString": "contract IAllocationStrategy"
                                }
                              },
                              "id": 9215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exchangeRateStored",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6106,
                              "src": "35949:22:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 9216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35949:24:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9212,
                            "name": "sOriginalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9207,
                            "src": "35916:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "35916:32:19",
                          "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": 9217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35916:58:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "35916:75:19",
                      "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": 9220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35916:116:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9211,
                  "id": 9221,
                  "nodeType": "Return",
                  "src": "35909:123:19"
                }
              ]
            },
            "documentation": "@dev convert original savings amount to redeemable amount",
            "id": 9223,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sOriginalToR",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9207,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9223,
                  "src": "35814:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9206,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "35814:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35813:22:19"
            },
            "returnParameters": {
              "id": 9211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9210,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9223,
                  "src": "35874:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35874:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "35873:25:19"
            },
            "scope": 9287,
            "src": "35792:247:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9238,
              "nodeType": "Block",
              "src": "36236:196:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9235,
                        "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6678,
                        "src": "36385:39:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9232,
                            "name": "savingAssetConversionRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9322,
                            "src": "36341:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9230,
                            "name": "sOriginalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9225,
                            "src": "36308:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "36308:32:19",
                          "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": 9233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "36308:59:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "36308:76:19",
                      "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": 9236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36308:117:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9229,
                  "id": 9237,
                  "nodeType": "Return",
                  "src": "36301:124:19"
                }
              ]
            },
            "documentation": null,
            "id": 9239,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sOriginalToSInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9225,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9239,
                  "src": "36151:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9224,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "36151:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36150:22:19"
            },
            "returnParameters": {
              "id": 9229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9228,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9239,
                  "src": "36211:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36211:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36210:25:19"
            },
            "scope": 9287,
            "src": "36121:311:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9254,
              "nodeType": "Block",
              "src": "36629:196:19",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9251,
                        "name": "savingAssetConversionRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "36792:25:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9248,
                            "name": "ALLOCATION_STRATEGY_EXCHANGE_RATE_SCALE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6678,
                            "src": "36734:39:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9246,
                            "name": "sInternalAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9241,
                            "src": "36701:15:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10771,
                          "src": "36701:32:19",
                          "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": 9249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "36701:73:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10787,
                      "src": "36701:90:19",
                      "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": 9252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36701:117:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9245,
                  "id": 9253,
                  "nodeType": "Return",
                  "src": "36694:124:19"
                }
              ]
            },
            "documentation": null,
            "id": 9255,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sInternalToSOriginal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9241,
                  "name": "sInternalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9255,
                  "src": "36544:20:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9240,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "36544:4:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36543:22:19"
            },
            "returnParameters": {
              "id": 9245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9244,
                  "name": "sOriginalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 9255,
                  "src": "36604:23:19",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36604:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36603:25:19"
            },
            "scope": 9287,
            "src": "36514:311:19",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9285,
              "nodeType": "Block",
              "src": "36998:195:19",
              "statements": [
                {
                  "assignments": [
                    9261
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9261,
                      "name": "rGross",
                      "nodeType": "VariableDeclaration",
                      "scope": 9285,
                      "src": "37008:14:19",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9260,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "37008:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9266,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9263,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9257,
                          "src": "37038:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 9264,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sInternalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9406,
                        "src": "37038:23:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9262,
                      "name": "sInternalToR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9187,
                      "src": "37025:12:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 9265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37025:37:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37008:54:19"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9267,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9257,
                        "src": "37076:7:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                          "typeString": "struct RTokenStructs.Account storage pointer"
                        }
                      },
                      "id": 9268,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9398,
                      "src": "37076:17:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 9272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 9269,
                        "name": "rGross",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9261,
                        "src": "37096:6:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9270,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9257,
                          "src": "37105:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                            "typeString": "struct RTokenStructs.Account storage pointer"
                          }
                        },
                        "id": 9271,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "lDebt",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9404,
                        "src": "37105:13:19",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "37096:22:19",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37076:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9284,
                  "nodeType": "IfStatement",
                  "src": "37072:115:19",
                  "trueBody": {
                    "id": 9283,
                    "nodeType": "Block",
                    "src": "37120:67:19",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 9274,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9257,
                              "src": "37134:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                "typeString": "struct RTokenStructs.Account storage pointer"
                              }
                            },
                            "id": 9276,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "rInterest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9398,
                            "src": "37134:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 9277,
                              "name": "rGross",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9261,
                              "src": "37154:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 9278,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9257,
                                "src": "37163:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                                  "typeString": "struct RTokenStructs.Account storage pointer"
                                }
                              },
                              "id": 9279,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lDebt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9404,
                              "src": "37163:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "37154:22:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "37134:42:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9282,
                        "nodeType": "ExpressionStatement",
                        "src": "37134:42:19"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 9286,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "adjustRInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9258,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9257,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 9286,
                  "src": "36965:23:19",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                    "typeString": "struct RTokenStructs.Account"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9256,
                    "name": "Account",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9407,
                    "src": "36965:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Account_$9407_storage_ptr",
                      "typeString": "struct RTokenStructs.Account"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "36964:25:19"
            },
            "returnParameters": {
              "id": 9259,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36998:0:19"
            },
            "scope": 9287,
            "src": "36940:253:19",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 9288,
        "src": "879:36316:19"
      }
    ],
    "src": "202:36994:19"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.535Z",
  "devdoc": {
    "methods": {
      "changeAllocationStrategy(address)": {
        "details": "IRToken.changeAllocationStrategy implementation"
      },
      "changeHat(uint256)": {
        "details": "IRToken.changeHat implementation"
      },
      "changeHatFor(address,uint256)": {
        "details": "IRToken.changeHatFor implementation"
      },
      "createHat(address[],uint32[],bool)": {
        "details": "IRToken.createHat implementation"
      },
      "getAccountStats(address)": {
        "details": "IRToken.getAccountStats implementation"
      },
      "getCurrentAllocationStrategy()": {
        "details": "IRToken.changeHatFor implementation"
      },
      "getCurrentSavingStrategy()": {
        "details": "IRToken.getCurrentSavingStrategy implementation"
      },
      "getGlobalStats()": {
        "details": "IRToken.getAccountStats implementation!1"
      },
      "getHatByAddress(address)": {
        "details": "IRToken.getHatByAddress implementation"
      },
      "getHatByID(uint256)": {
        "details": "IRToken.getHatByID implementation"
      },
      "getHatStats(uint256)": {
        "details": "IRToken.getHatStats implementation"
      },
      "getMaximumHatID()": {
        "details": "IRToken.getMaximumHatID implementation"
      },
      "getSavingAssetBalance()": {
        "details": "IRToken.getSavingAssetBalance implementation"
      },
      "interestPayableOf(address)": {
        "details": "IRToken.interestPayableOf implementation"
      },
      "isOwner()": {
        "details": "Returns true if the caller is the current owner."
      },
      "mint(uint256)": {
        "details": "IRToken.mint implementation"
      },
      "mintWithNewHat(uint256,address[],uint32[])": {
        "details": "IRToken.mintWithNewHat implementation"
      },
      "mintWithSelectedHat(uint256,uint256)": {
        "details": "IRToken.mintWithSelectedHat implementation"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "payInterest(address)": {
        "details": "IRToken.payInterest implementation"
      },
      "receivedLoanOf(address)": {
        "details": "IRToken.receivedLoanOf implementation"
      },
      "receivedSavingsOf(address)": {
        "details": "IRToken.receivedSavingsOf implementation"
      },
      "redeem(uint256)": {
        "details": "IRToken.redeem implementation     It withdraws equal amount of initially supplied underlying assets"
      },
      "redeemAll()": {
        "details": "IRToken.redeemAll implementation"
      },
      "redeemAndTransfer(address,uint256)": {
        "details": "IRToken.redeemAndTransfer implementation"
      },
      "redeemAndTransferAll(address)": {
        "details": "IRToken.redeemAndTransferAll implementation"
      },
      "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."
      },
      "transferAll(address)": {
        "details": "IRToken.transferAll implementation"
      },
      "transferAllFrom(address,address)": {
        "details": "IRToken.transferAllFrom implementation"
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "updateCode(address)": {
        "details": "Update the rToken logic contract code"
      }
    }
  },
  "userdoc": {
    "methods": {
      "allowance(address,address)": {
        "notice": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through `transferFrom`. This is zero by default.     * This value changes when `approve` or `transferFrom` are called."
      },
      "approve(address,uint256)": {
        "notice": "Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * > Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an `Approval` event."
      },
      "balanceOf(address)": {
        "notice": "Returns the amount of tokens owned by `account`."
      },
      "initialize(address,string,string,uint256)": {
        "notice": "Create rToken linked with cToken at `cToken_`"
      },
      "transfer(address,uint256)": {
        "notice": "Moves `amount` tokens from the caller's account to `dst`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event. May also emit `InterestPaid` event."
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a `Transfer` event."
      }
    },
    "notice": "RToken an ERC20 token that is 1:1 redeemable to its underlying ERC20 token."
  }
}