{
  "contractName": "DonationsStaking",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakedDAI",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ethDonated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "daiDonated",
          "type": "uint256"
        }
      ],
      "name": "DonationStaked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DAI",
      "outputs": [
        {
          "internalType": "contract cERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "active",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakingContract",
      "outputs": [
        {
          "internalType": "contract Staking",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalDAIDonated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalETHDonated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "uniswap",
      "outputs": [
        {
          "internalType": "contract Uniswap",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakingContract",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_dai",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minDAIAmount",
          "type": "uint256"
        }
      ],
      "name": "stakeDonations",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalStaked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_active",
          "type": "bool"
        }
      ],
      "name": "setActive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "end",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakedDAI\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethDonated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"daiDonated\",\"type\":\"uint256\"}],\"name\":\"DonationStaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DAI\",\"outputs\":[{\"internalType\":\"contract cERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"active\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"avatar\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"end\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_avatar\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dai\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"setActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDAIAmount\",\"type\":\"uint256\"}],\"name\":\"stakeDonations\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract Staking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDAIDonated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalETHDonated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswap\",\"outputs\":[{\"internalType\":\"contract Uniswap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"end()\":{\"details\":\"withdraws all stakes and then transfer all balances to avatar this can also be called by owner(Foundation) but it is safe as funds are transfered to avatarMock and only avatar can upgrade this contract logic\"},\"stakeDonations(uint256)\":{\"details\":\"stake available funds. It take balance in eth and buy DAI from uniswap then stake outstanding DAI balance. anyone can call this.\",\"params\":{\"_minDAIAmount\":\"enforce expected return from uniswap when converting eth balance to DAI\"}},\"totalStaked()\":{\"details\":\"total DAI value staked\",\"returns\":{\"_0\":\"DAI value staked\"}}},\"title\":\"DonationStaking contract that receives funds in ETH/DAI and stake them in the SimpleStaking contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/DonationsStaking.sol\":\"DonationsStaking\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol\":{\"keccak256\":\"0xe501727b0e5e15fe639129ab4b1abc59a14ebd3ddd05bb7056ac4fc26a8f3ee7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90d8797740cfd3933ae849f3144e30f9133a55b26634b3efefa8206cd91f62d8\",\"dweb:/ipfs/QmYLeetoyiPej9acnGzjLLwgVnEg4d2Eg1Xb4k3A1mJqj6\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/DonationsStaking.sol\":{\"keccak256\":\"0xe3eb1174f81e15cd7ba62b1171589ea2e000fcfa51a454487be9304db87d7e2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24db48162fa786d56e86c63762821cdd8ca667bd4bfc76ca4ee445eaf43adaaa\",\"dweb:/ipfs/QmUqXSRmP2N18FjJVXqFjxjweq6yv1sr4kmsZBbgqcDdBF\"]},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\",\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610fa5806100206000396000f3fe6080604052600436106100e15760003560e01c8063904206281161007f578063e0bab4c411610059578063e0bab4c414610212578063ea1eba7114610227578063ee99205c1461023c578063efbe1c1c14610251576100e8565b806390420628146101bd578063acec338a146101d2578063c0c53b8b146101f2576100e8565b80632681f7e4116100bb5780632681f7e41461014f5780635aef7de614610171578063817b1cd2146101865780638da5cb5b146101a8576100e8565b806302fb0c5e146100ed5780630d8e6e2c146101185780632124e2df1461013a576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b50610102610274565b60405161010f9190610d61565b60405180910390f35b34801561012457600080fd5b5061012d610284565b60405161010f9190610d6c565b61014d610148366004610cde565b6102a3565b005b34801561015b57600080fd5b506101646104ae565b60405161010f9190610d0e565b34801561017d57600080fd5b506101646104bd565b34801561019257600080fd5b5061019b6104d2565b60405161010f9190610e82565b3480156101b457600080fd5b50610164610562565b3480156101c957600080fd5b5061019b610571565b3480156101de57600080fd5b5061014d6101ed366004610c73565b610577565b3480156101fe57600080fd5b5061014d61020d366004610b94565b6105da565b34801561021e57600080fd5b50610164610767565b34801561023357600080fd5b5061019b610776565b34801561024857600080fd5b5061016461077c565b34801561025d57600080fd5b5061026661078b565b60405161010f929190610ef4565b600454600160a01b900460ff1681565b6040805180820190915260058152640312e312e360dc1b602082015290565b600454600160a01b900460ff166102b957600080fd5b6002546040516370a0823160e01b81526000916001600160a01b0316906370a08231906102ea903090600401610d0e565b60206040518083038186803b15801561030257600080fd5b505afa158015610316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033a9190610cf6565b90506000610347836109ab565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061037d903090600401610d0e565b60206040518083038186803b15801561039557600080fd5b505afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd9190610cf6565b9050600081116103f85760405162461bcd60e51b81526004016103ef90610dbf565b60405180910390fd5b6001546040516364aab23960e01b81526001600160a01b03909116906364aab23990610428908490600401610e82565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b50506005805485019055505060068054840190556040517fde176e064212e4ce25421127d59b3d0635e3feef28910a845ff34610c6b6b3bf906104a0903390849086908890610d3b565b60405180910390a150505050565b6004546001600160a01b031681565b6000546201000090046001600160a01b031681565b60006104dc610b57565b6001546040516348b4573960e11b81526001600160a01b0390911690639168ae729061050c903090600401610d0e565b604080518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190610cab565b5191505090565b6003546001600160a01b031681565b60055481565b6003546001600160a01b03163314806105a057506000546201000090046001600160a01b031633145b6105bc5760405162461bcd60e51b81526004016103ef90610e36565b60048054911515600160a01b0260ff60a01b19909216919091179055565b600054610100900460ff16806105f357506105f3610b51565b80610601575060005460ff16155b61061d5760405162461bcd60e51b81526004016103ef90610de8565b600054610100900460ff16158015610648576000805460ff1961ff0019909116610100171660011790555b60038054336001600160a01b03199182161790915560048054737a250d5630b4cf539739df2c5dacb4c659f2488d9083161781556002805483166001600160a01b0386811691909117918290556000805462010000600160b01b031916620100008a84160217905560018054909416878216179384905560405163095ea7b360e01b81529181169363095ea7b3936106e99391909216916000199101610d22565b602060405180830381600087803b15801561070357600080fd5b505af1158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b9190610c8f565b506004805460ff60a01b1916600160a01b1790558015610761576000805461ff00191690555b50505050565b6002546001600160a01b031681565b60065481565b6001546001600160a01b031681565b60035460009081906001600160a01b03163314806107b957506000546201000090046001600160a01b031633145b6107d55760405162461bcd60e51b81526004016103ef90610e36565b600160009054906101000a90046001600160a01b03166001600160a01b031663bed9d8616040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152600093506001600160a01b0390911691506370a0823190610870903090600401610d0e565b60206040518083038186803b15801561088857600080fd5b505afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190610cf6565b60025460005460405163a9059cbb60e01b815292935047926001600160a01b039283169263a9059cbb926109039262010000909104909116908690600401610d22565b602060405180830381600087803b15801561091d57600080fd5b505af1158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610c8f565b5060008054604051620100009091046001600160a01b0316916108fc841502918491818181858888f19350505050158015610994573d6000803e3d6000fd5b506004805460ff60a01b1916905590925090509091565b600047806109bd576000915050610b4c565b6040805160028082526060808301845292602083019080368337505060025482519293506001600160a01b03169183915060019081106109f957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f9190610b71565b81600081518110610aac57fe5b6001600160a01b03928316602091820292909201015260048054604051637ff36ab560e01b8152921691637ff36ab5918591610af091899187913091429101610e8b565b6000604051808303818588803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610b469190810190610bde565b50909150505b919050565b303b1590565b604051806040016040528060008152602001600081525090565b600060208284031215610b82578081fd5b8151610b8d81610f49565b9392505050565b600080600060608486031215610ba8578182fd5b8335610bb381610f49565b92506020840135610bc381610f49565b91506040840135610bd381610f49565b809150509250925092565b60006020808385031215610bf0578182fd5b825167ffffffffffffffff811115610c06578283fd5b8301601f81018513610c16578283fd5b8051610c29610c2482610f29565b610f02565b8181528381019083850185840285018601891015610c45578687fd5b8694505b83851015610c67578051835260019490940193918501918501610c49565b50979650505050505050565b600060208284031215610c84578081fd5b8135610b8d81610f61565b600060208284031215610ca0578081fd5b8151610b8d81610f61565b600060408284031215610cbc578081fd5b610cc66040610f02565b82518152602083015160208201528091505092915050565b600060208284031215610cef578081fd5b5035919050565b600060208284031215610d07578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b6000602080835283518082850152825b81811015610d9857858101830151858201604001528201610d7c565b81811115610da95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e6e6f2044414920746f207374616b6560881b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f4f6e6c79206f776e6572206f72206176617461722063616e20706572666f726d60408201526b103a3434b99030b1ba34b7b760a11b606082015260800190565b90815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015610ed45784516001600160a01b031683529383019391830191600101610eaf565b50506001600160a01b039690961660408501525050506060015292915050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715610f2157600080fd5b604052919050565b600067ffffffffffffffff821115610f3f578081fd5b5060209081020190565b6001600160a01b0381168114610f5e57600080fd5b50565b8015158114610f5e57600080fdfea2646970667358221220211b18970a82784a35af7c8f1be0194a71e74d2be3b3915a493db1656fd4362164736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106100e15760003560e01c8063904206281161007f578063e0bab4c411610059578063e0bab4c414610212578063ea1eba7114610227578063ee99205c1461023c578063efbe1c1c14610251576100e8565b806390420628146101bd578063acec338a146101d2578063c0c53b8b146101f2576100e8565b80632681f7e4116100bb5780632681f7e41461014f5780635aef7de614610171578063817b1cd2146101865780638da5cb5b146101a8576100e8565b806302fb0c5e146100ed5780630d8e6e2c146101185780632124e2df1461013a576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b50610102610274565b60405161010f9190610d61565b60405180910390f35b34801561012457600080fd5b5061012d610284565b60405161010f9190610d6c565b61014d610148366004610cde565b6102a3565b005b34801561015b57600080fd5b506101646104ae565b60405161010f9190610d0e565b34801561017d57600080fd5b506101646104bd565b34801561019257600080fd5b5061019b6104d2565b60405161010f9190610e82565b3480156101b457600080fd5b50610164610562565b3480156101c957600080fd5b5061019b610571565b3480156101de57600080fd5b5061014d6101ed366004610c73565b610577565b3480156101fe57600080fd5b5061014d61020d366004610b94565b6105da565b34801561021e57600080fd5b50610164610767565b34801561023357600080fd5b5061019b610776565b34801561024857600080fd5b5061016461077c565b34801561025d57600080fd5b5061026661078b565b60405161010f929190610ef4565b600454600160a01b900460ff1681565b6040805180820190915260058152640312e312e360dc1b602082015290565b600454600160a01b900460ff166102b957600080fd5b6002546040516370a0823160e01b81526000916001600160a01b0316906370a08231906102ea903090600401610d0e565b60206040518083038186803b15801561030257600080fd5b505afa158015610316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033a9190610cf6565b90506000610347836109ab565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061037d903090600401610d0e565b60206040518083038186803b15801561039557600080fd5b505afa1580156103a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cd9190610cf6565b9050600081116103f85760405162461bcd60e51b81526004016103ef90610dbf565b60405180910390fd5b6001546040516364aab23960e01b81526001600160a01b03909116906364aab23990610428908490600401610e82565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b50506005805485019055505060068054840190556040517fde176e064212e4ce25421127d59b3d0635e3feef28910a845ff34610c6b6b3bf906104a0903390849086908890610d3b565b60405180910390a150505050565b6004546001600160a01b031681565b6000546201000090046001600160a01b031681565b60006104dc610b57565b6001546040516348b4573960e11b81526001600160a01b0390911690639168ae729061050c903090600401610d0e565b604080518083038186803b15801561052357600080fd5b505afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190610cab565b5191505090565b6003546001600160a01b031681565b60055481565b6003546001600160a01b03163314806105a057506000546201000090046001600160a01b031633145b6105bc5760405162461bcd60e51b81526004016103ef90610e36565b60048054911515600160a01b0260ff60a01b19909216919091179055565b600054610100900460ff16806105f357506105f3610b51565b80610601575060005460ff16155b61061d5760405162461bcd60e51b81526004016103ef90610de8565b600054610100900460ff16158015610648576000805460ff1961ff0019909116610100171660011790555b60038054336001600160a01b03199182161790915560048054737a250d5630b4cf539739df2c5dacb4c659f2488d9083161781556002805483166001600160a01b0386811691909117918290556000805462010000600160b01b031916620100008a84160217905560018054909416878216179384905560405163095ea7b360e01b81529181169363095ea7b3936106e99391909216916000199101610d22565b602060405180830381600087803b15801561070357600080fd5b505af1158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b9190610c8f565b506004805460ff60a01b1916600160a01b1790558015610761576000805461ff00191690555b50505050565b6002546001600160a01b031681565b60065481565b6001546001600160a01b031681565b60035460009081906001600160a01b03163314806107b957506000546201000090046001600160a01b031633145b6107d55760405162461bcd60e51b81526004016103ef90610e36565b600160009054906101000a90046001600160a01b03166001600160a01b031663bed9d8616040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152600093506001600160a01b0390911691506370a0823190610870903090600401610d0e565b60206040518083038186803b15801561088857600080fd5b505afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c09190610cf6565b60025460005460405163a9059cbb60e01b815292935047926001600160a01b039283169263a9059cbb926109039262010000909104909116908690600401610d22565b602060405180830381600087803b15801561091d57600080fd5b505af1158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190610c8f565b5060008054604051620100009091046001600160a01b0316916108fc841502918491818181858888f19350505050158015610994573d6000803e3d6000fd5b506004805460ff60a01b1916905590925090509091565b600047806109bd576000915050610b4c565b6040805160028082526060808301845292602083019080368337505060025482519293506001600160a01b03169183915060019081106109f957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f9190610b71565b81600081518110610aac57fe5b6001600160a01b03928316602091820292909201015260048054604051637ff36ab560e01b8152921691637ff36ab5918591610af091899187913091429101610e8b565b6000604051808303818588803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610b469190810190610bde565b50909150505b919050565b303b1590565b604051806040016040528060008152602001600081525090565b600060208284031215610b82578081fd5b8151610b8d81610f49565b9392505050565b600080600060608486031215610ba8578182fd5b8335610bb381610f49565b92506020840135610bc381610f49565b91506040840135610bd381610f49565b809150509250925092565b60006020808385031215610bf0578182fd5b825167ffffffffffffffff811115610c06578283fd5b8301601f81018513610c16578283fd5b8051610c29610c2482610f29565b610f02565b8181528381019083850185840285018601891015610c45578687fd5b8694505b83851015610c67578051835260019490940193918501918501610c49565b50979650505050505050565b600060208284031215610c84578081fd5b8135610b8d81610f61565b600060208284031215610ca0578081fd5b8151610b8d81610f61565b600060408284031215610cbc578081fd5b610cc66040610f02565b82518152602083015160208201528091505092915050565b600060208284031215610cef578081fd5b5035919050565b600060208284031215610d07578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b6000602080835283518082850152825b81811015610d9857858101830151858201604001528201610d7c565b81811115610da95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e6e6f2044414920746f207374616b6560881b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f4f6e6c79206f776e6572206f72206176617461722063616e20706572666f726d60408201526b103a3434b99030b1ba34b7b760a11b606082015260800190565b90815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015610ed45784516001600160a01b031683529383019391830191600101610eaf565b50506001600160a01b039690961660408501525050506060015292915050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715610f2157600080fd5b604052919050565b600067ffffffffffffffff821115610f3f578081fd5b5060209081020190565b6001600160a01b0381168114610f5e57600080fd5b50565b8015158114610f5e57600080fdfea2646970667358221220211b18970a82784a35af7c8f1be0194a71e74d2be3b3915a493db1656fd4362164736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "315:3458:7:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "315:3458:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;494:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3691:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1772:453::-;;;;;;:::i;:::-;;:::i;:::-;;469:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;361:29::-;;;;;;;;;;;;;:::i;2299:157::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;446:20::-;;;;;;;;;;;;;:::i;515:30::-;;;;;;;;;;;;;:::i;3051:78::-;;;;;;;;;;-1:-1:-1;3051:78:7;;;;;:::i;:::-;;:::i;1046:470::-;;;;;;;;;;-1:-1:-1;1046:470:7;;;;;:::i;:::-;;:::i;426:17::-;;;;;;;;;;;;;:::i;548:30::-;;;;;;;;;;;;;:::i;393:::-;;;;;;;;;;;;;:::i;3367:321::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;494:18::-;;;-1:-1:-1;;;494:18:7;;;;;:::o;3691:80::-;3753:14;;;;;;;;;;;;-1:-1:-1;;;3753:14:7;;;;3691:80;:::o;1772:453::-;995:6;;-1:-1:-1;;;995:6:7;;;;987:15;;;;;;1868:3:::1;::::0;:28:::1;::::0;-1:-1:-1;;;1868:28:7;;1847:18:::1;::::0;-1:-1:-1;;;;;1868:3:7::1;::::0;:13:::1;::::0;:28:::1;::::0;1890:4:::1;::::0;1868:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1847:49;;1900:18;1921:22;1929:13;1921:7;:22::i;:::-;1969:3;::::0;:28:::1;::::0;-1:-1:-1;;;1969:28:7;;1900:43;;-1:-1:-1;1948:18:7::1;::::0;-1:-1:-1;;;;;1969:3:7;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;1991:4:::1;::::0;1969:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1948:49;;2022:1;2009:10;:14;2001:42;;;;-1:-1:-1::0;;;2001:42:7::1;;;;;;;:::i;:::-;;;;;;;;;2048:15;::::0;:36:::1;::::0;-1:-1:-1;;;2048:36:7;;-1:-1:-1;;;;;2048:15:7;;::::1;::::0;:24:::1;::::0;:36:::1;::::0;2073:10;;2048:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2088:15:7::1;:29:::0;;;::::1;::::0;;-1:-1:-1;;2121:15:7::1;:29:::0;;;::::1;::::0;;2159:62:::1;::::0;::::1;::::0;::::1;::::0;2174:10:::1;::::0;2186;;2107;;2140;;2159:62:::1;:::i;:::-;;;;;;;;1006:1;;;1772:453:::0;:::o;469:22::-;;;-1:-1:-1;;;;;469:22:7;;:::o;361:29::-;;;;;;-1:-1:-1;;;;;361:29:7;;:::o;2299:157::-;2343:7;2356:28;;:::i;:::-;2387:15;;:38;;-1:-1:-1;;;2387:38:7;;-1:-1:-1;;;;;2387:15:7;;;;:23;;:38;;2419:4;;2387:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2436:16;;-1:-1:-1;;2299:157:7;:::o;446:20::-;;;-1:-1:-1;;;;;446:20:7;;:::o;515:30::-;;;;:::o;3051:78::-;747:5;;-1:-1:-1;;;;;747:5:7;733:10;:19;;:43;;-1:-1:-1;770:6:7;;;;;-1:-1:-1;;;;;770:6:7;756:10;:20;733:43;721:110;;;;-1:-1:-1;;;721:110:7;;;;;;;:::i;:::-;3109:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;3109:16:7::1;-1:-1:-1::0;;;;3109:16:7;;::::1;::::0;;;::::1;::::0;;3051:78::o;1046:470::-;1472:13:16;;;;;;;;:33;;;1489:16;:14;:16::i;:::-;1472:50;;;-1:-1:-1;1510:12:16;;;;1509:13;1472:50;1464:109;;;;-1:-1:-1;;;1464:109:16;;;;;;;:::i;:::-;1584:19;1607:13;;;;;;1606:14;1630:98;;;;1664:13;:20;;-1:-1:-1;;;;1664:20:16;;;;;1698:19;1680:4;1698:19;;;1630:98;1163:5:7::1;:18:::0;;1171:10:::1;-1:-1:-1::0;;;;;;1163:18:7;;::::1;;::::0;;;1185:7:::1;:70:::0;;1211:42:::1;1185:70:::0;;::::1;;::::0;;1259:3:::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;1259:18:7;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;1281:16:7;;-1:-1:-1;;;;;;1281:16:7::1;::::0;;;::::1;;;::::0;;-1:-1:-1;1301:43:7;;;;::::1;::::0;;::::1;;::::0;;;;1348:115:::1;::::0;-1:-1:-1;;;1348:115:7;;:3;;::::1;::::0;:11:::1;::::0;:115:::1;::::0;1372:15;;;::::1;::::0;-1:-1:-1;;;1348:115:7::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1499:6:7::1;:13:::0;;-1:-1:-1;;;;1499:13:7::1;-1:-1:-1::0;;;1499:13:7::1;::::0;;1750:66:16;;;;1800:5;1784:21;;-1:-1:-1;;1784:21:16;;;1750:66;1046:470:7;;;;:::o;426:17::-;;;-1:-1:-1;;;;;426:17:7;;:::o;548:30::-;;;;:::o;393:::-;;;-1:-1:-1;;;;;393:30:7;;:::o;3367:321::-;747:5;;3412:7;;;;-1:-1:-1;;;;;747:5:7;733:10;:19;;:43;;-1:-1:-1;770:6:7;;;;;-1:-1:-1;;;;;770:6:7;756:10;:20;733:43;721:110;;;;-1:-1:-1;;;721:110:7;;;;;;;:::i;:::-;3434:15:::1;;;;;;;;;-1:-1:-1::0;;;;;3434:15:7::1;-1:-1:-1::0;;;;;3434:29:7::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3490:3:7::1;::::0;:28:::1;::::0;-1:-1:-1;;;3490:28:7;;3469:18:::1;::::0;-1:-1:-1;;;;;;3490:3:7;;::::1;::::0;-1:-1:-1;3490:13:7::1;::::0;:28:::1;::::0;3512:4:::1;::::0;3490:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3568:3;::::0;3522:18:::1;3581:6:::0;3568:32:::1;::::0;-1:-1:-1;;;3568:32:7;;3469:49;;-1:-1:-1;3543:21:7::1;::::0;-1:-1:-1;;;;;3568:3:7;;::::1;::::0;:12:::1;::::0;:32:::1;::::0;3581:6;;;::::1;::::0;;::::1;::::0;3469:49;;3568:32:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3604:6:7::1;::::0;;:27:::1;::::0;:6;;;::::1;-1:-1:-1::0;;;;;3604:6:7::1;::::0;:27:::1;::::0;::::1;;::::0;;;;:6;:27;;:6;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;3635:6:7::1;:14:::0;;-1:-1:-1;;;;3635:14:7::1;::::0;;3661:10;;-1:-1:-1;3673:10:7;-1:-1:-1;3367:321:7;;:::o;2647:401::-;2705:7;2760:21;2789:15;2785:29;;2813:1;2806:8;;;;;2785:29;2842:16;;;2856:1;2842:16;;;2818:21;2842:16;;;;;2818:21;2842:16;;;;;;;;-1:-1:-1;;2880:3:7;;2862:7;;;;-1:-1:-1;;;;;;2880:3:7;;2862:7;;-1:-1:-1;2880:3:7;;2862:7;;;;;;;;;;;:22;-1:-1:-1;;;;;2862:22:7;;;-1:-1:-1;;;;;2862:22:7;;;;;2898:7;;;;;;;;;-1:-1:-1;;;;;2898:7:7;-1:-1:-1;;;;;2898:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2888:4;2893:1;2888:7;;;;;;;;-1:-1:-1;;;;;2888:24:7;;;:7;;;;;;;;;:24;2916:7;;;:107;;-1:-1:-1;;;2916:107:7;;:7;;;:29;;2954:10;;2916:107;;2971:13;;2989:4;;3006;;3016:3;;2916:107;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2916:107:7;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3034:10:7;;-1:-1:-1;;2647:401:7;;;;:::o;1912:593:16:-;2348:4;2456:17;2491:7;1912:593;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;2271:263::-;;2386:2;2374:9;2365:7;2361:23;2357:32;2354:2;;;-1:-1;;2392:12;2354:2;226:6;220:13;238:33;265:5;238:33;:::i;:::-;2444:74;2348:186;-1:-1;;;2348:186::o;2541:507::-;;;;2687:2;2675:9;2666:7;2662:23;2658:32;2655:2;;;-1:-1;;2693:12;2655:2;371:6;358:20;383:41;418:5;383:41;:::i;:::-;2745:71;-1:-1;2853:2;2892:22;;72:20;97:33;72:20;97:33;:::i;:::-;2861:63;-1:-1;2961:2;3000:22;;72:20;97:33;72:20;97:33;:::i;:::-;2969:63;;;;2649:399;;;;;:::o;3055:392::-;;3195:2;;3183:9;3174:7;3170:23;3166:32;3163:2;;;-1:-1;;3201:12;3163:2;3252:17;3246:24;3290:18;3282:6;3279:30;3276:2;;;-1:-1;;3312:12;3276:2;3399:22;;575:4;563:17;;559:27;-1:-1;549:2;;-1:-1;;590:12;549:2;630:6;624:13;652:80;667:64;724:6;667:64;:::i;:::-;652:80;:::i;:::-;760:21;;;817:14;;;;792:17;;;906;;;897:27;;;;894:36;-1:-1;891:2;;;-1:-1;;933:12;891:2;-1:-1;959:10;;953:217;978:6;975:1;972:13;953:217;;;2208:13;;1046:61;;1000:1;993:9;;;;;1121:14;;;;1149;;953:217;;;-1:-1;3332:99;3157:290;-1:-1;;;;;;;3157:290::o;3454:235::-;;3555:2;3543:9;3534:7;3530:23;3526:32;3523:2;;;-1:-1;;3561:12;3523:2;1261:6;1248:20;1273:30;1297:5;1273:30;:::i;3696:257::-;;3808:2;3796:9;3787:7;3783:23;3779:32;3776:2;;;-1:-1;;3814:12;3776:2;1396:6;1390:13;1408:30;1432:5;1408:30;:::i;3960:309::-;;4098:2;4086:9;4077:7;4073:23;4069:32;4066:2;;;-1:-1;;4104:12;4066:2;1637:20;4098:2;1637:20;:::i;:::-;2214:6;2208:13;1726:16;1719:86;1871:2;1940:9;1936:22;2208:13;1871:2;1890:5;1886:16;1879:86;4156:97;;;;4060:209;;;;:::o;4276:241::-;;4380:2;4368:9;4359:7;4355:23;4351:32;4348:2;;;-1:-1;;4386:12;4348:2;-1:-1;2060:20;;4342:175;-1:-1;4342:175::o;4524:263::-;;4639:2;4627:9;4618:7;4614:23;4610:32;4607:2;;;-1:-1;;4645:12;4607:2;-1:-1;2208:13;;4601:186;-1:-1;4601:186::o;8709:222::-;-1:-1;;;;;16600:54;;;;5212:45;;8836:2;8821:18;;8807:124::o;9444:349::-;-1:-1;;;;;16600:54;;;;5055:58;;9779:2;9764:18;;8660:37;9607:2;9592:18;;9578:215::o;9800:572::-;-1:-1;;;;;16600:54;;;;5055:58;;10192:2;10177:18;;8660:37;;;;10275:2;10260:18;;8660:37;10358:2;10343:18;;8660:37;10019:3;10004:19;;9990:382::o;10889:210::-;16512:13;;16505:21;6293:34;;11010:2;10995:18;;10981:118::o;11881:310::-;;12028:2;;12049:17;12042:47;7274:5;15598:12;16014:6;12028:2;12017:9;12013:18;16002:19;-1:-1;18258:101;18272:6;18269:1;18266:13;18258:101;;;18339:11;;;;;18333:18;18320:11;;;16042:14;18320:11;18313:39;18287:10;;18258:101;;;18374:6;18371:1;18368:13;18365:2;;;-1:-1;16042:14;18430:6;12017:9;18421:16;;18414:27;18365:2;-1:-1;18546:7;18530:14;-1:-1;;18526:28;7432:39;;;;16042:14;7432:39;;11999:192;-1:-1;;;11999:192::o;12198:416::-;12398:2;12412:47;;;7708:2;12383:18;;;16002:19;-1:-1;;;16042:14;;;7724:38;7781:12;;;12369:245::o;12621:416::-;12821:2;12835:47;;;8032:2;12806:18;;;16002:19;8068:34;16042:14;;;8048:55;-1:-1;;;8123:12;;;8116:38;8173:12;;;12792:245::o;13044:416::-;13244:2;13258:47;;;8424:2;13229:18;;;16002:19;8460:34;16042:14;;;8440:55;-1:-1;;;8515:12;;;8508:36;8563:12;;;13215:245::o;13467:222::-;8660:37;;;13594:2;13579:18;;13565:124::o;13696:720::-;;13965:3;13954:9;13950:19;8690:5;8667:3;8660:37;14084:2;13965:3;14084:2;14073:9;14069:18;14062:48;14124:108;5723:5;15598:12;16014:6;16009:3;16002:19;16042:14;13954:9;16042:14;5735:93;;14084:2;5899:5;15452:14;5911:21;;-1:-1;5938:260;5963:6;5960:1;5957:13;5938:260;;;6024:13;;-1:-1;;;;;16600:54;5212:45;;15857:14;;;;4948;;;;3290:18;5978:9;5938:260;;;-1:-1;;;;;;;16600:54;;;;14319:2;14304:18;;5055:58;-1:-1;;;14402:2;14387:18;8660:37;14116:116;13936:480;-1:-1;;13936:480::o;14423:333::-;8660:37;;;14742:2;14727:18;;8660:37;14578:2;14563:18;;14549:207::o;14763:256::-;14825:2;14819:9;14851:17;;;14926:18;14911:34;;14947:22;;;14908:62;14905:2;;;14983:1;;14973:12;14905:2;14825;14992:22;14803:216;;-1:-1;14803:216::o;15026:304::-;;15185:18;15177:6;15174:30;15171:2;;;-1:-1;;15207:12;15171:2;-1:-1;15252:4;15240:17;;;15305:15;;15108:222::o;18567:117::-;-1:-1;;;;;16600:54;;18626:35;;18616:2;;18675:1;;18665:12;18616:2;18610:74;:::o;18831:111::-;18912:5;16512:13;16505:21;18890:5;18887:32;18877:2;;18933:1;;18923:12",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0;\n\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../Interfaces.sol\";\n\n/**\n * @title DonationStaking contract that receives funds in ETH/DAI\n * and stake them in the SimpleStaking contract\n */\ncontract DonationsStaking is Initializable {\n\taddress payable public avatar;\n\tStaking public stakingContract;\n\tcERC20 public DAI;\n\taddress public owner;\n\tUniswap public uniswap;\n\tbool public active;\n\tuint256 public totalETHDonated;\n\tuint256 public totalDAIDonated;\n\n\tevent DonationStaked(\n\t\taddress caller,\n\t\tuint256 stakedDAI,\n\t\tuint256 ethDonated,\n\t\tuint256 daiDonated\n\t);\n\n\tmodifier ownerOrAvatar() {\n\t\trequire(\n\t\t\tmsg.sender == owner || msg.sender == avatar,\n\t\t\t\"Only owner or avatar can perform this action\"\n\t\t);\n\t\t_;\n\t}\n\n\tmodifier onlyAvatar() {\n\t\trequire(\n\t\t\tmsg.sender == avatar,\n\t\t\t\"Only DAO avatar can perform this action\"\n\t\t);\n\t\t_;\n\t}\n\n\tmodifier isActive() {\n\t\trequire(active);\n\t\t_;\n\t}\n\n\treceive() external payable {}\n\n\tfunction initialize(\n\t\taddress payable _avatar,\n\t\taddress _stakingContract,\n\t\taddress _dai\n\t) public initializer {\n\t\towner = msg.sender;\n\t\tuniswap = Uniswap(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D));\n\t\tDAI = cERC20(_dai);\n\t\tavatar = _avatar;\n\t\tstakingContract = Staking(_stakingContract);\n\t\tDAI.approve(\n\t\t\taddress(stakingContract),\n\t\t\t0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n\t\t); //we trust the staking contract\n\t\tactive = true;\n\t}\n\n\t/**\n\t * @dev stake available funds. It\n\t * take balance in eth and buy DAI from uniswap then stake outstanding DAI balance.\n\t * anyone can call this.\n\t * @param _minDAIAmount enforce expected return from uniswap when converting eth balance to DAI\n\t */\n\tfunction stakeDonations(uint256 _minDAIAmount) public payable isActive {\n\t\tuint256 daiDonated = DAI.balanceOf(address(this));\n\t\tuint256 ethDonated = _buyDAI(_minDAIAmount);\n\n\t\tuint256 daiBalance = DAI.balanceOf(address(this));\n\t\trequire(daiBalance > 0, \"no DAI to stake\");\n\n\t\tstakingContract.stakeDAI(daiBalance);\n\t\ttotalETHDonated += ethDonated;\n\t\ttotalDAIDonated += daiDonated;\n\t\temit DonationStaked(msg.sender, daiBalance, ethDonated, daiDonated);\n\t}\n\n\t/**\n\t * @dev total DAI value staked\n\t * @return DAI value staked\n\t */\n\tfunction totalStaked() public view returns (uint256) {\n\t\tStaking.Staker memory staker = stakingContract.stakers(address(this));\n\t\treturn staker.stakedDAI;\n\t}\n\n\t/**\n\t * @dev internal method to buy DAI from uniswap\n\t * @param _minDAIAmount enforce expected return from uniswap when converting eth balance to DAI\n\t * @return eth value converted\n\t */\n\tfunction _buyDAI(uint256 _minDAIAmount) internal returns (uint256) {\n\t\t//buy from uniwasp\n\t\tuint256 ethBalance = address(this).balance;\n\t\tif (ethBalance == 0) return 0;\n\t\taddress[] memory path = new address[](2);\n\t\tpath[1] = address(DAI);\n\t\tpath[0] = uniswap.WETH();\n\t\tuniswap.swapExactETHForTokens{ value: ethBalance }(\n\t\t\t_minDAIAmount,\n\t\t\tpath,\n\t\t\taddress(this),\n\t\t\tnow\n\t\t);\n\t\treturn ethBalance;\n\t}\n\n\tfunction setActive(bool _active) public ownerOrAvatar {\n\t\tactive = _active;\n\t}\n\n\t/**\n\t * @dev withdraws all stakes and then transfer all balances to avatar\n\t * this can also be called by owner(Foundation) but it is safe as funds are transfered to avatarMock\n\t * and only avatar can upgrade this contract logic\n\t */\n\tfunction end() public ownerOrAvatar returns (uint256, uint256) {\n\t\tstakingContract.withdrawStake();\n\t\tuint256 daiBalance = DAI.balanceOf(address(this));\n\t\tuint256 ethBalance = address(this).balance;\n\t\tDAI.transfer(avatar, daiBalance);\n\t\tavatar.transfer(ethBalance);\n\t\tactive = false;\n\t\treturn (daiBalance, ethBalance);\n\t}\n\n\tfunction getVersion() public pure returns (string memory) {\n\t\treturn \"1.1.0\";\n\t}\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/DonationsStaking.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/DonationsStaking.sol",
    "exportedSymbols": {
      "DonationsStaking": [
        5127
      ]
    },
    "id": 5128,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4769,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:24:7"
      },
      {
        "id": 4770,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "59:33:7"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "id": 4771,
        "nodeType": "ImportDirective",
        "scope": 5128,
        "sourceUnit": 8212,
        "src": "94:69:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol",
        "file": "../Interfaces.sol",
        "id": 4772,
        "nodeType": "ImportDirective",
        "scope": 5128,
        "sourceUnit": 552,
        "src": "164:27:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4774,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8211,
              "src": "344:13:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$8211",
                "typeString": "contract Initializable"
              }
            },
            "id": 4775,
            "nodeType": "InheritanceSpecifier",
            "src": "344:13:7"
          }
        ],
        "contractDependencies": [
          8211
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 4773,
          "nodeType": "StructuredDocumentation",
          "src": "193:121:7",
          "text": " @title DonationStaking contract that receives funds in ETH/DAI\n and stake them in the SimpleStaking contract"
        },
        "fullyImplemented": true,
        "id": 5127,
        "linearizedBaseContracts": [
          5127,
          8211
        ],
        "name": "DonationsStaking",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "5aef7de6",
            "id": 4777,
            "mutability": "mutable",
            "name": "avatar",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "361:29:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 4776,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "361:15:7",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ee99205c",
            "id": 4779,
            "mutability": "mutable",
            "name": "stakingContract",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "393:30:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Staking_$351",
              "typeString": "contract Staking"
            },
            "typeName": {
              "contractScope": null,
              "id": 4778,
              "name": "Staking",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 351,
              "src": "393:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Staking_$351",
                "typeString": "contract Staking"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "e0bab4c4",
            "id": 4781,
            "mutability": "mutable",
            "name": "DAI",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "426:17:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_cERC20_$309",
              "typeString": "contract cERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 4780,
              "name": "cERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 309,
              "src": "426:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_cERC20_$309",
                "typeString": "contract cERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 4783,
            "mutability": "mutable",
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "446:20:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4782,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "446:7:7",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2681f7e4",
            "id": 4785,
            "mutability": "mutable",
            "name": "uniswap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "469:22:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Uniswap_$444",
              "typeString": "contract Uniswap"
            },
            "typeName": {
              "contractScope": null,
              "id": 4784,
              "name": "Uniswap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 444,
              "src": "469:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Uniswap_$444",
                "typeString": "contract Uniswap"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "02fb0c5e",
            "id": 4787,
            "mutability": "mutable",
            "name": "active",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "494:18:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 4786,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "494:4:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "90420628",
            "id": 4789,
            "mutability": "mutable",
            "name": "totalETHDonated",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "515:30:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4788,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "515:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ea1eba71",
            "id": 4791,
            "mutability": "mutable",
            "name": "totalDAIDonated",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "548:30:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4790,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "548:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4801,
            "name": "DonationStaked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4793,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "606:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "606:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4795,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "stakedDAI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "624:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "624:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4797,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "ethDonated",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "645:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4796,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "645:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4799,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "daiDonated",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "667:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4798,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "667:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "602:86:7"
            },
            "src": "582:107:7"
          },
          {
            "body": {
              "id": 4817,
              "nodeType": "Block",
              "src": "717:123:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4804,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "733:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4805,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "733:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4806,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4783,
                            "src": "747:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "733:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          "id": 4811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4808,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "756:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "756:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4810,
                            "name": "avatar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4777,
                            "src": "770:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "756:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "733:43:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206f776e6572206f72206176617461722063616e20706572666f726d207468697320616374696f6e",
                        "id": 4813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "781:46:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c25984da557f35037d2891f594d5804eb4670ecdff16d66f4e6af613e4465384",
                          "typeString": "literal_string \"Only owner or avatar can perform this action\""
                        },
                        "value": "Only owner or avatar can perform this action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c25984da557f35037d2891f594d5804eb4670ecdff16d66f4e6af613e4465384",
                          "typeString": "literal_string \"Only owner or avatar can perform this action\""
                        }
                      ],
                      "id": 4803,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "721:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "721:110:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4815,
                  "nodeType": "ExpressionStatement",
                  "src": "721:110:7"
                },
                {
                  "id": 4816,
                  "nodeType": "PlaceholderStatement",
                  "src": "835:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 4818,
            "name": "ownerOrAvatar",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 4802,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "714:2:7"
            },
            "src": "692:148:7",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4829,
              "nodeType": "Block",
              "src": "865:95:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "id": 4824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4821,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "881:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "881:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4823,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4777,
                          "src": "895:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "881:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792044414f206176617461722063616e20706572666f726d207468697320616374696f6e",
                        "id": 4825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "906:41:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7bce5418ccf131c86ef10cf50737f7535137691c561f6dc76412136411e6f7fb",
                          "typeString": "literal_string \"Only DAO avatar can perform this action\""
                        },
                        "value": "Only DAO avatar can perform this action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7bce5418ccf131c86ef10cf50737f7535137691c561f6dc76412136411e6f7fb",
                          "typeString": "literal_string \"Only DAO avatar can perform this action\""
                        }
                      ],
                      "id": 4820,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "869:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "869:82:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4827,
                  "nodeType": "ExpressionStatement",
                  "src": "869:82:7"
                },
                {
                  "id": 4828,
                  "nodeType": "PlaceholderStatement",
                  "src": "955:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 4830,
            "name": "onlyAvatar",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 4819,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "862:2:7"
            },
            "src": "843:117:7",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4837,
              "nodeType": "Block",
              "src": "983:28:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4833,
                        "name": "active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4787,
                        "src": "995:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4832,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "987:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4834,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "987:15:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4835,
                  "nodeType": "ExpressionStatement",
                  "src": "987:15:7"
                },
                {
                  "id": 4836,
                  "nodeType": "PlaceholderStatement",
                  "src": "1006:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 4838,
            "name": "isActive",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 4831,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "980:2:7"
            },
            "src": "963:48:7",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4841,
              "nodeType": "Block",
              "src": "1041:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 4842,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4839,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1021:2:7"
            },
            "returnParameters": {
              "id": 4840,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1041:0:7"
            },
            "scope": 5127,
            "src": "1014:29:7",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4897,
              "nodeType": "Block",
              "src": "1159:357:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4853,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4783,
                      "src": "1163:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4854,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "1171:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1171:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1163:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4857,
                  "nodeType": "ExpressionStatement",
                  "src": "1163:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4858,
                      "name": "uniswap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4785,
                      "src": "1185:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Uniswap_$444",
                        "typeString": "contract Uniswap"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307837613235306435363330423463463533393733396446324335644163623463363539463234383844",
                              "id": 4862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1211:42:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "value": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1203:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4860,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1203:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 4863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1203:51:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4859,
                        "name": "Uniswap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 444,
                        "src": "1195:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Uniswap_$444_$",
                          "typeString": "type(contract Uniswap)"
                        }
                      },
                      "id": 4864,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1195:60:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Uniswap_$444",
                        "typeString": "contract Uniswap"
                      }
                    },
                    "src": "1185:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Uniswap_$444",
                      "typeString": "contract Uniswap"
                    }
                  },
                  "id": 4866,
                  "nodeType": "ExpressionStatement",
                  "src": "1185:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4867,
                      "name": "DAI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4781,
                      "src": "1259:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$309",
                        "typeString": "contract cERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4869,
                          "name": "_dai",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4848,
                          "src": "1272:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4868,
                        "name": "cERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 309,
                        "src": "1265:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_cERC20_$309_$",
                          "typeString": "type(contract cERC20)"
                        }
                      },
                      "id": 4870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1265:12:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$309",
                        "typeString": "contract cERC20"
                      }
                    },
                    "src": "1259:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$309",
                      "typeString": "contract cERC20"
                    }
                  },
                  "id": 4872,
                  "nodeType": "ExpressionStatement",
                  "src": "1259:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4873,
                      "name": "avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4777,
                      "src": "1281:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4874,
                      "name": "_avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4844,
                      "src": "1290:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1281:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 4876,
                  "nodeType": "ExpressionStatement",
                  "src": "1281:16:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4877,
                      "name": "stakingContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4779,
                      "src": "1301:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Staking_$351",
                        "typeString": "contract Staking"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4879,
                          "name": "_stakingContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4846,
                          "src": "1327:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4878,
                        "name": "Staking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 351,
                        "src": "1319:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Staking_$351_$",
                          "typeString": "type(contract Staking)"
                        }
                      },
                      "id": 4880,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1319:25:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Staking_$351",
                        "typeString": "contract Staking"
                      }
                    },
                    "src": "1301:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Staking_$351",
                      "typeString": "contract Staking"
                    }
                  },
                  "id": 4882,
                  "nodeType": "ExpressionStatement",
                  "src": "1301:43:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4888,
                            "name": "stakingContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "1372:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Staking_$351",
                              "typeString": "contract Staking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Staking_$351",
                              "typeString": "contract Staking"
                            }
                          ],
                          "id": 4887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1364:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4886,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1364:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1364:24:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666",
                        "id": 4890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1393:66:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9935"
                        },
                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9935"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4883,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "1348:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 4885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 308,
                      "src": "1348:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 4891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1348:115:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4892,
                  "nodeType": "ExpressionStatement",
                  "src": "1348:115:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4893,
                      "name": "active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4787,
                      "src": "1499:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 4894,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1508:4:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1499:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4896,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:13:7"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "c0c53b8b",
            "id": 4898,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4851,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4850,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8188,
                  "src": "1147:11:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1147:11:7"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4849,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4844,
                  "mutability": "mutable",
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4898,
                  "src": "1069:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4843,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1069:15:7",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4846,
                  "mutability": "mutable",
                  "name": "_stakingContract",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4898,
                  "src": "1096:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4845,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1096:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4848,
                  "mutability": "mutable",
                  "name": "_dai",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4898,
                  "src": "1124:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4847,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1124:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1065:74:7"
            },
            "returnParameters": {
              "id": 4852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1159:0:7"
            },
            "scope": 5127,
            "src": "1046:470:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4961,
              "nodeType": "Block",
              "src": "1843:382:7",
              "statements": [
                {
                  "assignments": [
                    4907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4907,
                      "mutability": "mutable",
                      "name": "daiDonated",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4961,
                      "src": "1847:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4906,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1847:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4915,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4912,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1890:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 4911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1882:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4910,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1882:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1882:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4908,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "1868:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 4909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 290,
                      "src": "1868:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 4914,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1868:28:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1847:49:7"
                },
                {
                  "assignments": [
                    4917
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4917,
                      "mutability": "mutable",
                      "name": "ethDonated",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4961,
                      "src": "1900:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4916,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1900:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4921,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4919,
                        "name": "_minDAIAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4901,
                        "src": "1929:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4918,
                      "name": "_buyDAI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5051,
                      "src": "1921:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1921:22:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1900:43:7"
                },
                {
                  "assignments": [
                    4923
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4923,
                      "mutability": "mutable",
                      "name": "daiBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4961,
                      "src": "1948:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4922,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1948:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4931,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4928,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1991:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 4927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1983:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4926,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1983:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1983:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4924,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "1969:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 4925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 290,
                      "src": "1969:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 4930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1969:28:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1948:49:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4933,
                          "name": "daiBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4923,
                          "src": "2009:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2022:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2009:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f2044414920746f207374616b65",
                        "id": 4936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2025:17:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_672960139dca2fd59bd79edd62cfe77c3ac268980716a82f3c707a594a696c9d",
                          "typeString": "literal_string \"no DAI to stake\""
                        },
                        "value": "no DAI to stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_672960139dca2fd59bd79edd62cfe77c3ac268980716a82f3c707a594a696c9d",
                          "typeString": "literal_string \"no DAI to stake\""
                        }
                      ],
                      "id": 4932,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2001:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2001:42:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4938,
                  "nodeType": "ExpressionStatement",
                  "src": "2001:42:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4942,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4923,
                        "src": "2073:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4939,
                        "name": "stakingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "2048:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Staking_$351",
                          "typeString": "contract Staking"
                        }
                      },
                      "id": 4941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakeDAI",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 340,
                      "src": "2048:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 4943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2048:36:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4944,
                  "nodeType": "ExpressionStatement",
                  "src": "2048:36:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4945,
                      "name": "totalETHDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4789,
                      "src": "2088:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4946,
                      "name": "ethDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4917,
                      "src": "2107:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2088:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4948,
                  "nodeType": "ExpressionStatement",
                  "src": "2088:29:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4949,
                      "name": "totalDAIDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4791,
                      "src": "2121:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4950,
                      "name": "daiDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4907,
                      "src": "2140:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2121:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4952,
                  "nodeType": "ExpressionStatement",
                  "src": "2121:29:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4954,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2174:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2174:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4956,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4923,
                        "src": "2186:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4957,
                        "name": "ethDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4917,
                        "src": "2198:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4958,
                        "name": "daiDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4907,
                        "src": "2210:10:7",
                        "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"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4953,
                      "name": "DonationStaked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4801,
                      "src": "2159:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 4959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2159:62:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4960,
                  "nodeType": "EmitStatement",
                  "src": "2154:67:7"
                }
              ]
            },
            "documentation": {
              "id": 4899,
              "nodeType": "StructuredDocumentation",
              "src": "1519:251:7",
              "text": " @dev stake available funds. It\n take balance in eth and buy DAI from uniswap then stake outstanding DAI balance.\n anyone can call this.\n @param _minDAIAmount enforce expected return from uniswap when converting eth balance to DAI"
            },
            "functionSelector": "2124e2df",
            "id": 4962,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4904,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4903,
                  "name": "isActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4838,
                  "src": "1834:8:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1834:8:7"
              }
            ],
            "name": "stakeDonations",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4902,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4901,
                  "mutability": "mutable",
                  "name": "_minDAIAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4962,
                  "src": "1796:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4900,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1796:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1795:23:7"
            },
            "returnParameters": {
              "id": 4905,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1843:0:7"
            },
            "scope": 5127,
            "src": "1772:453:7",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4983,
              "nodeType": "Block",
              "src": "2352:104:7",
              "statements": [
                {
                  "assignments": [
                    4971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4971,
                      "mutability": "mutable",
                      "name": "staker",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4983,
                      "src": "2356:28:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Staker_$335_memory_ptr",
                        "typeString": "struct Staking.Staker"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4970,
                        "name": "Staking.Staker",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 335,
                        "src": "2356:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Staker_$335_storage_ptr",
                          "typeString": "struct Staking.Staker"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4979,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4976,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2419:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 4975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2411:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4974,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2411:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2411:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4972,
                        "name": "stakingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "2387:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Staking_$351",
                          "typeString": "contract Staking"
                        }
                      },
                      "id": 4973,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakers",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 350,
                      "src": "2387:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_Staker_$335_memory_ptr_$",
                        "typeString": "function (address) view external returns (struct Staking.Staker memory)"
                      }
                    },
                    "id": 4978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2387:38:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Staker_$335_memory_ptr",
                      "typeString": "struct Staking.Staker memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2356:69:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 4980,
                      "name": "staker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4971,
                      "src": "2436:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Staker_$335_memory_ptr",
                        "typeString": "struct Staking.Staker memory"
                      }
                    },
                    "id": 4981,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "stakedDAI",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 332,
                    "src": "2436:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4967,
                  "id": 4982,
                  "nodeType": "Return",
                  "src": "2429:23:7"
                }
              ]
            },
            "documentation": {
              "id": 4963,
              "nodeType": "StructuredDocumentation",
              "src": "2228:69:7",
              "text": " @dev total DAI value staked\n @return DAI value staked"
            },
            "functionSelector": "817b1cd2",
            "id": 4984,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalStaked",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4964,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2319:2:7"
            },
            "returnParameters": {
              "id": 4967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4966,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4984,
                  "src": "2343:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4965,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2343:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2342:9:7"
            },
            "scope": 5127,
            "src": "2299:157:7",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5050,
              "nodeType": "Block",
              "src": "2714:334:7",
              "statements": [
                {
                  "assignments": [
                    4993
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4993,
                      "mutability": "mutable",
                      "name": "ethBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5050,
                      "src": "2739:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4992,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2739:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4999,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4996,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "2768:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        ],
                        "id": 4995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2760:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 4994,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2760:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 4997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2760:13:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2760:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2739:42:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5000,
                      "name": "ethBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4993,
                      "src": "2789:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2803:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2789:15:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5005,
                  "nodeType": "IfStatement",
                  "src": "2785:29:7",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2813:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 4991,
                    "id": 5004,
                    "nodeType": "Return",
                    "src": "2806:8:7"
                  }
                },
                {
                  "assignments": [
                    5010
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5010,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5050,
                      "src": "2818:21:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5008,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2818:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5009,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2818:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 5014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2856:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 5013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2842:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5011,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2846:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5012,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2846:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 5015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2842:16:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2818:40:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5017,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5010,
                        "src": "2862:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 5019,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 5018,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2867:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2862:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5022,
                          "name": "DAI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4781,
                          "src": "2880:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_cERC20_$309",
                            "typeString": "contract cERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_cERC20_$309",
                            "typeString": "contract cERC20"
                          }
                        ],
                        "id": 5021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2872:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 5020,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2872:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 5023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2872:12:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2862:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5025,
                  "nodeType": "ExpressionStatement",
                  "src": "2862:22:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5026,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5010,
                        "src": "2888:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 5028,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2893:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2888:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5029,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4785,
                          "src": "2898:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 5030,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "WETH",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 405,
                        "src": "2898:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                          "typeString": "function () pure external returns (address)"
                        }
                      },
                      "id": 5031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2898:14:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2888:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5033,
                  "nodeType": "ExpressionStatement",
                  "src": "2888:24:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5039,
                        "name": "_minDAIAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4987,
                        "src": "2971:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5040,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5010,
                        "src": "2989:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5043,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3006:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 5042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2998:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5041,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2998:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 5044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2998:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5045,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -17,
                        "src": "3016:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5034,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4785,
                          "src": "2916:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 5036,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "swapExactETHForTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 366,
                        "src": "2916:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                        }
                      },
                      "id": 5038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "id": 5037,
                          "name": "ethBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4993,
                          "src": "2954:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "2916:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$value",
                        "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                      }
                    },
                    "id": 5046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2916:107:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 5047,
                  "nodeType": "ExpressionStatement",
                  "src": "2916:107:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5048,
                    "name": "ethBalance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4993,
                    "src": "3034:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4991,
                  "id": 5049,
                  "nodeType": "Return",
                  "src": "3027:17:7"
                }
              ]
            },
            "documentation": {
              "id": 4985,
              "nodeType": "StructuredDocumentation",
              "src": "2459:186:7",
              "text": " @dev internal method to buy DAI from uniswap\n @param _minDAIAmount enforce expected return from uniswap when converting eth balance to DAI\n @return eth value converted"
            },
            "id": 5051,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_buyDAI",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4987,
                  "mutability": "mutable",
                  "name": "_minDAIAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5051,
                  "src": "2664:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2664:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2663:23:7"
            },
            "returnParameters": {
              "id": 4991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4990,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5051,
                  "src": "2705:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2705:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2704:9:7"
            },
            "scope": 5127,
            "src": "2647:401:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5062,
              "nodeType": "Block",
              "src": "3105:24:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5058,
                      "name": "active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4787,
                      "src": "3109:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5059,
                      "name": "_active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5053,
                      "src": "3118:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3109:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5061,
                  "nodeType": "ExpressionStatement",
                  "src": "3109:16:7"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "acec338a",
            "id": 5063,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5056,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5055,
                  "name": "ownerOrAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4818,
                  "src": "3091:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3091:13:7"
              }
            ],
            "name": "setActive",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5053,
                  "mutability": "mutable",
                  "name": "_active",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5063,
                  "src": "3070:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5052,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3070:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3069:14:7"
            },
            "returnParameters": {
              "id": 5057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3105:0:7"
            },
            "scope": 5127,
            "src": "3051:78:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5117,
              "nodeType": "Block",
              "src": "3430:258:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5073,
                        "name": "stakingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "3434:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Staking_$351",
                          "typeString": "contract Staking"
                        }
                      },
                      "id": 5075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawStake",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 343,
                      "src": "3434:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 5076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3434:31:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5077,
                  "nodeType": "ExpressionStatement",
                  "src": "3434:31:7"
                },
                {
                  "assignments": [
                    5079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5079,
                      "mutability": "mutable",
                      "name": "daiBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5117,
                      "src": "3469:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5078,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3469:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5087,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5084,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3512:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 5083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3504:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5082,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3504:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 5085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3504:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5080,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "3490:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 5081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 290,
                      "src": "3490:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 5086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3490:28:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3469:49:7"
                },
                {
                  "assignments": [
                    5089
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5089,
                      "mutability": "mutable",
                      "name": "ethBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5117,
                      "src": "3522:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5088,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3522:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5095,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5092,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "3551:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        ],
                        "id": 5091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3543:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 5090,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3543:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 5093,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3543:13:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 5094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3543:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3522:42:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5099,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4777,
                        "src": "3581:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5100,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5079,
                        "src": "3589:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5096,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "3568:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 5098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 299,
                      "src": "3568:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 5101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3568:32:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5102,
                  "nodeType": "ExpressionStatement",
                  "src": "3568:32:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5106,
                        "name": "ethBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5089,
                        "src": "3620:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5103,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4777,
                        "src": "3604:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 5105,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3604:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 5107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3604:27:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5108,
                  "nodeType": "ExpressionStatement",
                  "src": "3604:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5109,
                      "name": "active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4787,
                      "src": "3635:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 5110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3644:5:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "3635:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5112,
                  "nodeType": "ExpressionStatement",
                  "src": "3635:14:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5113,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5079,
                        "src": "3661:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5114,
                        "name": "ethBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5089,
                        "src": "3673:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5115,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3660:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 5072,
                  "id": 5116,
                  "nodeType": "Return",
                  "src": "3653:31:7"
                }
              ]
            },
            "documentation": {
              "id": 5064,
              "nodeType": "StructuredDocumentation",
              "src": "3132:233:7",
              "text": " @dev withdraws all stakes and then transfer all balances to avatar\n this can also be called by owner(Foundation) but it is safe as funds are transfered to avatarMock\n and only avatar can upgrade this contract logic"
            },
            "functionSelector": "efbe1c1c",
            "id": 5118,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5067,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5066,
                  "name": "ownerOrAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4818,
                  "src": "3389:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3389:13:7"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3379:2:7"
            },
            "returnParameters": {
              "id": 5072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5069,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5118,
                  "src": "3412:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5068,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3412:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5071,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5118,
                  "src": "3421:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5070,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3421:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3411:18:7"
            },
            "scope": 5127,
            "src": "3367:321:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5125,
              "nodeType": "Block",
              "src": "3749:22:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "312e312e30",
                    "id": 5123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3760:7:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_6815ba53416ba06aff1932cc76b3832272bafab9bc8e066be382e32b06ba5546",
                      "typeString": "literal_string \"1.1.0\""
                    },
                    "value": "1.1.0"
                  },
                  "functionReturnParameters": 5122,
                  "id": 5124,
                  "nodeType": "Return",
                  "src": "3753:14:7"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0d8e6e2c",
            "id": 5126,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3710:2:7"
            },
            "returnParameters": {
              "id": 5122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5121,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5126,
                  "src": "3734:13:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5120,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3734:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3733:15:7"
            },
            "scope": 5127,
            "src": "3691:80:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5128,
        "src": "315:3458:7"
      }
    ],
    "src": "33:3741:7"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/staking/DonationsStaking.sol",
    "exportedSymbols": {
      "DonationsStaking": [
        5127
      ]
    },
    "id": 5128,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4769,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:24:7"
      },
      {
        "id": 4770,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "59:33:7"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "id": 4771,
        "nodeType": "ImportDirective",
        "scope": 5128,
        "sourceUnit": 8212,
        "src": "94:69:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol",
        "file": "../Interfaces.sol",
        "id": 4772,
        "nodeType": "ImportDirective",
        "scope": 5128,
        "sourceUnit": 552,
        "src": "164:27:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4774,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8211,
              "src": "344:13:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$8211",
                "typeString": "contract Initializable"
              }
            },
            "id": 4775,
            "nodeType": "InheritanceSpecifier",
            "src": "344:13:7"
          }
        ],
        "contractDependencies": [
          8211
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 4773,
          "nodeType": "StructuredDocumentation",
          "src": "193:121:7",
          "text": " @title DonationStaking contract that receives funds in ETH/DAI\n and stake them in the SimpleStaking contract"
        },
        "fullyImplemented": true,
        "id": 5127,
        "linearizedBaseContracts": [
          5127,
          8211
        ],
        "name": "DonationsStaking",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "5aef7de6",
            "id": 4777,
            "mutability": "mutable",
            "name": "avatar",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "361:29:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 4776,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "361:15:7",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ee99205c",
            "id": 4779,
            "mutability": "mutable",
            "name": "stakingContract",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "393:30:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Staking_$351",
              "typeString": "contract Staking"
            },
            "typeName": {
              "contractScope": null,
              "id": 4778,
              "name": "Staking",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 351,
              "src": "393:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Staking_$351",
                "typeString": "contract Staking"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "e0bab4c4",
            "id": 4781,
            "mutability": "mutable",
            "name": "DAI",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "426:17:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_cERC20_$309",
              "typeString": "contract cERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 4780,
              "name": "cERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 309,
              "src": "426:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_cERC20_$309",
                "typeString": "contract cERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8da5cb5b",
            "id": 4783,
            "mutability": "mutable",
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "446:20:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 4782,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "446:7:7",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2681f7e4",
            "id": 4785,
            "mutability": "mutable",
            "name": "uniswap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "469:22:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Uniswap_$444",
              "typeString": "contract Uniswap"
            },
            "typeName": {
              "contractScope": null,
              "id": 4784,
              "name": "Uniswap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 444,
              "src": "469:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Uniswap_$444",
                "typeString": "contract Uniswap"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "02fb0c5e",
            "id": 4787,
            "mutability": "mutable",
            "name": "active",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "494:18:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 4786,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "494:4:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "90420628",
            "id": 4789,
            "mutability": "mutable",
            "name": "totalETHDonated",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "515:30:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4788,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "515:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ea1eba71",
            "id": 4791,
            "mutability": "mutable",
            "name": "totalDAIDonated",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5127,
            "src": "548:30:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4790,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "548:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4801,
            "name": "DonationStaked",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4793,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "606:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "606:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4795,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "stakedDAI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "624:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "624:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4797,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "ethDonated",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "645:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4796,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "645:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4799,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "daiDonated",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4801,
                  "src": "667:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4798,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "667:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "602:86:7"
            },
            "src": "582:107:7"
          },
          {
            "body": {
              "id": 4817,
              "nodeType": "Block",
              "src": "717:123:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4804,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "733:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4805,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "733:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4806,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4783,
                            "src": "747:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "733:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          "id": 4811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4808,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "756:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "756:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4810,
                            "name": "avatar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4777,
                            "src": "770:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "756:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "733:43:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206f776e6572206f72206176617461722063616e20706572666f726d207468697320616374696f6e",
                        "id": 4813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "781:46:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c25984da557f35037d2891f594d5804eb4670ecdff16d66f4e6af613e4465384",
                          "typeString": "literal_string \"Only owner or avatar can perform this action\""
                        },
                        "value": "Only owner or avatar can perform this action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c25984da557f35037d2891f594d5804eb4670ecdff16d66f4e6af613e4465384",
                          "typeString": "literal_string \"Only owner or avatar can perform this action\""
                        }
                      ],
                      "id": 4803,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "721:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "721:110:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4815,
                  "nodeType": "ExpressionStatement",
                  "src": "721:110:7"
                },
                {
                  "id": 4816,
                  "nodeType": "PlaceholderStatement",
                  "src": "835:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 4818,
            "name": "ownerOrAvatar",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 4802,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "714:2:7"
            },
            "src": "692:148:7",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4829,
              "nodeType": "Block",
              "src": "865:95:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "id": 4824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4821,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "881:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "881:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4823,
                          "name": "avatar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4777,
                          "src": "895:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "881:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792044414f206176617461722063616e20706572666f726d207468697320616374696f6e",
                        "id": 4825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "906:41:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7bce5418ccf131c86ef10cf50737f7535137691c561f6dc76412136411e6f7fb",
                          "typeString": "literal_string \"Only DAO avatar can perform this action\""
                        },
                        "value": "Only DAO avatar can perform this action"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7bce5418ccf131c86ef10cf50737f7535137691c561f6dc76412136411e6f7fb",
                          "typeString": "literal_string \"Only DAO avatar can perform this action\""
                        }
                      ],
                      "id": 4820,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "869:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "869:82:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4827,
                  "nodeType": "ExpressionStatement",
                  "src": "869:82:7"
                },
                {
                  "id": 4828,
                  "nodeType": "PlaceholderStatement",
                  "src": "955:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 4830,
            "name": "onlyAvatar",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 4819,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "862:2:7"
            },
            "src": "843:117:7",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4837,
              "nodeType": "Block",
              "src": "983:28:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4833,
                        "name": "active",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4787,
                        "src": "995:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4832,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "987:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4834,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "987:15:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4835,
                  "nodeType": "ExpressionStatement",
                  "src": "987:15:7"
                },
                {
                  "id": 4836,
                  "nodeType": "PlaceholderStatement",
                  "src": "1006:1:7"
                }
              ]
            },
            "documentation": null,
            "id": 4838,
            "name": "isActive",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 4831,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "980:2:7"
            },
            "src": "963:48:7",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4841,
              "nodeType": "Block",
              "src": "1041:2:7",
              "statements": []
            },
            "documentation": null,
            "id": 4842,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4839,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1021:2:7"
            },
            "returnParameters": {
              "id": 4840,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1041:0:7"
            },
            "scope": 5127,
            "src": "1014:29:7",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4897,
              "nodeType": "Block",
              "src": "1159:357:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4853,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4783,
                      "src": "1163:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4854,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "1171:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1171:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1163:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4857,
                  "nodeType": "ExpressionStatement",
                  "src": "1163:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4858,
                      "name": "uniswap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4785,
                      "src": "1185:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Uniswap_$444",
                        "typeString": "contract Uniswap"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307837613235306435363330423463463533393733396446324335644163623463363539463234383844",
                              "id": 4862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1211:42:7",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "value": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1203:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4860,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1203:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 4863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1203:51:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4859,
                        "name": "Uniswap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 444,
                        "src": "1195:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Uniswap_$444_$",
                          "typeString": "type(contract Uniswap)"
                        }
                      },
                      "id": 4864,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1195:60:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Uniswap_$444",
                        "typeString": "contract Uniswap"
                      }
                    },
                    "src": "1185:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Uniswap_$444",
                      "typeString": "contract Uniswap"
                    }
                  },
                  "id": 4866,
                  "nodeType": "ExpressionStatement",
                  "src": "1185:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4867,
                      "name": "DAI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4781,
                      "src": "1259:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$309",
                        "typeString": "contract cERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4869,
                          "name": "_dai",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4848,
                          "src": "1272:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4868,
                        "name": "cERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 309,
                        "src": "1265:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_cERC20_$309_$",
                          "typeString": "type(contract cERC20)"
                        }
                      },
                      "id": 4870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1265:12:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$309",
                        "typeString": "contract cERC20"
                      }
                    },
                    "src": "1259:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$309",
                      "typeString": "contract cERC20"
                    }
                  },
                  "id": 4872,
                  "nodeType": "ExpressionStatement",
                  "src": "1259:18:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4873,
                      "name": "avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4777,
                      "src": "1281:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4874,
                      "name": "_avatar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4844,
                      "src": "1290:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1281:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 4876,
                  "nodeType": "ExpressionStatement",
                  "src": "1281:16:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4877,
                      "name": "stakingContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4779,
                      "src": "1301:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Staking_$351",
                        "typeString": "contract Staking"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4879,
                          "name": "_stakingContract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4846,
                          "src": "1327:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 4878,
                        "name": "Staking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 351,
                        "src": "1319:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Staking_$351_$",
                          "typeString": "type(contract Staking)"
                        }
                      },
                      "id": 4880,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1319:25:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Staking_$351",
                        "typeString": "contract Staking"
                      }
                    },
                    "src": "1301:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Staking_$351",
                      "typeString": "contract Staking"
                    }
                  },
                  "id": 4882,
                  "nodeType": "ExpressionStatement",
                  "src": "1301:43:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4888,
                            "name": "stakingContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "1372:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Staking_$351",
                              "typeString": "contract Staking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Staking_$351",
                              "typeString": "contract Staking"
                            }
                          ],
                          "id": 4887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1364:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4886,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1364:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1364:24:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666",
                        "id": 4890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1393:66:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9935"
                        },
                        "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9935"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4883,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "1348:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 4885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 308,
                      "src": "1348:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 4891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1348:115:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4892,
                  "nodeType": "ExpressionStatement",
                  "src": "1348:115:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4893,
                      "name": "active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4787,
                      "src": "1499:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 4894,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1508:4:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1499:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4896,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:13:7"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "c0c53b8b",
            "id": 4898,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4851,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4850,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8188,
                  "src": "1147:11:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1147:11:7"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4849,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4844,
                  "mutability": "mutable",
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4898,
                  "src": "1069:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4843,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1069:15:7",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4846,
                  "mutability": "mutable",
                  "name": "_stakingContract",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4898,
                  "src": "1096:24:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4845,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1096:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4848,
                  "mutability": "mutable",
                  "name": "_dai",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4898,
                  "src": "1124:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4847,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1124:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1065:74:7"
            },
            "returnParameters": {
              "id": 4852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1159:0:7"
            },
            "scope": 5127,
            "src": "1046:470:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4961,
              "nodeType": "Block",
              "src": "1843:382:7",
              "statements": [
                {
                  "assignments": [
                    4907
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4907,
                      "mutability": "mutable",
                      "name": "daiDonated",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4961,
                      "src": "1847:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4906,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1847:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4915,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4912,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1890:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 4911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1882:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4910,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1882:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1882:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4908,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "1868:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 4909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 290,
                      "src": "1868:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 4914,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1868:28:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1847:49:7"
                },
                {
                  "assignments": [
                    4917
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4917,
                      "mutability": "mutable",
                      "name": "ethDonated",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4961,
                      "src": "1900:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4916,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1900:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4921,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4919,
                        "name": "_minDAIAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4901,
                        "src": "1929:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4918,
                      "name": "_buyDAI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5051,
                      "src": "1921:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1921:22:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1900:43:7"
                },
                {
                  "assignments": [
                    4923
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4923,
                      "mutability": "mutable",
                      "name": "daiBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4961,
                      "src": "1948:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4922,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1948:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4931,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4928,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1991:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 4927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1983:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4926,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1983:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1983:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4924,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "1969:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 4925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 290,
                      "src": "1969:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 4930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1969:28:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1948:49:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4933,
                          "name": "daiBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4923,
                          "src": "2009:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2022:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2009:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f2044414920746f207374616b65",
                        "id": 4936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2025:17:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_672960139dca2fd59bd79edd62cfe77c3ac268980716a82f3c707a594a696c9d",
                          "typeString": "literal_string \"no DAI to stake\""
                        },
                        "value": "no DAI to stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_672960139dca2fd59bd79edd62cfe77c3ac268980716a82f3c707a594a696c9d",
                          "typeString": "literal_string \"no DAI to stake\""
                        }
                      ],
                      "id": 4932,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2001:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2001:42:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4938,
                  "nodeType": "ExpressionStatement",
                  "src": "2001:42:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4942,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4923,
                        "src": "2073:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4939,
                        "name": "stakingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "2048:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Staking_$351",
                          "typeString": "contract Staking"
                        }
                      },
                      "id": 4941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakeDAI",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 340,
                      "src": "2048:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 4943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2048:36:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4944,
                  "nodeType": "ExpressionStatement",
                  "src": "2048:36:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4947,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4945,
                      "name": "totalETHDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4789,
                      "src": "2088:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4946,
                      "name": "ethDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4917,
                      "src": "2107:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2088:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4948,
                  "nodeType": "ExpressionStatement",
                  "src": "2088:29:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4949,
                      "name": "totalDAIDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4791,
                      "src": "2121:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4950,
                      "name": "daiDonated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4907,
                      "src": "2140:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2121:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4952,
                  "nodeType": "ExpressionStatement",
                  "src": "2121:29:7"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4954,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2174:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2174:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4956,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4923,
                        "src": "2186:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4957,
                        "name": "ethDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4917,
                        "src": "2198:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4958,
                        "name": "daiDonated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4907,
                        "src": "2210:10:7",
                        "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"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4953,
                      "name": "DonationStaked",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4801,
                      "src": "2159:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 4959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2159:62:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4960,
                  "nodeType": "EmitStatement",
                  "src": "2154:67:7"
                }
              ]
            },
            "documentation": {
              "id": 4899,
              "nodeType": "StructuredDocumentation",
              "src": "1519:251:7",
              "text": " @dev stake available funds. It\n take balance in eth and buy DAI from uniswap then stake outstanding DAI balance.\n anyone can call this.\n @param _minDAIAmount enforce expected return from uniswap when converting eth balance to DAI"
            },
            "functionSelector": "2124e2df",
            "id": 4962,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4904,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4903,
                  "name": "isActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4838,
                  "src": "1834:8:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1834:8:7"
              }
            ],
            "name": "stakeDonations",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4902,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4901,
                  "mutability": "mutable",
                  "name": "_minDAIAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4962,
                  "src": "1796:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4900,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1796:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1795:23:7"
            },
            "returnParameters": {
              "id": 4905,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1843:0:7"
            },
            "scope": 5127,
            "src": "1772:453:7",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4983,
              "nodeType": "Block",
              "src": "2352:104:7",
              "statements": [
                {
                  "assignments": [
                    4971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4971,
                      "mutability": "mutable",
                      "name": "staker",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4983,
                      "src": "2356:28:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Staker_$335_memory_ptr",
                        "typeString": "struct Staking.Staker"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4970,
                        "name": "Staking.Staker",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 335,
                        "src": "2356:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Staker_$335_storage_ptr",
                          "typeString": "struct Staking.Staker"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4979,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4976,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2419:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 4975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2411:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4974,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2411:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 4977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2411:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4972,
                        "name": "stakingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "2387:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Staking_$351",
                          "typeString": "contract Staking"
                        }
                      },
                      "id": 4973,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakers",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 350,
                      "src": "2387:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_struct$_Staker_$335_memory_ptr_$",
                        "typeString": "function (address) view external returns (struct Staking.Staker memory)"
                      }
                    },
                    "id": 4978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2387:38:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Staker_$335_memory_ptr",
                      "typeString": "struct Staking.Staker memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2356:69:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 4980,
                      "name": "staker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4971,
                      "src": "2436:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Staker_$335_memory_ptr",
                        "typeString": "struct Staking.Staker memory"
                      }
                    },
                    "id": 4981,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "stakedDAI",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 332,
                    "src": "2436:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4967,
                  "id": 4982,
                  "nodeType": "Return",
                  "src": "2429:23:7"
                }
              ]
            },
            "documentation": {
              "id": 4963,
              "nodeType": "StructuredDocumentation",
              "src": "2228:69:7",
              "text": " @dev total DAI value staked\n @return DAI value staked"
            },
            "functionSelector": "817b1cd2",
            "id": 4984,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalStaked",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4964,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2319:2:7"
            },
            "returnParameters": {
              "id": 4967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4966,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4984,
                  "src": "2343:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4965,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2343:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2342:9:7"
            },
            "scope": 5127,
            "src": "2299:157:7",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5050,
              "nodeType": "Block",
              "src": "2714:334:7",
              "statements": [
                {
                  "assignments": [
                    4993
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4993,
                      "mutability": "mutable",
                      "name": "ethBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5050,
                      "src": "2739:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4992,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2739:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4999,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4996,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "2768:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        ],
                        "id": 4995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2760:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 4994,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2760:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 4997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2760:13:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 4998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2760:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2739:42:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 5000,
                      "name": "ethBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4993,
                      "src": "2789:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5001,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2803:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2789:15:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5005,
                  "nodeType": "IfStatement",
                  "src": "2785:29:7",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2813:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 4991,
                    "id": 5004,
                    "nodeType": "Return",
                    "src": "2806:8:7"
                  }
                },
                {
                  "assignments": [
                    5010
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5010,
                      "mutability": "mutable",
                      "name": "path",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5050,
                      "src": "2818:21:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5008,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2818:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5009,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2818:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5016,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 5014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2856:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 5013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2842:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5011,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2846:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5012,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2846:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 5015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2842:16:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2818:40:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5017,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5010,
                        "src": "2862:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 5019,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 5018,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2867:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2862:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5022,
                          "name": "DAI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4781,
                          "src": "2880:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_cERC20_$309",
                            "typeString": "contract cERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_cERC20_$309",
                            "typeString": "contract cERC20"
                          }
                        ],
                        "id": 5021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2872:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 5020,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2872:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 5023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2872:12:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2862:22:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5025,
                  "nodeType": "ExpressionStatement",
                  "src": "2862:22:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5026,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5010,
                        "src": "2888:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 5028,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2893:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2888:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5029,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4785,
                          "src": "2898:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 5030,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "WETH",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 405,
                        "src": "2898:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                          "typeString": "function () pure external returns (address)"
                        }
                      },
                      "id": 5031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2898:14:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2888:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 5033,
                  "nodeType": "ExpressionStatement",
                  "src": "2888:24:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5039,
                        "name": "_minDAIAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4987,
                        "src": "2971:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5040,
                        "name": "path",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5010,
                        "src": "2989:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5043,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3006:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 5042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2998:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5041,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2998:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 5044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2998:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5045,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -17,
                        "src": "3016:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5034,
                          "name": "uniswap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4785,
                          "src": "2916:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Uniswap_$444",
                            "typeString": "contract Uniswap"
                          }
                        },
                        "id": 5036,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "swapExactETHForTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 366,
                        "src": "2916:29:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                        }
                      },
                      "id": 5038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "argumentTypes": null,
                          "id": 5037,
                          "name": "ethBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4993,
                          "src": "2954:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "2916:50:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$value",
                        "typeString": "function (uint256,address[] memory,address,uint256) payable external returns (uint256[] memory)"
                      }
                    },
                    "id": 5046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2916:107:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 5047,
                  "nodeType": "ExpressionStatement",
                  "src": "2916:107:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5048,
                    "name": "ethBalance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4993,
                    "src": "3034:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4991,
                  "id": 5049,
                  "nodeType": "Return",
                  "src": "3027:17:7"
                }
              ]
            },
            "documentation": {
              "id": 4985,
              "nodeType": "StructuredDocumentation",
              "src": "2459:186:7",
              "text": " @dev internal method to buy DAI from uniswap\n @param _minDAIAmount enforce expected return from uniswap when converting eth balance to DAI\n @return eth value converted"
            },
            "id": 5051,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_buyDAI",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4987,
                  "mutability": "mutable",
                  "name": "_minDAIAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5051,
                  "src": "2664:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4986,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2664:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2663:23:7"
            },
            "returnParameters": {
              "id": 4991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4990,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5051,
                  "src": "2705:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2705:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2704:9:7"
            },
            "scope": 5127,
            "src": "2647:401:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5062,
              "nodeType": "Block",
              "src": "3105:24:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5058,
                      "name": "active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4787,
                      "src": "3109:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 5059,
                      "name": "_active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5053,
                      "src": "3118:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3109:16:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5061,
                  "nodeType": "ExpressionStatement",
                  "src": "3109:16:7"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "acec338a",
            "id": 5063,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5056,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5055,
                  "name": "ownerOrAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4818,
                  "src": "3091:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3091:13:7"
              }
            ],
            "name": "setActive",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5053,
                  "mutability": "mutable",
                  "name": "_active",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5063,
                  "src": "3070:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5052,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3070:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3069:14:7"
            },
            "returnParameters": {
              "id": 5057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3105:0:7"
            },
            "scope": 5127,
            "src": "3051:78:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5117,
              "nodeType": "Block",
              "src": "3430:258:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5073,
                        "name": "stakingContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4779,
                        "src": "3434:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Staking_$351",
                          "typeString": "contract Staking"
                        }
                      },
                      "id": 5075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawStake",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 343,
                      "src": "3434:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 5076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3434:31:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5077,
                  "nodeType": "ExpressionStatement",
                  "src": "3434:31:7"
                },
                {
                  "assignments": [
                    5079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5079,
                      "mutability": "mutable",
                      "name": "daiBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5117,
                      "src": "3469:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5078,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3469:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5087,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5084,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3512:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                              "typeString": "contract DonationsStaking"
                            }
                          ],
                          "id": 5083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3504:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5082,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3504:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 5085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3504:13:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5080,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "3490:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 5081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 290,
                      "src": "3490:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 5086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3490:28:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3469:49:7"
                },
                {
                  "assignments": [
                    5089
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5089,
                      "mutability": "mutable",
                      "name": "ethBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5117,
                      "src": "3522:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5088,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3522:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5095,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5092,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "3551:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DonationsStaking_$5127",
                            "typeString": "contract DonationsStaking"
                          }
                        ],
                        "id": 5091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3543:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 5090,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3543:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 5093,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3543:13:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 5094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3543:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3522:42:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5099,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4777,
                        "src": "3581:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5100,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5079,
                        "src": "3589:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5096,
                        "name": "DAI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4781,
                        "src": "3568:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$309",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 5098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 299,
                      "src": "3568:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 5101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3568:32:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5102,
                  "nodeType": "ExpressionStatement",
                  "src": "3568:32:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5106,
                        "name": "ethBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5089,
                        "src": "3620:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5103,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4777,
                        "src": "3604:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 5105,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3604:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 5107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3604:27:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5108,
                  "nodeType": "ExpressionStatement",
                  "src": "3604:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5109,
                      "name": "active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4787,
                      "src": "3635:6:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 5110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3644:5:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "3635:14:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5112,
                  "nodeType": "ExpressionStatement",
                  "src": "3635:14:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5113,
                        "name": "daiBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5079,
                        "src": "3661:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5114,
                        "name": "ethBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5089,
                        "src": "3673:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5115,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3660:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 5072,
                  "id": 5116,
                  "nodeType": "Return",
                  "src": "3653:31:7"
                }
              ]
            },
            "documentation": {
              "id": 5064,
              "nodeType": "StructuredDocumentation",
              "src": "3132:233:7",
              "text": " @dev withdraws all stakes and then transfer all balances to avatar\n this can also be called by owner(Foundation) but it is safe as funds are transfered to avatarMock\n and only avatar can upgrade this contract logic"
            },
            "functionSelector": "efbe1c1c",
            "id": 5118,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5067,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5066,
                  "name": "ownerOrAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4818,
                  "src": "3389:13:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3389:13:7"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3379:2:7"
            },
            "returnParameters": {
              "id": 5072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5069,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5118,
                  "src": "3412:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5068,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3412:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5071,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5118,
                  "src": "3421:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5070,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3421:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3411:18:7"
            },
            "scope": 5127,
            "src": "3367:321:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5125,
              "nodeType": "Block",
              "src": "3749:22:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "312e312e30",
                    "id": 5123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3760:7:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_6815ba53416ba06aff1932cc76b3832272bafab9bc8e066be382e32b06ba5546",
                      "typeString": "literal_string \"1.1.0\""
                    },
                    "value": "1.1.0"
                  },
                  "functionReturnParameters": 5122,
                  "id": 5124,
                  "nodeType": "Return",
                  "src": "3753:14:7"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "0d8e6e2c",
            "id": 5126,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVersion",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3710:2:7"
            },
            "returnParameters": {
              "id": 5122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5121,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5126,
                  "src": "3734:13:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5120,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3734:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3733:15:7"
            },
            "scope": 5127,
            "src": "3691:80:7",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5128,
        "src": "315:3458:7"
      }
    ],
    "src": "33:3741:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.0",
  "updatedAt": "2021-01-17T13:45:27.094Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "end()": {
        "details": "withdraws all stakes and then transfer all balances to avatar this can also be called by owner(Foundation) but it is safe as funds are transfered to avatarMock and only avatar can upgrade this contract logic"
      },
      "stakeDonations(uint256)": {
        "details": "stake available funds. It take balance in eth and buy DAI from uniswap then stake outstanding DAI balance. anyone can call this.",
        "params": {
          "_minDAIAmount": "enforce expected return from uniswap when converting eth balance to DAI"
        }
      },
      "totalStaked()": {
        "details": "total DAI value staked",
        "returns": {
          "_0": "DAI value staked"
        }
      }
    },
    "title": "DonationStaking contract that receives funds in ETH/DAI and stake them in the SimpleStaking contract",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}