[ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "cashPrior", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "interestAccumulated", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "borrowIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalProtocolInterest", "type": "uint256" } ], "name": "AccrueInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrowsNew", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrowsNew", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "TotalProtocolInterestNew", "type": "uint256" } ], "name": "AutoLiquidationRepayBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "borrowAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "Borrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" } ], "name": "FlashLoanExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "lender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "lendAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lendTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalTokenSupply", "type": "uint256" } ], "name": "Lend", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "NewFlashLoanFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMaxShare", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMaxShare", "type": "uint256" } ], "name": "NewFlashLoanMaxShare", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IInterestRateModel", "name": "oldInterestRateModel", "type": "address" }, { "indexed": false, "internalType": "contract IInterestRateModel", "name": "newInterestRateModel", "type": "address" } ], "name": "NewMarketInterestRateModel", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldProtocolInterestFactorMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newProtocolInterestFactorMantissa", "type": "uint256" } ], "name": "NewProtocolInterestFactor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "benefactor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "addAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalProtocolInterest", "type": "uint256" } ], "name": "ProtocolInterestAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "admin", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reduceAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalProtocolInterest", "type": "uint256" } ], "name": "ProtocolInterestReduced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "redeemer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "redeemAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "redeemTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalTokenSupply", "type": "uint256" } ], "name": "Redeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "repayAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountBorrows", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalBorrows", "type": "uint256" } ], "name": "RepayBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "seizeTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accountsTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "seizeUnderlyingAmount", "type": "uint256" } ], "name": "Seize", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TIMELOCK", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin_", "type": "address" }, { "internalType": "contract ISupervisor", "name": "supervisor_", "type": "address" }, { "internalType": "contract IInterestRateModel", "name": "interestRateModel_", "type": "address" }, { "internalType": "uint256", "name": "initialExchangeRateMantissa_", "type": "uint256" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint8", "name": "decimals_", "type": "uint8" }, { "internalType": "contract IERC20", "name": "underlying_", "type": "address" }, { "internalType": "contract IrUSDY", "name": "wrapper_", "type": "address" } ], "name": "_initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accrualBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accrueInterest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "addAmount_", "type": "uint256" } ], "name": "addProtocolInterest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "payer_", "type": "address" }, { "internalType": "uint256", "name": "addAmount_", "type": "uint256" } ], "name": "addProtocolInterestBehalf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower_", "type": "address" }, { "internalType": "uint256", "name": "repayAmount_", "type": "uint256" } ], "name": "autoLiquidationRepayBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower_", "type": "address" }, { "internalType": "uint256", "name": "seizeUnderlyingAmount_", "type": "uint256" }, { "internalType": "bool", "name": "isLoanInsignificant_", "type": "bool" }, { "internalType": "address", "name": "receiver_", "type": "address" } ], "name": "autoLiquidationSeize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOfUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" } ], "name": "borrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "borrowBalanceCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "borrowBalanceStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "borrowIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_usdyBorrowAmount", "type": "uint256" } ], "name": "borrowRUSDY", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "borrowRatePerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exchangeRateCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "exchangeRateStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "flashFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC3156FlashBorrower", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "flashLoanFeeShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getAccountSnapshot", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialExchangeRateMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin_", "type": "address" }, { "internalType": "contract ISupervisor", "name": "supervisor_", "type": "address" }, { "internalType": "contract IInterestRateModel", "name": "interestRateModel_", "type": "address" }, { "internalType": "uint256", "name": "initialExchangeRateMantissa_", "type": "uint256" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint8", "name": "decimals_", "type": "uint8" }, { "internalType": "contract IERC20", "name": "underlying_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interestRateModel", "outputs": [ { "internalType": "contract IInterestRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "lendAmount", "type": "uint256" } ], "name": "lend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rUsdyLendAmount", "type": "uint256" } ], "name": "lendRUSDY", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "maxFlashLoan", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxFlashLoanShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolInterestFactorMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rUSDY", "outputs": [ { "internalType": "contract IrUSDY", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemTokens", "type": "uint256" } ], "name": "redeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "redeemByAmlDecision", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_redeemTokens", "type": "uint256" } ], "name": "redeemRUSDY", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "redeemAmount", "type": "uint256" } ], "name": "redeemUnderlying", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_usdyRedeemAmount", "type": "uint256" } ], "name": "redeemUnderlyingRUSDY", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reduceAmount", "type": "uint256" }, { "internalType": "address", "name": "receiver_", "type": "address" } ], "name": "reduceProtocolInterest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "repayBorrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], "name": "repayBorrowBehalf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rUsdyRepayAmount", "type": "uint256" } ], "name": "repayBorrowRUSDY", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "setFlashLoanFeeShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMax", "type": "uint256" } ], "name": "setFlashLoanMaxShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IInterestRateModel", "name": "newInterestRateModel", "type": "address" } ], "name": "setInterestRateModel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newProtocolInterestFactorMantissa", "type": "uint256" } ], "name": "setProtocolInterestFactor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supervisor", "outputs": [ { "internalType": "contract ISupervisor", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "supplyRatePerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "address", "name": "receiver_", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrows", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBorrowsCurrent", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalProtocolInterest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b5060016002556200002162000027565b620000e8565b600054610100900460ff1615620000945760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61417080620000f86000396000f3fe608060405234801561001057600080fd5b50600436106103f15760003560e01c80637a7cab1411610215578063c1d68f4711610125578063dd62ed3e116100b8578063f3eb705511610087578063f3eb7055146108a1578063f3fdb15a146108b4578063f4fe5373146108c7578063f8f9da28146108da578063fd0d7cc0146108e257600080fd5b8063dd62ed3e1461082f578063e7b5af8a14610868578063e867c3fa1461087b578063edff28931461088e57600080fd5b8063d4af8de2116100f4578063d4af8de2146107e3578063d547741f146107f6578063d9d98ce414610809578063db006a751461081c57600080fd5b8063c1d68f471461077c578063c37f68e21461078f578063c5ebeaec146107bd578063ce2d8bb6146107d057600080fd5b806395dd9193116101a8578063a6afed9511610177578063a6afed9514610748578063a9059cbb14610750578063aa5af0fd14610763578063ae9d70b01461076c578063bd6d894d1461077457600080fd5b806395dd9193146107075780639932bf3d1461071a578063a217fddf1461072d578063a6aa57ce1461073557600080fd5b80638c17f2bc116101e45780638c17f2bc146106c657806391d14854146106d957806391f08ebd146106ec57806395d89b41146106ff57600080fd5b80637a7cab14146106785780637aadef8b1461068b578063852a12e3146106a05780638bcd4016146106b357600080fd5b80632f2ff15d1161031057806356e4b68b116102a3578063675d972c11610272578063675d972c146106225780636c540baf1461062b5780636f307dc31461063457806370a082311461064757806373acee981461067057600080fd5b806356e4b68b146105c35780635cffe9de146105f3578063613255ab1461060657806365062c361461061957600080fd5b80633af9e669116102df5780633af9e6691461058c5780633b1d21a21461059f57806347bd3718146105a7578063484ad396146105b057600080fd5b80632f2ff15d1461053e578063313ce56714610551578063329aa53e1461057057806336568abe1461057957600080fd5b8063182df0f511610388578063258836fe11610357578063258836fe146104fc5780632608f8181461050f5780632710f808146105225780632c692b721461053557600080fd5b8063182df0f5146104aa5780631a70cce0146104b257806323b872dd146104c5578063248a9ca3146104d857600080fd5b80630b737bc6116103c45780630b737bc61461045b5780630e7527021461046e57806317bfdfbc1461048157806318160ddd146104a257600080fd5b806301ffc9a7146103f657806302b542781461041e57806306fdde0314610433578063095ea7b314610448575b600080fd5b6104096104043660046138af565b6108eb565b60405190151581526020015b60405180910390f35b61043161042c3660046138d9565b610922565b005b61043b6109ca565b6040516104159190613916565b61040961045636600461395e565b610a58565b61043161046936600461395e565b610ac6565b61043161047c3660046138d9565b610b45565b61049461048f36600461398a565b610b5a565b604051908152602001610415565b600e54610494565b610494610b86565b6104316104c03660046138d9565b610b95565b6104096104d33660046139a7565b610bbc565b6104946104e63660046138d9565b6000908152600160208190526040909120015490565b61043161050a3660046139f3565b610be6565b61043161051d36600461395e565b610cc3565b610431610530366004613a3a565b610cdd565b61049460135481565b61043161054c366004613a8d565b610ef3565b60065461055e9060ff1681565b60405160ff9091168152602001610415565b61049460095481565b610431610587366004613a8d565b610f19565b61049461059a36600461398a565b610f93565b610494610fd3565b610494600c5481565b6104316105be3660046138d9565b610fdd565b6006546105db9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610415565b610409610601366004613ab2565b611000565b61049461061436600461398a565b6112e5565b610494600d5481565b61049460085481565b610494600a5481565b6003546105db906001600160a01b031681565b61049461065536600461398a565b6001600160a01b03166000908152600f602052604090205490565b61049461130c565b6014546105db906001600160a01b031681565b6104946000805160206140fb83398151915281565b6104316106ae3660046138d9565b61132f565b6104316106c136600461398a565b611347565b6104316106d43660046138d9565b611370565b6104096106e7366004613a8d565b611395565b6104316106fa3660046138d9565b6113c0565b61043b61155c565b61049461071536600461398a565b611569565b610431610728366004613a8d565b611574565b610494600081565b6104316107433660046138d9565b61167f565b610431611693565b61040961075e36600461395e565b6118a7565b610494600b5481565b6104946118ca565b610494611962565b61043161078a3660046138d9565b611988565b6107a261079d36600461398a565b6119a5565b60408051938452602084019290925290820152606001610415565b6104316107cb3660046138d9565b6119e6565b6104316107de3660046138d9565b6119f9565b6104316107f1366004613c05565b611a98565b610431610804366004613a8d565b611ca6565b61049461081736600461395e565b611ccc565b61043161082a3660046138d9565b611d22565b61049461083d3660046139f3565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b61043161087636600461398a565b611d3a565b6104316108893660046138d9565b611d6a565b61043161089c366004613cd0565b611d83565b6104316108af36600461395e565b611dae565b6007546105db906001600160a01b031681565b6104316108d53660046138d9565b611f97565b610494612042565b61049460125481565b60006001600160e01b031982166336372b0760e01b148061091c57506001600160e01b0319821663e414309160e01b145b92915050565b6000805160206140fb83398151915261093a81612095565b6040805180820190915260048152634534313760e01b6020820152670de0b6b3a76400008311156109875760405162461bcd60e51b815260040161097e9190613916565b60405180910390fd5b5060135460408051918252602082018490527f2cd87d6d243502fbf87bd7dd851659e05ac6a614994d7f04592e4f173f939783910160405180910390a150601355565b600480546109d790613da6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0390613da6565b8015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ab49087815260200190565b60405180910390a35060019392505050565b610ace61209f565b60065460405163529a356f60e01b81523360048201526101009091046001600160a01b03169063529a356f9060240160006040518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b50505050610b3782826120f6565b610b416001600255565b5050565b610b4d611693565b610b4133338360016121a6565b6000610b6461209f565b610b6c611693565b610b7582611569565b9050610b816001600255565b919050565b6000610b90612349565b905090565b610b9d61209f565b610ba5611693565b610baf33826120f6565b610bb96001600255565b50565b6000610bc661209f565b610bd23385858561239e565b506001610bdf6001600255565b9392505050565b6000610bf181612095565b6003546040805180820190915260048152634534313160e01b6020820152906001600160a01b03858116911603610c3b5760405162461bcd60e51b815260040161097e9190613916565b506040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca79190613de0565b9050610cbd6001600160a01b038516848361257d565b50505050565b610ccb611693565b610cd833838360016121a6565b505050565b610ce561209f565b60065460405163763c760160e11b81523060048201523360248201526001600160a01b0386811660448301526101009092049091169063ec78ec0290606401600060405180830381600087803b158015610d3e57600080fd5b505af1158015610d52573d6000803e3d6000fd5b505050506000610d60612349565b905060006000198503610dab57506001600160a01b0385166000908152600f6020526040902054670de0b6b3a7640000610d9a8383613e0f565b610da49190613e26565b9450610dcb565b81610dbe670de0b6b3a764000087613e0f565b610dc89190613e26565b90505b6001600160a01b0386166000908152600f6020526040812054610def908390613e48565b9050600082600e54610e019190613e48565b6001600160a01b0389166000908152600f60205260409020839055600e81905590508515610e7b5786600d54610e379190613e5b565b600d8190556040517f83a9e0196329d258a5cfdba2e4fe6f0bbd8cf86900d64d40d9e2c8cb293a755191610e6e9133918b91613e6e565b60405180910390a1610e85565b610e8585886125e0565b604080516001600160a01b03808b16825287166020820152908101849052606081018390526080810182905260a081018890527fc42f5858719baf2f3f487c6964f1d69991959b7940b40f76ca3243bddf0a1db19060c00160405180910390a150505050610cbd6001600255565b60008281526001602081905260409091200154610f0f81612095565b610cd883836125f7565b6001600160a01b0381163314610f895760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161097e565b610b418282612662565b6000670de0b6b3a7640000610fa6611962565b6001600160a01b0384166000908152600f6020526040902054610fc99190613e0f565b61091c9190613e26565b6000610b906126c9565b610fe5611693565b6000610ff182336126fa565b9050610cd833338360006121a6565b600061100a61209f565b6003546040805180820190915260048152630453234360e41b6020820152906001600160a01b038781169116146110545760405162461bcd60e51b815260040161097e9190613916565b5061105d61289d565b841115604051806040016040528060048152602001634532343160e01b8152509061109b5760405162461bcd60e51b815260040161097e9190613916565b506110a4611693565b60006110af856128b3565b6006546040516387a4d62b60e01b81523060048201526001600160a01b038a811660248301526044820189905260648201849052929350610100909104909116906387a4d62b9060840160006040518083038186803b15801561111157600080fd5b505afa158015611125573d6000803e3d6000fd5b505060035461114192506001600160a01b03169050888761257d565b6040516323e30c8b60e01b81527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9906001600160a01b038916906323e30c8b906111999033908b908b9088908c908c90600401613e8f565b6020604051808303816000875af11580156111b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dc9190613de0565b146040518060400160405280600481526020016322991a1960e11b815250906112185760405162461bcd60e51b815260040161097e9190613916565b50600061122e886112298489613e5b565b6128cc565b905061123a8287613e5b565b81101560405180604001604052806004815260200163114ccc8d60e21b815250906112785760405162461bcd60e51b815260040161097e9190613916565b5081600d600082825461128b9190613e5b565b90915550506040517f61268d74931c41c9775dffb6169a5208aab1d09cb2eb6aabe8b97162801e5dfa906112c4908a9089908690613e6e565b60405180910390a16001925050506112dc6001600255565b95945050505050565b6003546000906001600160a01b0383811691161461130457600061091c565b61091c61289d565b600061131661209f565b61131e611693565b50600c5461132c6001600255565b90565b611337611693565b610b413360008360016000612989565b6000805160206140fb83398151915261135f81612095565b611367611693565b610b4182612d1f565b611378611693565b600061138933836000806000612989565b9050610cd88133612dc8565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6113c8611693565b60065460405163087a556b60e41b81523060048201523360248201526101009091046001600160a01b0316906387a556b090604401600060405180830381600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b50505050611437612f94565b600a5414604051806040016040528060048152602001632299981960e11b815250906114765760405162461bcd60e51b815260040161097e9190613916565b506000611481612349565b9050600061148f83336126fa565b90506000826114a6670de0b6b3a764000084613e0f565b6114b09190613e26565b9050600081600e546114c29190613e5b565b600e819055336000908152600f60205260408120805492935084929091906114eb908490613e5b565b90915550506040517faf77103a98a12032881b6214985e03ff85a9c1ad6fed28f4b0f3c52e01bcc58b90611526903390869086908690613eeb565b60405180910390a1604051828152339060009060008051602061411b833981519152906020015b60405180910390a35050505050565b600580546109d790613da6565b600061091c82612fe8565b600061157f81612095565b61158761209f565b61158f611693565b826115986126c9565b101560405180604001604052806004815260200163114ccc0d60e21b815250906115d55760405162461bcd60e51b815260040161097e9190613916565b5082600d541015604051806040016040528060048152602001634534313360e01b815250906116175760405162461bcd60e51b815260040161097e9190613916565b50600083600d546116289190613e48565b600d819055905061163983856125e0565b7f80c183234cf159911c661c50bbe951c21e685e400ddc3c0cc907cc6796be3e9283858360405161166c93929190613e6e565b60405180910390a150610cd86001600255565b611687611693565b610b413382600161302f565b600061169d612f94565b600a549091508181036116ae575050565b60006116b86126c9565b600b54600754600c54600d546040516315f2405360e01b8152600481018690526024810192909252604482015292935090916000916001600160a01b0316906315f2405390606401602060405180830381865afa15801561171d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117419190613de0565b905065048c27395000811115604051806040016040528060048152602001634533303360e01b815250906117885760405162461bcd60e51b815260040161097e9190613916565b5060006117958587613e48565b905060006117a38284613e0f565b90506000670de0b6b3a764000082600c546117be9190613e0f565b6117c89190613e26565b905080600c60008282546117dc9190613e5b565b9091555050600954670de0b6b3a7640000906117f89083613e0f565b6118029190613e26565b600d60008282546118139190613e5b565b90915550670de0b6b3a7640000905061182c8387613e0f565b6118369190613e26565b6118409086613e5b565b600b819055600a899055600c54600d54604080518a8152602081018690528082019490945260608401929092526080830152517f717fee053884ab1935ba6d0140f6ed225371439611d9674ff445419d6a0fa1b79181900360a00190a15050505050505050565b60006118b161209f565b6118bd3333858561239e565b50600161091c6001600255565b6007546000906001600160a01b031663b81688166118e66126c9565b600c54600d546009546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa15801561193e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190613de0565b600061196c61209f565b611974611693565b61197c610b86565b905061132c6001600255565b611990611693565b61199b8160006131f5565b610b418133612dc8565b6001600160a01b0381166000908152600f602052604081205481908190816119cc86612fe8565b905060006119d8612349565b929791965091945092505050565b6119ee611693565b610bb98160016131f5565b6000805160206140fb833981519152611a1181612095565b6040805180820190915260048152634534313760e01b6020820152670de0b6b3a7640000831115611a555760405162461bcd60e51b815260040161097e9190613916565b5060125460408051918252602082018490527f1e753ca8cc37e93a19f3cbc969c3205e2a0ad0a9bcbfc73080ba52d75aba2b70910160405180910390a150601255565b600054610100900460ff1615808015611ab85750600054600160ff909116105b80611ad25750303b158015611ad2575060005460ff166001145b611b355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161097e565b6000805460ff191660011790558015611b58576000805461ff0019166101001790555b6040805180820190915260048152634534303160e01b602082015286611b915760405162461bcd60e51b815260040161097e9190613916565b50600886905560068054610100600160a81b0319166101006001600160a01b038b1602179055611bbf612f94565b600a55670de0b6b3a7640000600b55611bd787612d1f565b611be260008a6125f7565b611bfa6000805160206140fb8339815191528a6125f7565b600380546001600160a01b0319166001600160a01b0384161790556004611c218682613f5f565b506005611c2e8582613f5f565b506006805460ff191660ff8516179055670de0b6b3a76400006012556603328b944c40006013558015611c9b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60008281526001602081905260409091200154611cc281612095565b610cd88383612662565b6003546040805180820190915260048152630453234360e41b60208201526000916001600160a01b03858116911614611d185760405162461bcd60e51b815260040161097e9190613916565b50610bdf826128b3565b611d2a611693565b610b413382600060016000612989565b611d42611693565b6001600160a01b0381166000908152600f6020526040812054610b4191839190600180612989565b611d72611693565b600061138933600084600080612989565b601480546001600160a01b0319166001600160a01b038316179055611c9b8989898989898989611a98565b611db661209f565b60065460405163beda651360e01b81523360048201526001600160a01b0384811660248301523060448301526101009092049091169063beda651390606401600060405180830381600087803b158015611e0f57600080fd5b505af1158015611e23573d6000803e3d6000fd5b50505050611e2f612f94565b600a5414604051806040016040528060048152602001632299981960e11b81525090611e6e5760405162461bcd60e51b815260040161097e9190613916565b5080600d541015604051806040016040528060048152602001634533323560e01b81525090611eb05760405162461bcd60e51b815260040161097e9190613916565b506000611ebc83612fe8565b9050611ec88282613e48565b6001600160a01b0384166000908152601160205260408120918255600b54600190920191909155600c8054849290611f01908490613e48565b9250508190555081600d6000828254611f1a9190613e48565b90915550506001600160a01b03831660008181526011602090815260409182902054600c54600d54845195865292850187905292840152606083019190915260808201527f2acc8948e777df596a8e9f282ab3b111e607a849806c73ccb084d23e1a9130929060a0015b60405180910390a150610b416001600255565b6000805160206140fb833981519152611faf81612095565b611fb761209f565b604080518082019091526004815263229a189960e11b6020820152670de0b6b3a7640000831115611ffb5760405162461bcd60e51b815260040161097e9190613916565b50612004611693565b600980549083905560408051828152602081018590527fb5302a4dff40e0a13b7cbe1217b694744560eeedf26aab600a643a1b2de010889101611f84565b6007546000906001600160a01b03166315f2405361205e6126c9565b600c54600d546040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611921565b610bb98133613363565b60028054036120f05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161097e565b60028055565b6120fe612f94565b600a5414604051806040016040528060048152602001632299981960e11b8152509061213d5760405162461bcd60e51b815260040161097e9190613916565b50600061214a83836128cc565b9050600081600d5461215c9190613e5b565b905080600d819055507f83a9e0196329d258a5cfdba2e4fe6f0bbd8cf86900d64d40d9e2c8cb293a755184838360405161219893929190613e6e565b60405180910390a150505050565b60006121b061209f565b600654604051639fc9324160e01b81523060048201526001600160a01b03868116602483015261010090920490911690639fc9324190604401600060405180830381600087803b15801561220357600080fd5b505af1158015612217573d6000803e3d6000fd5b50505050612223612f94565b600a5414604051806040016040528060048152602001632299981960e11b815250906122625760405162461bcd60e51b815260040161097e9190613916565b50600061226e85612fe8565b9050600019840361227d578093505b82156122945761228d86856128cc565b9150612298565b8391505b60006122a48383613e48565b9050600083600c546122b69190613e48565b6001600160a01b03888116600081815260116020908152604091829020878155600b54600190910155600c8590558151938d168452830191909152810186905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a15050506123416001600255565b949350505050565b6000600e5460000361235c575060085490565b600e54670de0b6b3a7640000600d54600c546123766126c9565b6123809190613e5b565b61238a9190613e48565b6123949190613e0f565b610b909190613e26565b816001600160a01b0316836001600160a01b03161415604051806040016040528060048152602001630453231360e41b815250906123ef5760405162461bcd60e51b815260040161097e9190613916565b5060065460405163395a182560e11b81523060048201526001600160a01b038581166024830152848116604483015260648201849052610100909204909116906372b4304a90608401600060405180830381600087803b15801561245257600080fd5b505af1158015612466573d6000803e3d6000fd5b505050506000836001600160a01b0316856001600160a01b03160361248e57506000196124b6565b506001600160a01b038084166000908152601060209081526040808320938816835292905220545b6001600160a01b0384166000908152600f6020526040812080548492906124de908490613e48565b90915550506001600160a01b0383166000908152600f60205260408120805484929061250b908490613e5b565b9091555050600019811461254a576125238282613e48565b6001600160a01b038086166000908152601060209081526040808320938a16835292905220555b826001600160a01b0316846001600160a01b031660008051602061411b8339815191528460405161154d91815260200190565b6040516001600160a01b038316602482015260448101829052610cd890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133bc565b600354610b41906001600160a01b0316838361257d565b6126018282611395565b610b415760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61266c8282611395565b15610b415760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611921565b601454600090612715906001600160a01b0316833086613491565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561275e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127829190613de0565b601454604051636f074d1f60e11b8152600481018790529192506001600160a01b03169063de0e9a3e90602401600060405180830381600087803b1580156127c957600080fd5b505af11580156127dd573d6000803e3d6000fd5b50506003546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a08231906024015b602060405180830381865afa15801561282d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128519190613de0565b905081811015604051806040016040528060048152602001634533303760e01b815250906128925760405162461bcd60e51b815260040161097e9190613916565b506112dc8282613e48565b6000670de0b6b3a764000060125461238a6126c9565b6000670de0b6b3a764000060135483610fc99190613e0f565b6003546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293d9190613de0565b600354909150612958906001600160a01b0316853086613491565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401612810565b600061299361209f565b84158061299e575083155b604051806040016040528060048152602001634532333960e01b815250906129d95760405162461bcd60e51b815260040161097e9190613916565b5060006129e4612349565b90508515612a1057670de0b6b3a76400006129ff8288613e0f565b612a099190613e26565b9450612a30565b80612a23670de0b6b3a764000087613e0f565b612a2d9190613e26565b95505b60065460405163248d808d60e21b81523060048201526001600160a01b03898116602483015260448201899052851515606483015261010090920490911690639236023490608401600060405180830381600087803b158015612a9257600080fd5b505af1158015612aa6573d6000803e3d6000fd5b50505050612ab2612f94565b600a5414604051806040016040528060048152602001632299981960e11b81525090612af15760405162461bcd60e51b815260040161097e9190613916565b5085600f6000896001600160a01b03166001600160a01b03168152602001908152602001600020541015604051806040016040528060048152602001634532303360e01b81525090612b565760405162461bcd60e51b815260040161097e9190613916565b5085600e541015604051806040016040528060048152602001632299181960e11b81525090612b985760405162461bcd60e51b815260040161097e9190613916565b506001600160a01b0387166000908152600f6020526040812054612bbd908890613e48565b9050600087600e54612bcf9190613e48565b905086612bda6126c9565b101560405180604001604052806004815260200163114ccc0d60e21b81525090612c175760405162461bcd60e51b815260040161097e9190613916565b50600e8190556001600160a01b0389166000818152600f60209081526040808320869055518b815291929160008051602061411b833981519152910160405180910390a37fbd5034ffbd47e4e72a94baa2cdb74c6fad73cb3bcdc13036b72ec8306f5a764689888a84604051612c909493929190613eeb565b60405180910390a18515612ca857612ca889886125e0565b600654604051636640728d60e11b815260048101899052602481018a90526101009091046001600160a01b03169063cc80e51a9060440160006040518083038186803b158015612cf757600080fd5b505afa158015612d0b573d6000803e3d6000fd5b505050508693505050506112dc6001600255565b612d27612f94565b600a5414604051806040016040528060048152602001632299981960e11b81525090612d665760405162461bcd60e51b815260040161097e9190613916565b50600780546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926910160405180910390a15050565b6014546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e399190613de0565b601454600354919250612e59916001600160a01b039081169116866134c9565b601454604051630ea598cb60e41b8152600481018690526001600160a01b039091169063ea598cb090602401600060405180830381600087803b158015612e9f57600080fd5b505af1158015612eb3573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015612f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f269190613de0565b905081811015604051806040016040528060048152602001634533303760e01b81525090612f675760405162461bcd60e51b815260040161097e9190613916565b50612f728282613e48565b601454909350612f8c906001600160a01b0316858561257d565b505092915050565b600073bb0209e02b3cc33ef00321e8d20b78ca1cdcc8a06001600160a01b031663b9b3efe96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193e573d6000803e3d6000fd5b6001600160a01b0381166000908152601160205260408120805482036130115750600092915050565b6001810154600b5482546130259190613e0f565b610bdf9190613e26565b600061303961209f565b60065460405163087a556b60e41b81523060048201526001600160a01b038681166024830152610100909204909116906387a556b090604401600060405180830381600087803b15801561308c57600080fd5b505af11580156130a0573d6000803e3d6000fd5b505050506130ac612f94565b600a5414604051806040016040528060048152602001632299981960e11b815250906130eb5760405162461bcd60e51b815260040161097e9190613916565b5060006130f6612349565b9050821561310f5761310885856128cc565b9150613113565b8391505b600081613128670de0b6b3a764000085613e0f565b6131329190613e26565b9050600081600e546131449190613e5b565b600e8190556001600160a01b0388166000908152600f6020526040812080549293508492909190613176908490613e5b565b90915550506040517faf77103a98a12032881b6214985e03ff85a9c1ad6fed28f4b0f3c52e01bcc58b906131b1908990879086908690613eeb565b60405180910390a16040518281526001600160a01b0388169060009060008051602061411b8339815191529060200160405180910390a3505050610bdf6001600255565b6131fd61209f565b6006546040516315caa9e760e11b81523060048201523360248201819052604482018590529161010090046001600160a01b031690632b9553ce90606401600060405180830381600087803b15801561325557600080fd5b505af1158015613269573d6000803e3d6000fd5b50505050826132766126c9565b101560405180604001604052806004815260200163114ccc0d60e21b815250906132b35760405162461bcd60e51b815260040161097e9190613916565b506000836132c083612fe8565b6132ca9190613e5b565b9050600084600c546132dc9190613e5b565b6001600160a01b03841660009081526011602052604090819020848155600b54600190910155600c829055519091507f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809061333e908590889086908690613eeb565b60405180910390a183156133565761335683866125e0565b505050610b416001600255565b61336d8282611395565b610b415761337a816135de565b6133858360206135f0565b60405160200161339692919061401f565b60408051601f198184030181529082905262461bcd60e51b825261097e91600401613916565b6000613411826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661378c9092919063ffffffff16565b90508051600014806134325750808060200190518101906134329190614094565b610cd85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161097e565b6040516001600160a01b0380851660248301528316604482015260648101829052610cbd9085906323b872dd60e01b906084016125a9565b8015806135435750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135419190613de0565b155b6135ae5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161097e565b6040516001600160a01b038316602482015260448101829052610cd890849063095ea7b360e01b906064016125a9565b606061091c6001600160a01b03831660145b606060006135ff836002613e0f565b61360a906002613e5b565b67ffffffffffffffff81111561362257613622613b51565b6040519080825280601f01601f19166020018201604052801561364c576020820181803683370190505b509050600360fc1b81600081518110613667576136676140b1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613696576136966140b1565b60200101906001600160f81b031916908160001a90535060006136ba846002613e0f565b6136c5906001613e5b565b90505b600181111561373d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106136f9576136f96140b1565b1a60f81b82828151811061370f5761370f6140b1565b60200101906001600160f81b031916908160001a90535060049490941c93613736816140c7565b90506136c8565b508315610bdf5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161097e565b6060612341848460008585600080866001600160a01b031685876040516137b391906140de565b60006040518083038185875af1925050503d80600081146137f0576040519150601f19603f3d011682016040523d82523d6000602084013e6137f5565b606091505b509150915061380687838387613811565b979650505050505050565b60608315613880578251600003613879576001600160a01b0385163b6138795760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161097e565b5081612341565b61234183838151156138955781518083602001fd5b8060405162461bcd60e51b815260040161097e9190613916565b6000602082840312156138c157600080fd5b81356001600160e01b031981168114610bdf57600080fd5b6000602082840312156138eb57600080fd5b5035919050565b60005b8381101561390d5781810151838201526020016138f5565b50506000910152565b60208152600082518060208401526139358160408501602087016138f2565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610bb957600080fd5b6000806040838503121561397157600080fd5b823561397c81613949565b946020939093013593505050565b60006020828403121561399c57600080fd5b8135610bdf81613949565b6000806000606084860312156139bc57600080fd5b83356139c781613949565b925060208401356139d781613949565b929592945050506040919091013590565b8035610b8181613949565b60008060408385031215613a0657600080fd5b8235613a1181613949565b91506020830135613a2181613949565b809150509250929050565b8015158114610bb957600080fd5b60008060008060808587031215613a5057600080fd5b8435613a5b81613949565b9350602085013592506040850135613a7281613a2c565b91506060850135613a8281613949565b939692955090935050565b60008060408385031215613aa057600080fd5b823591506020830135613a2181613949565b600080600080600060808688031215613aca57600080fd5b8535613ad581613949565b94506020860135613ae581613949565b935060408601359250606086013567ffffffffffffffff80821115613b0957600080fd5b818801915088601f830112613b1d57600080fd5b813581811115613b2c57600080fd5b896020828501011115613b3e57600080fd5b9699959850939650602001949392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613b7857600080fd5b813567ffffffffffffffff80821115613b9357613b93613b51565b604051601f8301601f19908116603f01168101908282118183101715613bbb57613bbb613b51565b81604052838152866020858801011115613bd457600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff81168114610b8157600080fd5b600080600080600080600080610100898b031215613c2257600080fd5b8835613c2d81613949565b97506020890135613c3d81613949565b96506040890135613c4d81613949565b955060608901359450608089013567ffffffffffffffff80821115613c7157600080fd5b613c7d8c838d01613b67565b955060a08b0135915080821115613c9357600080fd5b50613ca08b828c01613b67565b935050613caf60c08a01613bf4565b915060e0890135613cbf81613949565b809150509295985092959890939650565b60008060008060008060008060006101208a8c031215613cef57600080fd5b8935613cfa81613949565b985060208a0135613d0a81613949565b9750613d1860408b016139e8565b965060608a0135955060808a013567ffffffffffffffff80821115613d3c57600080fd5b613d488d838e01613b67565b965060a08c0135915080821115613d5e57600080fd5b50613d6b8c828d01613b67565b945050613d7a60c08b01613bf4565b9250613d8860e08b016139e8565b9150613d976101008b016139e8565b90509295985092959850929598565b600181811c90821680613dba57607f821691505b602082108103613dda57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613df257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761091c5761091c613df9565b600082613e4357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561091c5761091c613df9565b8082018082111561091c5761091c613df9565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03878116825286166020820152604081018590526060810184905260a06080820181905281018290526000828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b601f821115610cd857600081815260208120601f850160051c81016020861015613f385750805b601f850160051c820191505b81811015613f5757828155600101613f44565b505050505050565b815167ffffffffffffffff811115613f7957613f79613b51565b613f8d81613f878454613da6565b84613f11565b602080601f831160018114613fc25760008415613faa5750858301515b600019600386901b1c1916600185901b178555613f57565b600085815260208120601f198616915b82811015613ff157888601518255948401946001909101908401613fd2565b508582101561400f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516140578160178501602088016138f2565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516140888160288401602088016138f2565b01602801949350505050565b6000602082840312156140a657600080fd5b8151610bdf81613a2c565b634e487b7160e01b600052603260045260246000fd5b6000816140d6576140d6613df9565b506000190190565b600082516140f08184602087016138f2565b919091019291505056feaefebe170cbaff0af052a32795af0e1b8afff9850f946ad2869be14f35534371ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202464c3cc558cc55ab0a9a725b7940d749134b7dd1cdb7c1b2fc4151d3f93e9d864736f6c63430008110033