Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,707 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exit | 20740619 | 23 days ago | IN | 0 ETH | 0.00025645 | ||||
Request Exit | 20484076 | 59 days ago | IN | 0 ETH | 0.0015083 | ||||
Exit | 20467035 | 62 days ago | IN | 0 ETH | 0.00026843 | ||||
Get Rewards | 20447412 | 64 days ago | IN | 0 ETH | 0.00012915 | ||||
Request Exit | 20425608 | 67 days ago | IN | 0 ETH | 0.00106219 | ||||
Get Rewards | 20425590 | 67 days ago | IN | 0 ETH | 0.00078192 | ||||
Exit | 20217449 | 96 days ago | IN | 0 ETH | 0.00041418 | ||||
Exit | 20216997 | 97 days ago | IN | 0 ETH | 0.00039993 | ||||
Request Exit | 20178588 | 102 days ago | IN | 0 ETH | 0.00122017 | ||||
Request Exit | 20175385 | 102 days ago | IN | 0 ETH | 0.00053846 | ||||
Get Rewards | 20175379 | 102 days ago | IN | 0 ETH | 0.00038517 | ||||
Request Exit | 20104683 | 112 days ago | IN | 0 ETH | 0.00101267 | ||||
Get Rewards | 19941808 | 135 days ago | IN | 0 ETH | 0.00118097 | ||||
Get Rewards | 19830893 | 150 days ago | IN | 0 ETH | 0.00049298 | ||||
Join | 19735223 | 164 days ago | IN | 0 ETH | 0.00141185 | ||||
Get Rewards | 19717583 | 166 days ago | IN | 0 ETH | 0.00145893 | ||||
Get Rewards | 19668537 | 173 days ago | IN | 0 ETH | 0.00190987 | ||||
Exit | 19629225 | 179 days ago | IN | 0 ETH | 0.00131961 | ||||
Exit | 19610899 | 181 days ago | IN | 0 ETH | 0.00213756 | ||||
Request Exit | 19590663 | 184 days ago | IN | 0 ETH | 0.0051011 | ||||
Request Exit | 19590647 | 184 days ago | IN | 0 ETH | 0.00620982 | ||||
Get Rewards | 19590646 | 184 days ago | IN | 0 ETH | 0.00415849 | ||||
Get Rewards | 19553610 | 189 days ago | IN | 0 ETH | 0.00194977 | ||||
Request Exit | 19479722 | 200 days ago | IN | 0 ETH | 0.00499776 | ||||
Get Rewards | 19479716 | 200 days ago | IN | 0 ETH | 0.0039543 |
Latest 2 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12949026 | 1161 days ago | Contract Creation | 0 ETH | |||
12949026 | 1161 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
GebLenderFirstResortRewardsVested
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-03 */ /// GebLenderFirstResortRewardsVested.sol // Copyright (C) 2021 Reflexer Labs, INC // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity 0.6.7; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } abstract contract TokenLike { function decimals() virtual public view returns (uint8); function totalSupply() virtual public view returns (uint256); function balanceOf(address) virtual public view returns (uint256); function mint(address, uint) virtual public; function burn(address, uint) virtual public; function approve(address, uint256) virtual external returns (bool); function transfer(address, uint256) virtual external returns (bool); function transferFrom(address,address,uint256) virtual external returns (bool); } abstract contract AuctionHouseLike { function activeStakedTokenAuctions() virtual public view returns (uint256); function startAuction(uint256, uint256) virtual external returns (uint256); } abstract contract AccountingEngineLike { function debtAuctionBidSize() virtual public view returns (uint256); function unqueuedUnauctionedDebt() virtual public view returns (uint256); } abstract contract SAFEEngineLike { function coinBalance(address) virtual public view returns (uint256); function debtBalance(address) virtual public view returns (uint256); } abstract contract RewardDripperLike { function dripReward() virtual external; function dripReward(address) virtual external; function rewardPerBlock() virtual external view returns (uint256); function rewardToken() virtual external view returns (TokenLike); } abstract contract StakingRewardsEscrowLike { function escrowRewards(address, uint256) virtual external; } // Stores tokens, owned by GebLenderFirstResortRewardsVested contract TokenPool { TokenLike public token; address public owner; constructor(address token_) public { token = TokenLike(token_); owner = msg.sender; } // @notice Transfers tokens from the pool (callable by owner only) function transfer(address to, uint256 wad) public { require(msg.sender == owner, "unauthorized"); require(token.transfer(to, wad), "TokenPool/failed-transfer"); } // @notice Returns token balance of the pool function balance() public view returns (uint256) { return token.balanceOf(address(this)); } } contract GebLenderFirstResortRewardsVested is ReentrancyGuard { // --- Auth --- mapping (address => uint) public authorizedAccounts; /** * @notice Add auth to an account * @param account Account to add auth to */ function addAuthorization(address account) virtual external isAuthorized { authorizedAccounts[account] = 1; emit AddAuthorization(account); } /** * @notice Remove auth from an account * @param account Account to remove auth from */ function removeAuthorization(address account) virtual external isAuthorized { authorizedAccounts[account] = 0; emit RemoveAuthorization(account); } /** * @notice Checks whether msg.sender can call an authed function **/ modifier isAuthorized { require(authorizedAccounts[msg.sender] == 1, "GebLenderFirstResortRewardsVested/account-not-authorized"); _; } // --- Structs --- struct ExitRequest { // Exit window deadline uint256 deadline; // Ancestor amount queued for exit uint256 lockedAmount; } // --- Variables --- // Flag that allows/blocks joining bool public canJoin; // Flag that indicates whether canPrintProtocolTokens can ignore auctioning ancestor tokens bool public bypassAuctions; // Whether the contract allows forced exits or not bool public forcedExit; // Last block when a reward was pulled uint256 public lastRewardBlock; // The current delay enforced on an exit uint256 public exitDelay; // Min maount of ancestor tokens that must remain in the contract and not be auctioned uint256 public minStakedTokensToKeep; // Max number of auctions that can be active at a time uint256 public maxConcurrentAuctions; // Amount of ancestor tokens to auction at a time uint256 public tokensToAuction; // Initial amount of system coins to request in exchange for tokensToAuction uint256 public systemCoinsToRequest; // Amount of rewards per share accumulated (total, see rewardDebt for more info) uint256 public accTokensPerShare; // Balance of the rewards token in this contract since last update uint256 public rewardsBalance; // Staked Supply (== sum of all staked balances) uint256 public stakedSupply; // Percentage of claimed rewards that will be vested uint256 public percentageVested; // Whether the escrow is paused or not uint256 public escrowPaused; // Balances (not affected by slashing) mapping(address => uint256) public descendantBalanceOf; // Exit data mapping(address => ExitRequest) public exitRequests; // The amount of tokens inneligible for claiming rewards (see formula below) mapping(address => uint256) internal rewardDebt; // Pending reward = (descendant.balanceOf(user) * accTokensPerShare) - rewardDebt[user] // The token being deposited in the pool TokenPool public ancestorPool; // The token used to pay rewards TokenPool public rewardPool; // Descendant token TokenLike public descendant; // Auction house for staked tokens AuctionHouseLike public auctionHouse; // Accounting engine contract AccountingEngineLike public accountingEngine; // The safe engine contract SAFEEngineLike public safeEngine; // Contract that drips rewards RewardDripperLike public rewardDripper; // Escrow for rewards StakingRewardsEscrowLike public escrow; // Max delay that can be enforced for an exit uint256 public immutable MAX_DELAY; // --- Events --- event AddAuthorization(address account); event RemoveAuthorization(address account); event ModifyParameters(bytes32 indexed parameter, uint256 data); event ModifyParameters(bytes32 indexed parameter, address data); event ToggleJoin(bool canJoin); event ToggleBypassAuctions(bool bypassAuctions); event ToggleForcedExit(bool forcedExit); event AuctionAncestorTokens(address auctionHouse, uint256 amountAuctioned, uint256 amountRequested); event RequestExit(address indexed account, uint256 deadline, uint256 amount); event Join(address indexed account, uint256 price, uint256 amount); event Exit(address indexed account, uint256 price, uint256 amount); event RewardsPaid(address account, uint256 amount); event EscrowRewards(address escrow, address who, uint256 amount); event PoolUpdated(uint256 accTokensPerShare, uint256 stakedSupply); event FailEscrowRewards(bytes revertReason); constructor( address ancestor_, address descendant_, address rewardToken_, address auctionHouse_, address accountingEngine_, address safeEngine_, address rewardDripper_, address escrow_, uint256 maxDelay_, uint256 exitDelay_, uint256 minStakedTokensToKeep_, uint256 tokensToAuction_, uint256 systemCoinsToRequest_, uint256 percentageVested_ ) public { require(maxDelay_ > 0, "GebLenderFirstResortRewardsVested/null-max-delay"); require(exitDelay_ <= maxDelay_, "GebLenderFirstResortRewardsVested/invalid-exit-delay"); require(minStakedTokensToKeep_ > 0, "GebLenderFirstResortRewardsVested/null-min-staked-tokens"); require(tokensToAuction_ > 0, "GebLenderFirstResortRewardsVested/null-tokens-to-auction"); require(systemCoinsToRequest_ > 0, "GebLenderFirstResortRewardsVested/null-sys-coins-to-request"); require(auctionHouse_ != address(0), "GebLenderFirstResortRewardsVested/null-auction-house"); require(accountingEngine_ != address(0), "GebLenderFirstResortRewardsVested/null-accounting-engine"); require(safeEngine_ != address(0), "GebLenderFirstResortRewardsVested/null-safe-engine"); require(rewardDripper_ != address(0), "GebLenderFirstResortRewardsVested/null-reward-dripper"); require(escrow_ != address(0), "GebLenderFirstResortRewardsVested/null-escrow"); require(percentageVested_ < 100, "GebLenderFirstResortRewardsVested/invalid-percentage-vested"); require(descendant_ != address(0), "GebLenderFirstResortRewardsVested/null-descendant"); authorizedAccounts[msg.sender] = 1; canJoin = true; maxConcurrentAuctions = uint(-1); MAX_DELAY = maxDelay_; exitDelay = exitDelay_; minStakedTokensToKeep = minStakedTokensToKeep_; tokensToAuction = tokensToAuction_; systemCoinsToRequest = systemCoinsToRequest_; percentageVested = percentageVested_; auctionHouse = AuctionHouseLike(auctionHouse_); accountingEngine = AccountingEngineLike(accountingEngine_); safeEngine = SAFEEngineLike(safeEngine_); rewardDripper = RewardDripperLike(rewardDripper_); escrow = StakingRewardsEscrowLike(escrow_); descendant = TokenLike(descendant_); ancestorPool = new TokenPool(ancestor_); rewardPool = new TokenPool(rewardToken_); lastRewardBlock = block.number; require(ancestorPool.token().decimals() == 18, "GebLenderFirstResortRewardsVested/ancestor-decimal-mismatch"); require(descendant.decimals() == 18, "GebLenderFirstResortRewardsVested/descendant-decimal-mismatch"); emit AddAuthorization(msg.sender); } // --- Boolean Logic --- function both(bool x, bool y) internal pure returns (bool z) { assembly{ z := and(x, y)} } function either(bool x, bool y) internal pure returns (bool z) { assembly{ z := or(x, y)} } // --- Math --- uint256 public constant WAD = 10 ** 18; uint256 public constant RAY = 10 ** 27; function addition(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "GebLenderFirstResortRewardsVested/add-overflow"); } function subtract(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "GebLenderFirstResortRewardsVested/sub-underflow"); } function multiply(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "GebLenderFirstResortRewardsVested/mul-overflow"); } function wdivide(uint x, uint y) internal pure returns (uint z) { require(y > 0, "GebLenderFirstResortRewardsVested/wdiv-by-zero"); z = multiply(x, WAD) / y; } function wmultiply(uint x, uint y) internal pure returns (uint z) { z = multiply(x, y) / WAD; } // --- Administration --- /* * @notify Switch between allowing and disallowing joins */ function toggleJoin() external isAuthorized { canJoin = !canJoin; emit ToggleJoin(canJoin); } /* * @notify Switch between ignoring and taking into account auctions in canPrintProtocolTokens */ function toggleBypassAuctions() external isAuthorized { bypassAuctions = !bypassAuctions; emit ToggleBypassAuctions(bypassAuctions); } /* * @notify Switch between allowing exits when the system is underwater or blocking them */ function toggleForcedExit() external isAuthorized { forcedExit = !forcedExit; emit ToggleForcedExit(forcedExit); } /* * @notify Modify an uint256 parameter * @param parameter The name of the parameter to modify * @param data New value for the parameter */ function modifyParameters(bytes32 parameter, uint256 data) external isAuthorized { if (parameter == "exitDelay") { require(data <= MAX_DELAY, "GebLenderFirstResortRewardsVested/invalid-exit-delay"); exitDelay = data; } else if (parameter == "minStakedTokensToKeep") { require(data > 0, "GebLenderFirstResortRewardsVested/null-min-staked-tokens"); minStakedTokensToKeep = data; } else if (parameter == "tokensToAuction") { require(data > 0, "GebLenderFirstResortRewardsVested/invalid-tokens-to-auction"); tokensToAuction = data; } else if (parameter == "systemCoinsToRequest") { require(data > 0, "GebLenderFirstResortRewardsVested/invalid-sys-coins-to-request"); systemCoinsToRequest = data; } else if (parameter == "maxConcurrentAuctions") { require(data > 1, "GebLenderFirstResortRewardsVested/invalid-max-concurrent-auctions"); maxConcurrentAuctions = data; } else if (parameter == "escrowPaused") { require(data <= 1, "GebLenderFirstResortRewardsVested/invalid-escrow-paused"); escrowPaused = data; } else if (parameter == "percentageVested") { require(data < 100, "GebLenderFirstResortRewardsVested/invalid-percentage-vested"); percentageVested = data; } else revert("GebLenderFirstResortRewardsVested/modify-unrecognized-param"); emit ModifyParameters(parameter, data); } /* * @notify Modify an address parameter * @param parameter The name of the parameter to modify * @param data New value for the parameter */ function modifyParameters(bytes32 parameter, address data) external isAuthorized { require(data != address(0), "GebLenderFirstResortRewardsVested/null-data"); if (parameter == "auctionHouse") { auctionHouse = AuctionHouseLike(data); } else if (parameter == "accountingEngine") { accountingEngine = AccountingEngineLike(data); } else if (parameter == "rewardDripper") { rewardDripper = RewardDripperLike(data); } else if (parameter == "escrow") { escrow = StakingRewardsEscrowLike(data); } else revert("GebLenderFirstResortRewardsVested/modify-unrecognized-param"); emit ModifyParameters(parameter, data); } // --- Getters --- /* * @notify Return the ancestor token balance for this contract */ function depositedAncestor() public view returns (uint256) { return ancestorPool.balance(); } /* * @notify Returns how many ancestor tokens are offered for one descendant token */ function ancestorPerDescendant() public view returns (uint256) { return stakedSupply == 0 ? WAD : wdivide(depositedAncestor(), stakedSupply); } /* * @notify Returns how many descendant tokens are offered for one ancestor token */ function descendantPerAncestor() public view returns (uint256) { return stakedSupply == 0 ? WAD : wdivide(stakedSupply, depositedAncestor()); } /* * @notify Given a custom amount of ancestor tokens, it returns the corresponding amount of descendant tokens to mint when someone joins * @param wad The amount of ancestor tokens to compute the descendant tokens for */ function joinPrice(uint256 wad) public view returns (uint256) { return wmultiply(wad, descendantPerAncestor()); } /* * @notify Given a custom amount of descendant tokens, it returns the corresponding amount of ancestor tokens to send when someone exits * @param wad The amount of descendant tokens to compute the ancestor tokens for */ function exitPrice(uint256 wad) public view returns (uint256) { return wmultiply(wad, ancestorPerDescendant()); } /* * @notice Returns whether the protocol is underwater or not */ function protocolUnderwater() public view returns (bool) { uint256 unqueuedUnauctionedDebt = accountingEngine.unqueuedUnauctionedDebt(); return both( accountingEngine.debtAuctionBidSize() <= unqueuedUnauctionedDebt, safeEngine.coinBalance(address(accountingEngine)) < unqueuedUnauctionedDebt ); } /* * @notice Burn descendant tokens in exchange for getting ancestor tokens from this contract * @return Whether the pool can auction ancestor tokens */ function canAuctionTokens() public view returns (bool) { return both( both(protocolUnderwater(), addition(minStakedTokensToKeep, tokensToAuction) <= depositedAncestor()), auctionHouse.activeStakedTokenAuctions() < maxConcurrentAuctions ); } /* * @notice Returns whether the system can mint new ancestor tokens */ function canPrintProtocolTokens() public view returns (bool) { return both( !canAuctionTokens(), either(auctionHouse.activeStakedTokenAuctions() == 0, bypassAuctions) ); } /* * @notice Returns unclaimed rewards for a given user */ function pendingRewards(address user) public view returns (uint256) { uint accTokensPerShare_ = accTokensPerShare; if (block.number > lastRewardBlock && stakedSupply != 0) { uint increaseInBalance = (block.number - lastRewardBlock) * rewardDripper.rewardPerBlock(); accTokensPerShare_ = addition(accTokensPerShare_, multiply(increaseInBalance, RAY) / stakedSupply); } return subtract(multiply(descendantBalanceOf[user], accTokensPerShare_) / RAY, rewardDebt[user]); } /* * @notice Returns rewards earned per block for each token deposited (WAD) */ function rewardRate() public view returns (uint256) { if (stakedSupply == 0) return 0; return (rewardDripper.rewardPerBlock() * WAD) / stakedSupply; } // --- Core Logic --- /* * @notify Updates the pool and pays rewards (if any) * @dev Must be included in deposits and withdrawals */ modifier payRewards() { updatePool(); if (descendantBalanceOf[msg.sender] > 0 && rewardPool.balance() > 0) { // Pays the reward uint256 pending = subtract(multiply(descendantBalanceOf[msg.sender], accTokensPerShare) / RAY, rewardDebt[msg.sender]); uint256 vested; if (both(address(escrow) != address(0), escrowPaused == 0)) { vested = multiply(pending, percentageVested) / 100; try escrow.escrowRewards(msg.sender, vested) { rewardPool.transfer(address(escrow), vested); emit EscrowRewards(address(escrow), msg.sender, vested); } catch(bytes memory revertReason) { emit FailEscrowRewards(revertReason); } } rewardPool.transfer(msg.sender, subtract(pending, vested)); rewardsBalance = rewardPool.balance(); emit RewardsPaid(msg.sender, pending); } _; rewardDebt[msg.sender] = multiply(descendantBalanceOf[msg.sender], accTokensPerShare) / RAY; } /* * @notify Pays outstanding rewards to msg.sender */ function getRewards() external nonReentrant payRewards {} /* * @notify Pull funds from the dripper */ function pullFunds() public { rewardDripper.dripReward(address(rewardPool)); } /* * @notify Updates pool data */ function updatePool() public { if (block.number <= lastRewardBlock) return; lastRewardBlock = block.number; if (stakedSupply == 0) return; pullFunds(); uint256 increaseInBalance = subtract(rewardPool.balance(), rewardsBalance); rewardsBalance = addition(rewardsBalance, increaseInBalance); // Updates distribution info accTokensPerShare = addition(accTokensPerShare, multiply(increaseInBalance, RAY) / stakedSupply); emit PoolUpdated(accTokensPerShare, stakedSupply); } /* * @notify Create a new auction that sells ancestor tokens in exchange for system coins */ function auctionAncestorTokens() external nonReentrant { require(canAuctionTokens(), "GebLenderFirstResortRewardsVested/cannot-auction-tokens"); ancestorPool.transfer(address(this), tokensToAuction); ancestorPool.token().approve(address(auctionHouse), tokensToAuction); auctionHouse.startAuction(tokensToAuction, systemCoinsToRequest); updatePool(); emit AuctionAncestorTokens(address(auctionHouse), tokensToAuction, systemCoinsToRequest); } /* * @notify Join ancestor tokens * @param wad The amount of ancestor tokens to join */ function join(uint256 wad) external nonReentrant payRewards { require(both(canJoin, !protocolUnderwater()), "GebLenderFirstResortRewardsVested/join-not-allowed"); require(wad > 0, "GebLenderFirstResortRewardsVested/null-ancestor-to-join"); uint256 price = joinPrice(wad); require(price > 0, "GebLenderFirstResortRewardsVested/null-join-price"); require(ancestorPool.token().transferFrom(msg.sender, address(ancestorPool), wad), "GebLenderFirstResortRewardsVested/could-not-transfer-ancestor"); descendant.mint(msg.sender, price); descendantBalanceOf[msg.sender] = addition(descendantBalanceOf[msg.sender], price); stakedSupply = addition(stakedSupply, price); emit Join(msg.sender, price, wad); } /* * @notice Request an exit for a specific amount of ancestor tokens * @param wad The amount of tokens to exit */ function requestExit(uint wad) external nonReentrant payRewards { require(wad > 0, "GebLenderFirstResortRewardsVested/null-amount-to-exit"); exitRequests[msg.sender].deadline = addition(now, exitDelay); exitRequests[msg.sender].lockedAmount = addition(exitRequests[msg.sender].lockedAmount, wad); descendantBalanceOf[msg.sender] = subtract(descendantBalanceOf[msg.sender], wad); descendant.burn(msg.sender, wad); emit RequestExit(msg.sender, exitRequests[msg.sender].deadline, wad); } /* * @notify Exit ancestor tokens */ function exit() external nonReentrant { require(both(now >= exitRequests[msg.sender].deadline, exitRequests[msg.sender].lockedAmount > 0), "GebLenderFirstResortRewardsVested/wait-more"); require(either(!protocolUnderwater(), forcedExit), "GebLenderFirstResortRewardsVested/exit-not-allowed"); uint256 price = exitPrice(exitRequests[msg.sender].lockedAmount); stakedSupply = subtract(stakedSupply, exitRequests[msg.sender].lockedAmount); ancestorPool.transfer(msg.sender, price); emit Exit(msg.sender, price, exitRequests[msg.sender].lockedAmount); delete exitRequests[msg.sender]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"ancestor_","type":"address"},{"internalType":"address","name":"descendant_","type":"address"},{"internalType":"address","name":"rewardToken_","type":"address"},{"internalType":"address","name":"auctionHouse_","type":"address"},{"internalType":"address","name":"accountingEngine_","type":"address"},{"internalType":"address","name":"safeEngine_","type":"address"},{"internalType":"address","name":"rewardDripper_","type":"address"},{"internalType":"address","name":"escrow_","type":"address"},{"internalType":"uint256","name":"maxDelay_","type":"uint256"},{"internalType":"uint256","name":"exitDelay_","type":"uint256"},{"internalType":"uint256","name":"minStakedTokensToKeep_","type":"uint256"},{"internalType":"uint256","name":"tokensToAuction_","type":"uint256"},{"internalType":"uint256","name":"systemCoinsToRequest_","type":"uint256"},{"internalType":"uint256","name":"percentageVested_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AddAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"auctionHouse","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountAuctioned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountRequested","type":"uint256"}],"name":"AuctionAncestorTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"escrow","type":"address"},{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EscrowRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Exit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"revertReason","type":"bytes"}],"name":"FailEscrowRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Join","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"accTokensPerShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakedSupply","type":"uint256"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RemoveAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RequestExit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"bypassAuctions","type":"bool"}],"name":"ToggleBypassAuctions","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"forcedExit","type":"bool"}],"name":"ToggleForcedExit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"canJoin","type":"bool"}],"name":"ToggleJoin","type":"event"},{"inputs":[],"name":"MAX_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accTokensPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountingEngine","outputs":[{"internalType":"contract AccountingEngineLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ancestorPerDescendant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ancestorPool","outputs":[{"internalType":"contract TokenPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionAncestorTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auctionHouse","outputs":[{"internalType":"contract AuctionHouseLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAccounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bypassAuctions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canAuctionTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canJoin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canPrintProtocolTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositedAncestor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"descendant","outputs":[{"internalType":"contract TokenLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"descendantBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"descendantPerAncestor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"escrow","outputs":[{"internalType":"contract StakingRewardsEscrowLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"escrowPaused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"exitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exitRequests","outputs":[{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"lockedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forcedExit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"join","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"joinPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxConcurrentAuctions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStakedTokensToKeep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentageVested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolUnderwater","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"requestExit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDripper","outputs":[{"internalType":"contract RewardDripperLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"contract TokenPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safeEngine","outputs":[{"internalType":"contract SAFEEngineLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"systemCoinsToRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleBypassAuctions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleForcedExit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleJoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensToAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200438a3803806200438a83398181016040526101c08110156200003857600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e08801516101008901516101208a01516101408b01516101608c01516101808d01516101a0909d015160016000559b9c9a9b999a98999798969795969495939492939192909185620000de5760405162461bcd60e51b81526004018080602001828103825260308152602001806200414a6030913960400191505060405180910390fd5b858511156200011f5760405162461bcd60e51b8152600401808060200182810382526034815260200180620042e96034913960400191505060405180910390fd5b60008411620001605760405162461bcd60e51b8152600401808060200182810382526038815260200180620042b16038913960400191505060405180910390fd5b60008311620001a15760405162461bcd60e51b81526004018080602001828103825260388152602001806200431d6038913960400191505060405180910390fd5b60008211620001e25760405162461bcd60e51b815260040180806020018281038252603b815260200180620040d2603b913960400191505060405180910390fd5b6001600160a01b038b16620002295760405162461bcd60e51b8152600401808060200182810382526034815260200180620041e26034913960400191505060405180910390fd5b6001600160a01b038a16620002705760405162461bcd60e51b8152600401808060200182810382526038815260200180620042486038913960400191505060405180910390fd5b6001600160a01b038916620002b75760405162461bcd60e51b8152600401808060200182810382526032815260200180620042166032913960400191505060405180910390fd5b6001600160a01b038816620002fe5760405162461bcd60e51b8152600401808060200182810382526035815260200180620043556035913960400191505060405180910390fd5b6001600160a01b038716620003455760405162461bcd60e51b815260040180806020018281038252602d815260200180620041b5602d913960400191505060405180910390fd5b60648110620003865760405162461bcd60e51b815260040180806020018281038252603b8152602001806200417a603b913960400191505060405180910390fd5b6001600160a01b038d16620003cd5760405162461bcd60e51b8152600401808060200182810382526031815260200180620042806031913960400191505060405180910390fd5b6001806000336001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260006101000a81548160ff02191690831515021790555060001960068190555085608081815250508460048190555083600581905550826007819055508160088190555080600c819055508a601460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089601560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088601660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087601760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086601860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508c601360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d6040516200053f9062000814565b6001600160a01b03909116815260405190819003602001906000f0801580156200056d573d6000803e3d6000fd5b50601180546001600160a01b0319166001600160a01b03929092169190911790556040518c906200059e9062000814565b6001600160a01b03909116815260405190819003602001906000f080158015620005cc573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b039283161790554360035560115460408051637e062a3560e11b81529051919092169163fc0c546a916004808301926020929190829003018186803b1580156200062b57600080fd5b505afa15801562000640573d6000803e3d6000fd5b505050506040513d60208110156200065757600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200069c57600080fd5b505afa158015620006b1573d6000803e3d6000fd5b505050506040513d6020811015620006c857600080fd5b505160ff166012146200070d5760405162461bcd60e51b815260040180806020018281038252603b81526020018062004097603b913960400191505060405180910390fd5b601360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200075c57600080fd5b505afa15801562000771573d6000803e3d6000fd5b505050506040513d60208110156200078857600080fd5b505160ff16601214620007cd5760405162461bcd60e51b815260040180806020018281038252603d8152602001806200410d603d913960400191505060405180910390fd5b6040805133815290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029181900360200190a1505050505050505050505050505062000822565b61032b8062003d6c83390190565b60805161352a62000842600039806116ab5280612bed525061352a6000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80636a1460241161019d578063aa88e788116100e9578063e2fdcc17116100a2578063e9fad8ee1161007c578063e9fad8ee14610605578063ec2c20d71461060d578063ed9152c81461062a578063fe4f5890146106325761030c565b8063e2fdcc17146105ed578063e3161ddd146105f5578063e43a0bb2146105fd5761030c565b8063aa88e788146105bd578063ba1da585146105c5578063c734b40e146105cd578063d4056655146105d5578063d41ce4b1146105dd578063da56eedb146105e55761030c565b80637e90cbe111610156578063961d45c411610130578063961d45c41461059d578063a19fe9e3146105a5578063a86eaca4146105ad578063a9f8d181146105b55761030c565b80637e90cbe11461056757806394bebfbb1461056f57806394f3f81d146105775761030c565b80636a1460241461050d5780636ff3ae6414610515578063721c65131461053257806373f5acef1461054f57806379d07015146105575780637b0a47ee1461055f5761030c565b806331d7a2621161025c57806359546fc411610215578063628c50a5116101ef578063628c50a5146104ab5780636614f010146104d157806366666aa9146104fd57806367aea313146105055761030c565b806359546fc4146104775780635c4036191461049b5780635e9153e6146104a35761030c565b806331d7a262146103d457806335b28153146103fa5780633b987bfc146104205780634125ff901461042857806351da8acf14610430578063552033c41461046f5761030c565b80631976eb8e116102c957806324ba5884116102a357806324ba58841461039657806328388630146103bc57806328e97ce6146103c45780632f3c9a4f146103cc5761030c565b80631976eb8e1461036a5780631a47d8561461037257806324463f1b1461037a5761030c565b8063049878f3146103115780630572b0cc146103305780630d86009c146103385780630e0c76de146103525780631162e6a41461035a578063131f2e5314610362575b600080fd5b61032e6004803603602081101561032757600080fd5b5035610655565b005b61032e610e42565b610340611312565b60408051918252519081900360200190f35b61032e611318565b6103406113c2565b6103406113f6565b6103406113fc565b610340611402565b610382611408565b604080519115158252519081900360200190f35b610340600480360360208110156103ac57600080fd5b50356001600160a01b0316611417565b610340611429565b61032e61142f565b6103406114cb565b610340600480360360208110156103ea57600080fd5b50356001600160a01b03166114d1565b61032e6004803603602081101561041057600080fd5b50356001600160a01b0316611600565b6103406116a3565b6103406116a9565b6104566004803603602081101561044657600080fd5b50356001600160a01b03166116cd565b6040805192835260208301919091528051918290030190f35b6103406116e6565b61047f6116f5565b604080516001600160a01b039092168252519081900360200190f35b61032e611704565b6103826117b0565b610340600480360360208110156104c157600080fd5b50356001600160a01b0316611860565b61032e600480360360408110156104e757600080fd5b50803590602001356001600160a01b0316611872565b61047f611a5b565b61047f611a6a565b610340611a79565b6103406004803603602081101561052b57600080fd5b5035611a85565b61032e6004803603602081101561054857600080fd5b5035611a9e565b6103406120a5565b6103826120ab565b6103406121fe565b61034061229c565b6103406122bb565b61032e6004803603602081101561058d57600080fd5b50356001600160a01b03166122c1565b61047f612363565b61032e612372565b610382612656565b61034061265f565b61047f612665565b610340612674565b6103826126ea565b6103826126f8565b61034061279b565b61047f6127a1565b61047f6127b0565b61032e6127bf565b61032e6128e4565b61032e61294f565b6103406004803603602081101561062357600080fd5b5035612b6b565b61047f612b79565b61032e6004803603604081101561064857600080fd5b5080359060200135612b88565b6002600054141561069b576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b60026000556106a86127bf565b336000908152600e6020526040902054158015906107345750601254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b15801561070657600080fd5b505afa15801561071a573d6000803e3d6000fd5b505050506040513d602081101561073057600080fd5b5051115b15610af957336000908152600e602052604081205460095461078791676765c793fa10079d601b1b916107679190612eec565b8161076e57fe5b3360009081526010602052604090205491900490612f42565b601854600d549192506000916107a9916001600160a01b031615159015612f84565b156109bb5760646107bc83600c54612eec565b816107c357fe5b60185460408051630a1dfc1360e21b8152336004820152939092046024840181905291519193506001600160a01b031691632877f04c91604480830192600092919082900301818387803b15801561081a57600080fd5b505af192505050801561082b575060015b6108fe573d808015610859576040519150601f19603f3d011682016040523d82523d6000602084013e61085e565b606091505b507f4db2e449a7b24364136173e75f7161233ace27438153323e778c5edbf237e680816040518080602001828103825283818151815260200191508051906020019080838360005b838110156108be5781810151838201526020016108a6565b50505050905090810190601f1680156108eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1506109bb565b6012546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb91604480830192600092919082900301818387803b15801561095657600080fd5b505af115801561096a573d6000803e3d6000fd5b5050601854604080516001600160a01b039092168252336020830152818101859052517f67672cc85e5f7be7dfc7a6f1bdb381e9b9809f4d251edc3e7bc49aef52b5a4919350908190036060019150a15b6012546001600160a01b031663a9059cbb336109d78585612f42565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50505050601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8c57600080fd5b505afa158015610aa0573d6000803e3d6000fd5b505050506040513d6020811015610ab657600080fd5b5051600a55604080513381526020810184905281517fd5ec1b97fc4d048ade361b013c285a0a5c1c40ae32579013ad3798ee657d9de7929181900390910190a150505b600254610b119060ff16610b0b6120ab565b15612f84565b610b4c5760405162461bcd60e51b81526004018080602001828103825260328152602001806133616032913960400191505060405180910390fd5b60008111610b8b5760405162461bcd60e51b81526004018080602001828103825260378152602001806131336037913960400191505060405180910390fd5b6000610b9682612b6b565b905060008111610bd75760405162461bcd60e51b81526004018080602001828103825260318152602001806134206031913960400191505060405180910390fd5b601160009054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2557600080fd5b505afa158015610c39573d6000803e3d6000fd5b505050506040513d6020811015610c4f57600080fd5b5051601154604080516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101869052905191909216916323b872dd9160648083019260209291908290030181600087803b158015610cad57600080fd5b505af1158015610cc1573d6000803e3d6000fd5b505050506040513d6020811015610cd757600080fd5b5051610d145760405162461bcd60e51b815260040180806020018281038252603d81526020018061316a603d913960400191505060405180910390fd5b601354604080516340c10f1960e01b81523360048201526024810184905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b5050336000908152600e6020526040902054610d9a9250905082612f88565b336000908152600e6020526040902055600b54610db79082612f88565b600b556040805182815260208101849052815133927fbca387acb0ba7d06e329c4372885bb664f19a98153ccf3e74e56c136bf0e88c4928290030190a250336000908152600e6020526040902054600954676765c793fa10079d601b1b91610e1e91612eec565b81610e2557fe5b336000908152601060205260408120929091049091556001905550565b60026000541415610e88576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b6002600055610e956127bf565b336000908152600e602052604090205415801590610f215750601254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d6020811015610f1d57600080fd5b5051115b156112c657336000908152600e6020526040812054600954610f5491676765c793fa10079d601b1b916107679190612eec565b601854600d54919250600091610f76916001600160a01b031615159015612f84565b15611188576064610f8983600c54612eec565b81610f9057fe5b60185460408051630a1dfc1360e21b8152336004820152939092046024840181905291519193506001600160a01b031691632877f04c91604480830192600092919082900301818387803b158015610fe757600080fd5b505af1925050508015610ff8575060015b6110cb573d808015611026576040519150601f19603f3d011682016040523d82523d6000602084013e61102b565b606091505b507f4db2e449a7b24364136173e75f7161233ace27438153323e778c5edbf237e680816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561108b578181015183820152602001611073565b50505050905090810190601f1680156110b85780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611188565b6012546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb91604480830192600092919082900301818387803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b5050601854604080516001600160a01b039092168252336020830152818101859052517f67672cc85e5f7be7dfc7a6f1bdb381e9b9809f4d251edc3e7bc49aef52b5a4919350908190036060019150a15b6012546001600160a01b031663a9059cbb336111a48585612f42565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156111f357600080fd5b505af1158015611207573d6000803e3d6000fd5b50505050601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561125957600080fd5b505afa15801561126d573d6000803e3d6000fd5b505050506040513d602081101561128357600080fd5b5051600a55604080513381526020810184905281517fd5ec1b97fc4d048ade361b013c285a0a5c1c40ae32579013ad3798ee657d9de7929181900390910190a150505b336000908152600e6020526040902054600954676765c793fa10079d601b1b916112ef91612eec565b816112f657fe5b3360009081526010602052604081209290910490915560019055565b600d5481565b33600090815260016020819052604090912054146113675760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6002805460ff610100808304821615810261ff001990931692909217928390556040805192909304161515815290517f9fdd4155cb7fc6f6912385f4f0c9bc86bb1282c9dd3d6d86b618a2291f6fc7719181900360200190a1565b6000600b546000146113e6576113e1600b546113dc612674565b612fca565b6113f0565b670de0b6b3a76400005b90505b90565b600a5481565b60065481565b60075481565b60025462010000900460ff1681565b60016020526000908152604090205481565b60045481565b336000908152600160208190526040909120541461147e5760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6002805460ff19811660ff918216151791829055604080519290911615158252517f7dc6d5f7de2146a02aa91321e6f05614c85f0316cb5c0a12e0897f2fd30666829181900360200190a1565b60095481565b60095460035460009190431180156114ea5750600b5415155b1561159c57601754604080516322b8e72b60e21b815290516000926001600160a01b031691638ae39cac916004808301926020929190829003018186803b15801561153457600080fd5b505afa158015611548573d6000803e3d6000fd5b505050506040513d602081101561155e57600080fd5b5051600354600b544391909103909102915061159890839061158b84676765c793fa10079d601b1b612eec565b8161159257fe5b04612f88565b9150505b6001600160a01b0383166000908152600e60205260409020546115f990676765c793fa10079d601b1b906115d09084612eec565b816115d757fe5b6001600160a01b03861660009081526010602052604090205491900490612f42565b9392505050565b336000908152600160208190526040909120541461164f5760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6001600160a01b03811660008181526001602081815260409283902091909155815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f602052600090815260409020805460019091015482565b676765c793fa10079d601b1b81565b6017546001600160a01b031681565b33600090815260016020819052604090912054146117535760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6002805460ff62010000808304821615810262ff00001990931692909217928390556040805192909304161515815290517f2556a991abd9f74d727d88623dc8f637c4d913be5c71c19c4bb1c09f68a4fdc09181900360200190a1565b60006113f06117dd6117c06120ab565b6117c8612674565b6117d6600554600754612f88565b1115612f84565b600654601460009054906101000a90046001600160a01b03166001600160a01b031663f5897a526040518163ffffffff1660e01b815260040160206040518083038186803b15801561182e57600080fd5b505afa158015611842573d6000803e3d6000fd5b505050506040513d602081101561185857600080fd5b505110612f84565b600e6020526000908152604090205481565b33600090815260016020819052604090912054146118c15760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6001600160a01b0381166119065760405162461bcd60e51b815260040180806020018281038252602b8152602001806133c1602b913960400191505060405180910390fd5b816b61756374696f6e486f75736560a01b141561193d57601480546001600160a01b0319166001600160a01b038316179055611a18565b816f6163636f756e74696e67456e67696e6560801b141561197857601580546001600160a01b0319166001600160a01b038316179055611a18565b816c3932bbb0b932223934b83832b960991b14156119b057601780546001600160a01b0319166001600160a01b038316179055611a18565b8165657363726f7760d01b14156119e157601880546001600160a01b0319166001600160a01b038316179055611a18565b60405162461bcd60e51b815260040180806020018281038252603b815260200180613210603b913960400191505060405180910390fd5b604080516001600160a01b0383168152905183917fd91f38cf03346b5dc15fb60f9076f866295231ad3c3841a1051f8443f25170d1919081900360200190a25050565b6012546001600160a01b031681565b6016546001600160a01b031681565b670de0b6b3a764000081565b6000611a9882611a9361229c565b61302c565b92915050565b60026000541415611ae4576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b6002600055611af16127bf565b336000908152600e602052604090205415801590611b7d5750601254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b158015611b4f57600080fd5b505afa158015611b63573d6000803e3d6000fd5b505050506040513d6020811015611b7957600080fd5b5051115b15611f2257336000908152600e6020526040812054600954611bb091676765c793fa10079d601b1b916107679190612eec565b601854600d54919250600091611bd2916001600160a01b031615159015612f84565b15611de4576064611be583600c54612eec565b81611bec57fe5b60185460408051630a1dfc1360e21b8152336004820152939092046024840181905291519193506001600160a01b031691632877f04c91604480830192600092919082900301818387803b158015611c4357600080fd5b505af1925050508015611c54575060015b611d27573d808015611c82576040519150601f19603f3d011682016040523d82523d6000602084013e611c87565b606091505b507f4db2e449a7b24364136173e75f7161233ace27438153323e778c5edbf237e680816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ce7578181015183820152602001611ccf565b50505050905090810190601f168015611d145780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611de4565b6012546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb91604480830192600092919082900301818387803b158015611d7f57600080fd5b505af1158015611d93573d6000803e3d6000fd5b5050601854604080516001600160a01b039092168252336020830152818101859052517f67672cc85e5f7be7dfc7a6f1bdb381e9b9809f4d251edc3e7bc49aef52b5a4919350908190036060019150a15b6012546001600160a01b031663a9059cbb33611e008585612f42565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611e4f57600080fd5b505af1158015611e63573d6000803e3d6000fd5b50505050601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb557600080fd5b505afa158015611ec9573d6000803e3d6000fd5b505050506040513d6020811015611edf57600080fd5b5051600a55604080513381526020810184905281517fd5ec1b97fc4d048ade361b013c285a0a5c1c40ae32579013ad3798ee657d9de7929181900390910190a150505b60008111611f615760405162461bcd60e51b81526004018080602001828103825260358152602001806130466035913960400191505060405180910390fd5b611f6d42600454612f88565b336000908152600f6020526040902090815560010154611f8d9082612f88565b336000908152600f6020908152604080832060010193909355600e90522054611fb69082612f42565b336000818152600e6020526040808220939093556013548351632770a7eb60e21b815260048101939093526024830185905292516001600160a01b0390931692639dc29fac92604480820193929182900301818387803b15801561201957600080fd5b505af115801561202d573d6000803e3d6000fd5b5050336000818152600f602090815260409182902054825190815290810186905281519294507f1a05ab0ac5685d1105d3b900f1db7c3c17a560a68f6f9e5c7f2a20b0bcac1f1593508290030190a2336000908152600e6020526040902054600954676765c793fa10079d601b1b91610e1e91612eec565b60055481565b600080601560009054906101000a90046001600160a01b03166001600160a01b031663d8872aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120fc57600080fd5b505afa158015612110573d6000803e3d6000fd5b505050506040513d602081101561212657600080fd5b505160155460408051630140b37760e21b815290519293506121f89284926001600160a01b031691630502cddc916004808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b505160165460155460408051633eaf7a0360e21b81526001600160a01b03928316600482015290519490931115938693919092169163fabde80c91602480820192602092909190829003018186803b15801561182e57600080fd5b91505090565b6000600b5460001415612213575060006113f3565b600b54601754604080516322b8e72b60e21b81529051670de0b6b3a7640000926001600160a01b031691638ae39cac916004808301926020929190829003018186803b15801561226257600080fd5b505afa158015612276573d6000803e3d6000fd5b505050506040513d602081101561228c57600080fd5b5051028161229657fe5b04905090565b6000600b546000146113e6576113e16122b3612674565b600b54612fca565b600c5481565b33600090815260016020819052604090912054146123105760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6001600160a01b038116600081815260016020908152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b6015546001600160a01b031681565b600260005414156123b8576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b60026000556123c56117b0565b6124005760405162461bcd60e51b81526004018080602001828103825260378152602001806130ca6037913960400191505060405180910390fd5b6011546007546040805163a9059cbb60e01b81523060048201526024810192909252516001600160a01b039092169163a9059cbb9160448082019260009290919082900301818387803b15801561245657600080fd5b505af115801561246a573d6000803e3d6000fd5b50505050601160009054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bc57600080fd5b505afa1580156124d0573d6000803e3d6000fd5b505050506040513d60208110156124e657600080fd5b50516014546007546040805163095ea7b360e01b81526001600160a01b039384166004820152602481019290925251919092169163095ea7b39160448083019260209291908290030181600087803b15801561254157600080fd5b505af1158015612555573d6000803e3d6000fd5b505050506040513d602081101561256b57600080fd5b5050601454600754600854604080516313fb84ff60e21b815260048101939093526024830191909152516001600160a01b0390921691634fee13fc916044808201926020929091908290030181600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b505050506040513d60208110156125f357600080fd5b506125fe90506127bf565b601454600754600854604080516001600160a01b039094168452602084019290925282820152517fa1ed4344451df8dcf80c17fed5add3de53aeecf6dc6a3b44c08176f7069d820b9181900360600190a16001600055565b60025460ff1681565b60035481565b6011546001600160a01b031681565b601154604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d60208110156126e357600080fd5b5051905090565b600254610100900460ff1681565b60006113f06127056117b0565b15612796601460009054906101000a90046001600160a01b03166001600160a01b031663f5897a526040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600254901590610100900460ff16613041565b612f84565b600b5481565b6013546001600160a01b031681565b6018546001600160a01b031681565b60035443116127cd576128e2565b43600355600b546127dd576128e2565b6127e56128e4565b600061286c601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561283857600080fd5b505afa15801561284c573d6000803e3d6000fd5b505050506040513d602081101561286257600080fd5b5051600a54612f42565b905061287a600a5482612f88565b600a55600954600b5461289d919061158b84676765c793fa10079d601b1b612eec565b6009819055600b5460408051928352602083019190915280517f7fa9647ec1cc14e3822b46d05a2b9d4e019bde8875c0088c46b6503d71bf17229281900390910190a1505b565b601754601254604080516308fd581360e01b81526001600160a01b039283166004820152905191909216916308fd581391602480830192600092919082900301818387803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b50505050565b60026000541415612995576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b60026000908155338152600f6020526040902080546001909101546129bf91421015901515612f84565b6129fa5760405162461bcd60e51b815260040180806020018281038252602b815260200180613282602b913960400191505060405180910390fd5b612a19612a056120ab565b60025490159062010000900460ff16613041565b612a545760405162461bcd60e51b81526004018080602001828103825260328152602001806131016032913960400191505060405180910390fd5b336000908152600f6020526040812060010154612a7090611a85565b600b54336000908152600f6020526040902060010154919250612a9291612f42565b600b556011546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb9160448082019260009290919082900301818387803b158015612ae857600080fd5b505af1158015612afc573d6000803e3d6000fd5b5050336000818152600f60209081526040918290206001015482518781529182015281519294507fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c830565100993508290030190a250336000908152600f6020526040812081815560019081018290559055565b6000611a9882611a936113c2565b6014546001600160a01b031681565b3360009081526001602081905260409091205414612bd75760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b81686578697444656c617960b81b1415612c54577f0000000000000000000000000000000000000000000000000000000000000000811115612c4a5760405162461bcd60e51b81526004018080602001828103825260348152602001806133ec6034913960400191505060405180910390fd5b6004819055612eb2565b817406d696e5374616b6564546f6b656e73546f4b65657605c1b1415612cbd5760008111612cb35760405162461bcd60e51b81526004018080602001828103825260388152602001806133296038913960400191505060405180910390fd5b6005819055612eb2565b816e3a37b5b2b739aa37a0bab1ba34b7b760891b1415612d205760008111612d165760405162461bcd60e51b815260040180806020018281038252603b8152602001806132ad603b913960400191505060405180910390fd5b6007819055612eb2565b81731cde5cdd195b50dbda5b9cd51bd4995c5d595cdd60621b1415612d885760008111612d7e5760405162461bcd60e51b815260040180806020018281038252603e815260200180613489603e913960400191505060405180910390fd5b6008819055612eb2565b81746d6178436f6e63757272656e7441756374696f6e7360581b1415612df15760018111612de75760405162461bcd60e51b81526004018080602001828103825260418152602001806132e86041913960600191505060405180910390fd5b6006819055612eb2565b816b195cd8dc9bddd4185d5cd95960a21b1415612e52576001811115612e485760405162461bcd60e51b815260040180806020018281038252603781526020018061324b6037913960400191505060405180910390fd5b600d819055612eb2565b816f1c195c98d95b9d1859d955995cdd195960821b14156119e15760648110612eac5760405162461bcd60e51b815260040180806020018281038252603b8152602001806131d5603b913960400191505060405180910390fd5b600c8190555b60408051828152905183917fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a919081900360200190a25050565b6000811580612f0757505080820282828281612f0457fe5b04145b611a985760405162461bcd60e51b815260040180806020018281038252602e8152602001806134c7602e913960400191505060405180910390fd5b80820382811115611a985760405162461bcd60e51b815260040180806020018281038252602f81526020018061309b602f913960400191505060405180910390fd5b1690565b80820182811015611a985760405162461bcd60e51b815260040180806020018281038252602e8152602001806131a7602e913960400191505060405180910390fd5b600080821161300a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613393602e913960400191505060405180910390fd5b8161301d84670de0b6b3a7640000612eec565b8161302457fe5b049392505050565b6000670de0b6b3a764000061301d8484612eec565b179056fe4765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d616d6f756e742d746f2d657869745265656e7472616e637947756172643a207265656e7472616e742063616c6c004765624c656e64657246697273745265736f7274526577617264735665737465642f7375622d756e646572666c6f774765624c656e64657246697273745265736f7274526577617264735665737465642f63616e6e6f742d61756374696f6e2d746f6b656e734765624c656e64657246697273745265736f7274526577617264735665737465642f657869742d6e6f742d616c6c6f7765644765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d616e636573746f722d746f2d6a6f696e4765624c656e64657246697273745265736f7274526577617264735665737465642f636f756c642d6e6f742d7472616e736665722d616e636573746f724765624c656e64657246697273745265736f7274526577617264735665737465642f6164642d6f766572666c6f774765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d70657263656e746167652d7665737465644765624c656e64657246697273745265736f7274526577617264735665737465642f6d6f646966792d756e7265636f676e697a65642d706172616d4765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d657363726f772d7061757365644765624c656e64657246697273745265736f7274526577617264735665737465642f776169742d6d6f72654765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d746f6b656e732d746f2d61756374696f6e4765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d6d61782d636f6e63757272656e742d61756374696f6e734765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6d696e2d7374616b65642d746f6b656e734765624c656e64657246697273745265736f7274526577617264735665737465642f6a6f696e2d6e6f742d616c6c6f7765644765624c656e64657246697273745265736f7274526577617264735665737465642f776469762d62792d7a65726f4765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d646174614765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d657869742d64656c61794765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6a6f696e2d70726963654765624c656e64657246697273745265736f7274526577617264735665737465642f6163636f756e742d6e6f742d617574686f72697a65644765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d7379732d636f696e732d746f2d726571756573744765624c656e64657246697273745265736f7274526577617264735665737465642f6d756c2d6f766572666c6f77a264697066735822122083545e16635c618ca065c0e690928550b04ed41bef8ed5829a47ae869153f91964736f6c63430006070033608060405234801561001057600080fd5b5060405161032b38038061032b8339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b031992831617905560018054909116331790556102be8061006d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80638da5cb5b14610051578063a9059cbb14610075578063b69ef8a8146100a3578063fc0c546a146100bd575b600080fd5b6100596100c5565b604080516001600160a01b039092168252519081900360200190f35b6100a16004803603604081101561008b57600080fd5b506001600160a01b0381351690602001356100d4565b005b6100ab6101fc565b60408051918252519081900360200190f35b610059610279565b6001546001600160a01b031681565b6001546001600160a01b03163314610122576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b600080546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169263a9059cbb92604480820193602093909283900390910190829087803b15801561017b57600080fd5b505af115801561018f573d6000803e3d6000fd5b505050506040513d60208110156101a557600080fd5b50516101f8576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e506f6f6c2f6661696c65642d7472616e7366657200000000000000604482015290519081900360640190fd5b5050565b60008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561024857600080fd5b505afa15801561025c573d6000803e3d6000fd5b505050506040513d602081101561027257600080fd5b5051905090565b6000546001600160a01b03168156fea2646970667358221220bde6a006d3fd32aba7bbfc2a86ae454f8041e58d11433384b9f9eff60effe7d564736f6c634300060700334765624c656e64657246697273745265736f7274526577617264735665737465642f616e636573746f722d646563696d616c2d6d69736d617463684765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d7379732d636f696e732d746f2d726571756573744765624c656e64657246697273745265736f7274526577617264735665737465642f64657363656e64616e742d646563696d616c2d6d69736d617463684765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6d61782d64656c61794765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d70657263656e746167652d7665737465644765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d657363726f774765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d61756374696f6e2d686f7573654765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d736166652d656e67696e654765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6163636f756e74696e672d656e67696e654765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d64657363656e64616e744765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6d696e2d7374616b65642d746f6b656e734765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d657869742d64656c61794765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d746f6b656e732d746f2d61756374696f6e4765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d7265776172642d64726970706572000000000000000000000000d6f3768e62ef92a9798e5a8cedd2b78907cecef9000000000000000000000000353efac5cab823a41bc0d6228d7061e92cf9ccb00000000000000000000000006243d8cea23066d098a15582d81a598b4e8391f40000000000000000000000002ba0a37c6603a79400806955e75be1c1219235be000000000000000000000000cee6aa1ab47d0fb0f24f51a3072ec16e20f90fce000000000000000000000000cc88a9d330da1133df3a7bd823b95e52511a696200000000000000000000000003da3d5e0b13b6f0917fa9bc3d65b46229d7ef470000000000000000000000008017f897aaaabd5701b63d819590062a87732ba0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000000000000000001baf800000000000000000000000000000000000000000000000004563918244f400000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000000004b
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061030c5760003560e01c80636a1460241161019d578063aa88e788116100e9578063e2fdcc17116100a2578063e9fad8ee1161007c578063e9fad8ee14610605578063ec2c20d71461060d578063ed9152c81461062a578063fe4f5890146106325761030c565b8063e2fdcc17146105ed578063e3161ddd146105f5578063e43a0bb2146105fd5761030c565b8063aa88e788146105bd578063ba1da585146105c5578063c734b40e146105cd578063d4056655146105d5578063d41ce4b1146105dd578063da56eedb146105e55761030c565b80637e90cbe111610156578063961d45c411610130578063961d45c41461059d578063a19fe9e3146105a5578063a86eaca4146105ad578063a9f8d181146105b55761030c565b80637e90cbe11461056757806394bebfbb1461056f57806394f3f81d146105775761030c565b80636a1460241461050d5780636ff3ae6414610515578063721c65131461053257806373f5acef1461054f57806379d07015146105575780637b0a47ee1461055f5761030c565b806331d7a2621161025c57806359546fc411610215578063628c50a5116101ef578063628c50a5146104ab5780636614f010146104d157806366666aa9146104fd57806367aea313146105055761030c565b806359546fc4146104775780635c4036191461049b5780635e9153e6146104a35761030c565b806331d7a262146103d457806335b28153146103fa5780633b987bfc146104205780634125ff901461042857806351da8acf14610430578063552033c41461046f5761030c565b80631976eb8e116102c957806324ba5884116102a357806324ba58841461039657806328388630146103bc57806328e97ce6146103c45780632f3c9a4f146103cc5761030c565b80631976eb8e1461036a5780631a47d8561461037257806324463f1b1461037a5761030c565b8063049878f3146103115780630572b0cc146103305780630d86009c146103385780630e0c76de146103525780631162e6a41461035a578063131f2e5314610362575b600080fd5b61032e6004803603602081101561032757600080fd5b5035610655565b005b61032e610e42565b610340611312565b60408051918252519081900360200190f35b61032e611318565b6103406113c2565b6103406113f6565b6103406113fc565b610340611402565b610382611408565b604080519115158252519081900360200190f35b610340600480360360208110156103ac57600080fd5b50356001600160a01b0316611417565b610340611429565b61032e61142f565b6103406114cb565b610340600480360360208110156103ea57600080fd5b50356001600160a01b03166114d1565b61032e6004803603602081101561041057600080fd5b50356001600160a01b0316611600565b6103406116a3565b6103406116a9565b6104566004803603602081101561044657600080fd5b50356001600160a01b03166116cd565b6040805192835260208301919091528051918290030190f35b6103406116e6565b61047f6116f5565b604080516001600160a01b039092168252519081900360200190f35b61032e611704565b6103826117b0565b610340600480360360208110156104c157600080fd5b50356001600160a01b0316611860565b61032e600480360360408110156104e757600080fd5b50803590602001356001600160a01b0316611872565b61047f611a5b565b61047f611a6a565b610340611a79565b6103406004803603602081101561052b57600080fd5b5035611a85565b61032e6004803603602081101561054857600080fd5b5035611a9e565b6103406120a5565b6103826120ab565b6103406121fe565b61034061229c565b6103406122bb565b61032e6004803603602081101561058d57600080fd5b50356001600160a01b03166122c1565b61047f612363565b61032e612372565b610382612656565b61034061265f565b61047f612665565b610340612674565b6103826126ea565b6103826126f8565b61034061279b565b61047f6127a1565b61047f6127b0565b61032e6127bf565b61032e6128e4565b61032e61294f565b6103406004803603602081101561062357600080fd5b5035612b6b565b61047f612b79565b61032e6004803603604081101561064857600080fd5b5080359060200135612b88565b6002600054141561069b576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b60026000556106a86127bf565b336000908152600e6020526040902054158015906107345750601254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b15801561070657600080fd5b505afa15801561071a573d6000803e3d6000fd5b505050506040513d602081101561073057600080fd5b5051115b15610af957336000908152600e602052604081205460095461078791676765c793fa10079d601b1b916107679190612eec565b8161076e57fe5b3360009081526010602052604090205491900490612f42565b601854600d549192506000916107a9916001600160a01b031615159015612f84565b156109bb5760646107bc83600c54612eec565b816107c357fe5b60185460408051630a1dfc1360e21b8152336004820152939092046024840181905291519193506001600160a01b031691632877f04c91604480830192600092919082900301818387803b15801561081a57600080fd5b505af192505050801561082b575060015b6108fe573d808015610859576040519150601f19603f3d011682016040523d82523d6000602084013e61085e565b606091505b507f4db2e449a7b24364136173e75f7161233ace27438153323e778c5edbf237e680816040518080602001828103825283818151815260200191508051906020019080838360005b838110156108be5781810151838201526020016108a6565b50505050905090810190601f1680156108eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1506109bb565b6012546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb91604480830192600092919082900301818387803b15801561095657600080fd5b505af115801561096a573d6000803e3d6000fd5b5050601854604080516001600160a01b039092168252336020830152818101859052517f67672cc85e5f7be7dfc7a6f1bdb381e9b9809f4d251edc3e7bc49aef52b5a4919350908190036060019150a15b6012546001600160a01b031663a9059cbb336109d78585612f42565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50505050601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8c57600080fd5b505afa158015610aa0573d6000803e3d6000fd5b505050506040513d6020811015610ab657600080fd5b5051600a55604080513381526020810184905281517fd5ec1b97fc4d048ade361b013c285a0a5c1c40ae32579013ad3798ee657d9de7929181900390910190a150505b600254610b119060ff16610b0b6120ab565b15612f84565b610b4c5760405162461bcd60e51b81526004018080602001828103825260328152602001806133616032913960400191505060405180910390fd5b60008111610b8b5760405162461bcd60e51b81526004018080602001828103825260378152602001806131336037913960400191505060405180910390fd5b6000610b9682612b6b565b905060008111610bd75760405162461bcd60e51b81526004018080602001828103825260318152602001806134206031913960400191505060405180910390fd5b601160009054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2557600080fd5b505afa158015610c39573d6000803e3d6000fd5b505050506040513d6020811015610c4f57600080fd5b5051601154604080516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101869052905191909216916323b872dd9160648083019260209291908290030181600087803b158015610cad57600080fd5b505af1158015610cc1573d6000803e3d6000fd5b505050506040513d6020811015610cd757600080fd5b5051610d145760405162461bcd60e51b815260040180806020018281038252603d81526020018061316a603d913960400191505060405180910390fd5b601354604080516340c10f1960e01b81523360048201526024810184905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b5050336000908152600e6020526040902054610d9a9250905082612f88565b336000908152600e6020526040902055600b54610db79082612f88565b600b556040805182815260208101849052815133927fbca387acb0ba7d06e329c4372885bb664f19a98153ccf3e74e56c136bf0e88c4928290030190a250336000908152600e6020526040902054600954676765c793fa10079d601b1b91610e1e91612eec565b81610e2557fe5b336000908152601060205260408120929091049091556001905550565b60026000541415610e88576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b6002600055610e956127bf565b336000908152600e602052604090205415801590610f215750601254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b158015610ef357600080fd5b505afa158015610f07573d6000803e3d6000fd5b505050506040513d6020811015610f1d57600080fd5b5051115b156112c657336000908152600e6020526040812054600954610f5491676765c793fa10079d601b1b916107679190612eec565b601854600d54919250600091610f76916001600160a01b031615159015612f84565b15611188576064610f8983600c54612eec565b81610f9057fe5b60185460408051630a1dfc1360e21b8152336004820152939092046024840181905291519193506001600160a01b031691632877f04c91604480830192600092919082900301818387803b158015610fe757600080fd5b505af1925050508015610ff8575060015b6110cb573d808015611026576040519150601f19603f3d011682016040523d82523d6000602084013e61102b565b606091505b507f4db2e449a7b24364136173e75f7161233ace27438153323e778c5edbf237e680816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561108b578181015183820152602001611073565b50505050905090810190601f1680156110b85780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611188565b6012546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb91604480830192600092919082900301818387803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b5050601854604080516001600160a01b039092168252336020830152818101859052517f67672cc85e5f7be7dfc7a6f1bdb381e9b9809f4d251edc3e7bc49aef52b5a4919350908190036060019150a15b6012546001600160a01b031663a9059cbb336111a48585612f42565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156111f357600080fd5b505af1158015611207573d6000803e3d6000fd5b50505050601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561125957600080fd5b505afa15801561126d573d6000803e3d6000fd5b505050506040513d602081101561128357600080fd5b5051600a55604080513381526020810184905281517fd5ec1b97fc4d048ade361b013c285a0a5c1c40ae32579013ad3798ee657d9de7929181900390910190a150505b336000908152600e6020526040902054600954676765c793fa10079d601b1b916112ef91612eec565b816112f657fe5b3360009081526010602052604081209290910490915560019055565b600d5481565b33600090815260016020819052604090912054146113675760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6002805460ff610100808304821615810261ff001990931692909217928390556040805192909304161515815290517f9fdd4155cb7fc6f6912385f4f0c9bc86bb1282c9dd3d6d86b618a2291f6fc7719181900360200190a1565b6000600b546000146113e6576113e1600b546113dc612674565b612fca565b6113f0565b670de0b6b3a76400005b90505b90565b600a5481565b60065481565b60075481565b60025462010000900460ff1681565b60016020526000908152604090205481565b60045481565b336000908152600160208190526040909120541461147e5760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6002805460ff19811660ff918216151791829055604080519290911615158252517f7dc6d5f7de2146a02aa91321e6f05614c85f0316cb5c0a12e0897f2fd30666829181900360200190a1565b60095481565b60095460035460009190431180156114ea5750600b5415155b1561159c57601754604080516322b8e72b60e21b815290516000926001600160a01b031691638ae39cac916004808301926020929190829003018186803b15801561153457600080fd5b505afa158015611548573d6000803e3d6000fd5b505050506040513d602081101561155e57600080fd5b5051600354600b544391909103909102915061159890839061158b84676765c793fa10079d601b1b612eec565b8161159257fe5b04612f88565b9150505b6001600160a01b0383166000908152600e60205260409020546115f990676765c793fa10079d601b1b906115d09084612eec565b816115d757fe5b6001600160a01b03861660009081526010602052604090205491900490612f42565b9392505050565b336000908152600160208190526040909120541461164f5760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6001600160a01b03811660008181526001602081815260409283902091909155815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b60085481565b7f000000000000000000000000000000000000000000000000000000000024ea0081565b600f602052600090815260409020805460019091015482565b676765c793fa10079d601b1b81565b6017546001600160a01b031681565b33600090815260016020819052604090912054146117535760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6002805460ff62010000808304821615810262ff00001990931692909217928390556040805192909304161515815290517f2556a991abd9f74d727d88623dc8f637c4d913be5c71c19c4bb1c09f68a4fdc09181900360200190a1565b60006113f06117dd6117c06120ab565b6117c8612674565b6117d6600554600754612f88565b1115612f84565b600654601460009054906101000a90046001600160a01b03166001600160a01b031663f5897a526040518163ffffffff1660e01b815260040160206040518083038186803b15801561182e57600080fd5b505afa158015611842573d6000803e3d6000fd5b505050506040513d602081101561185857600080fd5b505110612f84565b600e6020526000908152604090205481565b33600090815260016020819052604090912054146118c15760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6001600160a01b0381166119065760405162461bcd60e51b815260040180806020018281038252602b8152602001806133c1602b913960400191505060405180910390fd5b816b61756374696f6e486f75736560a01b141561193d57601480546001600160a01b0319166001600160a01b038316179055611a18565b816f6163636f756e74696e67456e67696e6560801b141561197857601580546001600160a01b0319166001600160a01b038316179055611a18565b816c3932bbb0b932223934b83832b960991b14156119b057601780546001600160a01b0319166001600160a01b038316179055611a18565b8165657363726f7760d01b14156119e157601880546001600160a01b0319166001600160a01b038316179055611a18565b60405162461bcd60e51b815260040180806020018281038252603b815260200180613210603b913960400191505060405180910390fd5b604080516001600160a01b0383168152905183917fd91f38cf03346b5dc15fb60f9076f866295231ad3c3841a1051f8443f25170d1919081900360200190a25050565b6012546001600160a01b031681565b6016546001600160a01b031681565b670de0b6b3a764000081565b6000611a9882611a9361229c565b61302c565b92915050565b60026000541415611ae4576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b6002600055611af16127bf565b336000908152600e602052604090205415801590611b7d5750601254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b158015611b4f57600080fd5b505afa158015611b63573d6000803e3d6000fd5b505050506040513d6020811015611b7957600080fd5b5051115b15611f2257336000908152600e6020526040812054600954611bb091676765c793fa10079d601b1b916107679190612eec565b601854600d54919250600091611bd2916001600160a01b031615159015612f84565b15611de4576064611be583600c54612eec565b81611bec57fe5b60185460408051630a1dfc1360e21b8152336004820152939092046024840181905291519193506001600160a01b031691632877f04c91604480830192600092919082900301818387803b158015611c4357600080fd5b505af1925050508015611c54575060015b611d27573d808015611c82576040519150601f19603f3d011682016040523d82523d6000602084013e611c87565b606091505b507f4db2e449a7b24364136173e75f7161233ace27438153323e778c5edbf237e680816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ce7578181015183820152602001611ccf565b50505050905090810190601f168015611d145780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611de4565b6012546018546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb91604480830192600092919082900301818387803b158015611d7f57600080fd5b505af1158015611d93573d6000803e3d6000fd5b5050601854604080516001600160a01b039092168252336020830152818101859052517f67672cc85e5f7be7dfc7a6f1bdb381e9b9809f4d251edc3e7bc49aef52b5a4919350908190036060019150a15b6012546001600160a01b031663a9059cbb33611e008585612f42565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611e4f57600080fd5b505af1158015611e63573d6000803e3d6000fd5b50505050601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb557600080fd5b505afa158015611ec9573d6000803e3d6000fd5b505050506040513d6020811015611edf57600080fd5b5051600a55604080513381526020810184905281517fd5ec1b97fc4d048ade361b013c285a0a5c1c40ae32579013ad3798ee657d9de7929181900390910190a150505b60008111611f615760405162461bcd60e51b81526004018080602001828103825260358152602001806130466035913960400191505060405180910390fd5b611f6d42600454612f88565b336000908152600f6020526040902090815560010154611f8d9082612f88565b336000908152600f6020908152604080832060010193909355600e90522054611fb69082612f42565b336000818152600e6020526040808220939093556013548351632770a7eb60e21b815260048101939093526024830185905292516001600160a01b0390931692639dc29fac92604480820193929182900301818387803b15801561201957600080fd5b505af115801561202d573d6000803e3d6000fd5b5050336000818152600f602090815260409182902054825190815290810186905281519294507f1a05ab0ac5685d1105d3b900f1db7c3c17a560a68f6f9e5c7f2a20b0bcac1f1593508290030190a2336000908152600e6020526040902054600954676765c793fa10079d601b1b91610e1e91612eec565b60055481565b600080601560009054906101000a90046001600160a01b03166001600160a01b031663d8872aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120fc57600080fd5b505afa158015612110573d6000803e3d6000fd5b505050506040513d602081101561212657600080fd5b505160155460408051630140b37760e21b815290519293506121f89284926001600160a01b031691630502cddc916004808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b505160165460155460408051633eaf7a0360e21b81526001600160a01b03928316600482015290519490931115938693919092169163fabde80c91602480820192602092909190829003018186803b15801561182e57600080fd5b91505090565b6000600b5460001415612213575060006113f3565b600b54601754604080516322b8e72b60e21b81529051670de0b6b3a7640000926001600160a01b031691638ae39cac916004808301926020929190829003018186803b15801561226257600080fd5b505afa158015612276573d6000803e3d6000fd5b505050506040513d602081101561228c57600080fd5b5051028161229657fe5b04905090565b6000600b546000146113e6576113e16122b3612674565b600b54612fca565b600c5481565b33600090815260016020819052604090912054146123105760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b6001600160a01b038116600081815260016020908152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b6015546001600160a01b031681565b600260005414156123b8576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b60026000556123c56117b0565b6124005760405162461bcd60e51b81526004018080602001828103825260378152602001806130ca6037913960400191505060405180910390fd5b6011546007546040805163a9059cbb60e01b81523060048201526024810192909252516001600160a01b039092169163a9059cbb9160448082019260009290919082900301818387803b15801561245657600080fd5b505af115801561246a573d6000803e3d6000fd5b50505050601160009054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bc57600080fd5b505afa1580156124d0573d6000803e3d6000fd5b505050506040513d60208110156124e657600080fd5b50516014546007546040805163095ea7b360e01b81526001600160a01b039384166004820152602481019290925251919092169163095ea7b39160448083019260209291908290030181600087803b15801561254157600080fd5b505af1158015612555573d6000803e3d6000fd5b505050506040513d602081101561256b57600080fd5b5050601454600754600854604080516313fb84ff60e21b815260048101939093526024830191909152516001600160a01b0390921691634fee13fc916044808201926020929091908290030181600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b505050506040513d60208110156125f357600080fd5b506125fe90506127bf565b601454600754600854604080516001600160a01b039094168452602084019290925282820152517fa1ed4344451df8dcf80c17fed5add3de53aeecf6dc6a3b44c08176f7069d820b9181900360600190a16001600055565b60025460ff1681565b60035481565b6011546001600160a01b031681565b601154604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d60208110156126e357600080fd5b5051905090565b600254610100900460ff1681565b60006113f06127056117b0565b15612796601460009054906101000a90046001600160a01b03166001600160a01b031663f5897a526040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600254901590610100900460ff16613041565b612f84565b600b5481565b6013546001600160a01b031681565b6018546001600160a01b031681565b60035443116127cd576128e2565b43600355600b546127dd576128e2565b6127e56128e4565b600061286c601260009054906101000a90046001600160a01b03166001600160a01b031663b69ef8a86040518163ffffffff1660e01b815260040160206040518083038186803b15801561283857600080fd5b505afa15801561284c573d6000803e3d6000fd5b505050506040513d602081101561286257600080fd5b5051600a54612f42565b905061287a600a5482612f88565b600a55600954600b5461289d919061158b84676765c793fa10079d601b1b612eec565b6009819055600b5460408051928352602083019190915280517f7fa9647ec1cc14e3822b46d05a2b9d4e019bde8875c0088c46b6503d71bf17229281900390910190a1505b565b601754601254604080516308fd581360e01b81526001600160a01b039283166004820152905191909216916308fd581391602480830192600092919082900301818387803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b50505050565b60026000541415612995576040805162461bcd60e51b815260206004820152601f602482015260008051602061307b833981519152604482015290519081900360640190fd5b60026000908155338152600f6020526040902080546001909101546129bf91421015901515612f84565b6129fa5760405162461bcd60e51b815260040180806020018281038252602b815260200180613282602b913960400191505060405180910390fd5b612a19612a056120ab565b60025490159062010000900460ff16613041565b612a545760405162461bcd60e51b81526004018080602001828103825260328152602001806131016032913960400191505060405180910390fd5b336000908152600f6020526040812060010154612a7090611a85565b600b54336000908152600f6020526040902060010154919250612a9291612f42565b600b556011546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb9160448082019260009290919082900301818387803b158015612ae857600080fd5b505af1158015612afc573d6000803e3d6000fd5b5050336000818152600f60209081526040918290206001015482518781529182015281519294507fbe0b6e5b3195df91f2e6b2b20501f84b085714f9e38073f499073c830565100993508290030190a250336000908152600f6020526040812081815560019081018290559055565b6000611a9882611a936113c2565b6014546001600160a01b031681565b3360009081526001602081905260409091205414612bd75760405162461bcd60e51b81526004018080602001828103825260388152602001806134516038913960400191505060405180910390fd5b81686578697444656c617960b81b1415612c54577f000000000000000000000000000000000000000000000000000000000024ea00811115612c4a5760405162461bcd60e51b81526004018080602001828103825260348152602001806133ec6034913960400191505060405180910390fd5b6004819055612eb2565b817406d696e5374616b6564546f6b656e73546f4b65657605c1b1415612cbd5760008111612cb35760405162461bcd60e51b81526004018080602001828103825260388152602001806133296038913960400191505060405180910390fd5b6005819055612eb2565b816e3a37b5b2b739aa37a0bab1ba34b7b760891b1415612d205760008111612d165760405162461bcd60e51b815260040180806020018281038252603b8152602001806132ad603b913960400191505060405180910390fd5b6007819055612eb2565b81731cde5cdd195b50dbda5b9cd51bd4995c5d595cdd60621b1415612d885760008111612d7e5760405162461bcd60e51b815260040180806020018281038252603e815260200180613489603e913960400191505060405180910390fd5b6008819055612eb2565b81746d6178436f6e63757272656e7441756374696f6e7360581b1415612df15760018111612de75760405162461bcd60e51b81526004018080602001828103825260418152602001806132e86041913960600191505060405180910390fd5b6006819055612eb2565b816b195cd8dc9bddd4185d5cd95960a21b1415612e52576001811115612e485760405162461bcd60e51b815260040180806020018281038252603781526020018061324b6037913960400191505060405180910390fd5b600d819055612eb2565b816f1c195c98d95b9d1859d955995cdd195960821b14156119e15760648110612eac5760405162461bcd60e51b815260040180806020018281038252603b8152602001806131d5603b913960400191505060405180910390fd5b600c8190555b60408051828152905183917fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a919081900360200190a25050565b6000811580612f0757505080820282828281612f0457fe5b04145b611a985760405162461bcd60e51b815260040180806020018281038252602e8152602001806134c7602e913960400191505060405180910390fd5b80820382811115611a985760405162461bcd60e51b815260040180806020018281038252602f81526020018061309b602f913960400191505060405180910390fd5b1690565b80820182811015611a985760405162461bcd60e51b815260040180806020018281038252602e8152602001806131a7602e913960400191505060405180910390fd5b600080821161300a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613393602e913960400191505060405180910390fd5b8161301d84670de0b6b3a7640000612eec565b8161302457fe5b049392505050565b6000670de0b6b3a764000061301d8484612eec565b179056fe4765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d616d6f756e742d746f2d657869745265656e7472616e637947756172643a207265656e7472616e742063616c6c004765624c656e64657246697273745265736f7274526577617264735665737465642f7375622d756e646572666c6f774765624c656e64657246697273745265736f7274526577617264735665737465642f63616e6e6f742d61756374696f6e2d746f6b656e734765624c656e64657246697273745265736f7274526577617264735665737465642f657869742d6e6f742d616c6c6f7765644765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d616e636573746f722d746f2d6a6f696e4765624c656e64657246697273745265736f7274526577617264735665737465642f636f756c642d6e6f742d7472616e736665722d616e636573746f724765624c656e64657246697273745265736f7274526577617264735665737465642f6164642d6f766572666c6f774765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d70657263656e746167652d7665737465644765624c656e64657246697273745265736f7274526577617264735665737465642f6d6f646966792d756e7265636f676e697a65642d706172616d4765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d657363726f772d7061757365644765624c656e64657246697273745265736f7274526577617264735665737465642f776169742d6d6f72654765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d746f6b656e732d746f2d61756374696f6e4765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d6d61782d636f6e63757272656e742d61756374696f6e734765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6d696e2d7374616b65642d746f6b656e734765624c656e64657246697273745265736f7274526577617264735665737465642f6a6f696e2d6e6f742d616c6c6f7765644765624c656e64657246697273745265736f7274526577617264735665737465642f776469762d62792d7a65726f4765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d646174614765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d657869742d64656c61794765624c656e64657246697273745265736f7274526577617264735665737465642f6e756c6c2d6a6f696e2d70726963654765624c656e64657246697273745265736f7274526577617264735665737465642f6163636f756e742d6e6f742d617574686f72697a65644765624c656e64657246697273745265736f7274526577617264735665737465642f696e76616c69642d7379732d636f696e732d746f2d726571756573744765624c656e64657246697273745265736f7274526577617264735665737465642f6d756c2d6f766572666c6f77a264697066735822122083545e16635c618ca065c0e690928550b04ed41bef8ed5829a47ae869153f91964736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d6f3768e62ef92a9798e5a8cedd2b78907cecef9000000000000000000000000353efac5cab823a41bc0d6228d7061e92cf9ccb00000000000000000000000006243d8cea23066d098a15582d81a598b4e8391f40000000000000000000000002ba0a37c6603a79400806955e75be1c1219235be000000000000000000000000cee6aa1ab47d0fb0f24f51a3072ec16e20f90fce000000000000000000000000cc88a9d330da1133df3a7bd823b95e52511a696200000000000000000000000003da3d5e0b13b6f0917fa9bc3d65b46229d7ef470000000000000000000000008017f897aaaabd5701b63d819590062a87732ba0000000000000000000000000000000000000000000000000000000000024ea0000000000000000000000000000000000000000000000000000000000001baf800000000000000000000000000000000000000000000000004563918244f400000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000000004b
-----Decoded View---------------
Arg [0] : ancestor_ (address): 0xd6F3768E62Ef92a9798E5A8cEdD2b78907cEceF9
Arg [1] : descendant_ (address): 0x353EFAC5CaB823A41BC0d6228d7061e92Cf9Ccb0
Arg [2] : rewardToken_ (address): 0x6243d8CEA23066d098a15582d81a598b4e8391F4
Arg [3] : auctionHouse_ (address): 0x2BA0A37C6603a79400806955e75be1c1219235BE
Arg [4] : accountingEngine_ (address): 0xcEe6Aa1aB47d0Fb0f24f51A3072EC16E20F90fcE
Arg [5] : safeEngine_ (address): 0xCC88a9d330da1133Df3A7bD823B95e52511A6962
Arg [6] : rewardDripper_ (address): 0x03da3D5E0b13b6f0917FA9BC3d65B46229d7Ef47
Arg [7] : escrow_ (address): 0x8017F897AAaAbD5701b63D819590062A87732Ba0
Arg [8] : maxDelay_ (uint256): 2419200
Arg [9] : exitDelay_ (uint256): 1814400
Arg [10] : minStakedTokensToKeep_ (uint256): 5000000000000000000
Arg [11] : tokensToAuction_ (uint256): 100000000000000000000
Arg [12] : systemCoinsToRequest_ (uint256): 16000000000000000000000
Arg [13] : percentageVested_ (uint256): 75
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000d6f3768e62ef92a9798e5a8cedd2b78907cecef9
Arg [1] : 000000000000000000000000353efac5cab823a41bc0d6228d7061e92cf9ccb0
Arg [2] : 0000000000000000000000006243d8cea23066d098a15582d81a598b4e8391f4
Arg [3] : 0000000000000000000000002ba0a37c6603a79400806955e75be1c1219235be
Arg [4] : 000000000000000000000000cee6aa1ab47d0fb0f24f51a3072ec16e20f90fce
Arg [5] : 000000000000000000000000cc88a9d330da1133df3a7bd823b95e52511a6962
Arg [6] : 00000000000000000000000003da3d5e0b13b6f0917fa9bc3d65b46229d7ef47
Arg [7] : 0000000000000000000000008017f897aaaabd5701b63d819590062a87732ba0
Arg [8] : 000000000000000000000000000000000000000000000000000000000024ea00
Arg [9] : 00000000000000000000000000000000000000000000000000000000001baf80
Arg [10] : 0000000000000000000000000000000000000000000000004563918244f40000
Arg [11] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [12] : 0000000000000000000000000000000000000000000003635c9adc5dea000000
Arg [13] : 000000000000000000000000000000000000000000000000000000000000004b
Deployed Bytecode Sourcemap
5648:21280:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5648:21280:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;24730:788:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24730:788:0;;:::i;:::-;;23162:57;;;:::i;8219:29::-;;;:::i;:::-;;;;;;;;;;;;;;;;15099:157;;;:::i;18780:::-;;;:::i;7949:31::-;;;:::i;7485:38::-;;;:::i;7585:32::-;;;:::i;7092:27::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;5738:51;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5738:51:0;-1:-1:-1;;;;;5738:51:0;;:::i;7255:26::-;;;:::i;14863:116::-;;;:::i;7836:34::-;;;:::i;20987:534::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20987:534:0;-1:-1:-1;;;;;20987:534:0;;:::i;5899:164::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5899:164:0;-1:-1:-1;;;;;5899:164:0;;:::i;7706:37::-;;;:::i;9409:34::-;;;:::i;8383:51::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8383:51:0;-1:-1:-1;;;;;8383:51:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13875:38;;;:::i;9232:45::-;;;:::i;:::-;;;;-1:-1:-1;;;;;9232:45:0;;;;;;;;;;;;;;15370:137;;;:::i;20309:285::-;;;:::i;8301:57::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8301:57:0;-1:-1:-1;;;;;8301:57:0;;:::i;17431:756::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17431:756:0;;;;;;-1:-1:-1;;;;;17431:756:0;;:::i;8810:42::-;;;:::i;9147:::-;;;:::i;13830:38::-;;;:::i;19560:127::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19560:127:0;;:::i;25659:555::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25659:555:0;;:::i;7380:38::-;;;:::i;19776:352::-;;;:::i;21624:173::-;;;:::i;18516:157::-;;;:::i;8135:33::-;;;:::i;6182:170::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6182:170:0;-1:-1:-1;;;;;6182:170:0;;:::i;9059:48::-;;;:::i;24110:504::-;;;:::i;6870:24::-;;;:::i;7170:32::-;;;:::i;8721:44::-;;;:::i;18302:107::-;;;:::i;6998:31::-;;;:::i;20689:216::-;;;:::i;8041:29::-;;;:::i;8884:42::-;;;:::i;9311:38::-;;;:::i;23435:559::-;;;:::i;23286:92::-;;;:::i;26272:653::-;;;:::i;19185:127::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19185:127:0;;:::i;8973:44::-;;;:::i;15679:1580::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15679:1580:0;;;;;;;:::i;24730:788::-;2450:1;3056:7;;:19;;3048:63;;;;;-1:-1:-1;;;3048:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:63:0;;;;;;;;;;;;;;;2450:1;3189:7;:18;21996:12:::1;:10;:12::i;:::-;22045:10;22059:1;22025:31:::0;;;:19:::1;:31;::::0;;;;;:35;;;;:63:::1;;-1:-1:-1::0;22064:10:0::1;::::0;:20:::1;::::0;;-1:-1:-1;;;22064:20:0;;;;22087:1:::1;::::0;-1:-1:-1;;;;;22064:10:0::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:20;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22064:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22064:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22064:20:0;:24:::1;22025:63;22021:940;;;22193:10;22137:15;22173:31:::0;;;:19:::1;:31;::::0;;;;;22206:17:::1;::::0;22155:100:::1;::::0;-1:-1:-1;;;13905:8:0;22164:60:::1;::::0;22173:31;22164:8:::1;:60::i;:::-;:66;;;;;22243:10;22232:22;::::0;;;:10:::1;:22;::::0;;;;;22164:66;;::::1;::::0;22155:8:::1;:100::i;:::-;22318:6;::::0;22341:12:::1;::::0;22137:118;;-1:-1:-1;22272:14:0::1;::::0;22305:54:::1;::::0;-1:-1:-1;;;;;22318:6:0::1;22310:29:::0;::::1;::::0;22341:17;22305:4:::1;:54::i;:::-;22301:468;;;22425:3;22387:35;22396:7;22405:16;;22387:8;:35::i;:::-;:41;;;;;22451:6;::::0;:40:::1;::::0;;-1:-1:-1;;;22451:40:0;;22472:10:::1;22451:40;::::0;::::1;::::0;22387:41;;;::::1;22451:40:::0;;;;;;;;22387:41;;-1:-1:-1;;;;;;22451:6:0::1;::::0;:20:::1;::::0;:40;;;;;:6:::1;::::0;:40;;;;;;;:6;;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22451:40:0;;;;;;;;;;;;;;22447:307;;;::::0;14:27:-1;;::::1;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;22705:31:0;22723:12;22705:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;22705:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:106;22447:307;;;22511:10;::::0;22539:6:::1;::::0;22511:44:::1;::::0;;-1:-1:-1;;;22511:44:0;;-1:-1:-1;;;;;22539:6:0;;::::1;22511:44;::::0;::::1;::::0;;;;;;;;;:10;;;::::1;::::0;:19:::1;::::0;:44;;;;;:10:::1;::::0;:44;;;;;;;:10;;:44;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22511:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;22601:6:0::1;::::0;22579:50:::1;::::0;;-1:-1:-1;;;;;22601:6:0;;::::1;22579:50:::0;;22610:10:::1;22579:50;::::0;::::1;::::0;;;;;;;;::::1;::::0;-1:-1:-1;22579:50:0;;;;;;;-1:-1:-1;22579:50:0::1;22447:307;22785:10;::::0;-1:-1:-1;;;;;22785:10:0::1;:19;22805:10;22817:25;22826:7:::0;22835:6;22817:8:::1;:25::i;:::-;22785:58;;;;;;;;;;;;;-1:-1:-1::0;;;;;22785:58:0::1;-1:-1:-1::0;;;;;22785:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22785:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22785:58:0;;;;22875:10;;;;;;;;;-1:-1:-1::0;;;;;22875:10:0::1;-1:-1:-1::0;;;;;22875:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22875:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22875:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22875:20:0;22858:14:::1;:37:::0;22917:32:::1;::::0;;22929:10:::1;22917:32:::0;;22875:20:::1;22917:32:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22021:940;;;24814:7:::2;::::0;24809:36:::2;::::0;24814:7:::2;;24824:20;:18;:20::i;:::-;24823:21;24809:4;:36::i;:::-;24801:99;;;;-1:-1:-1::0;;;24801:99:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24925:1;24919:3;:7;24911:75;;;;-1:-1:-1::0;;;24911:75:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24997:13;25013:14;25023:3;25013:9;:14::i;:::-;24997:30;;25054:1;25046:5;:9;25038:71;;;;-1:-1:-1::0;;;25038:71:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25130:12;;;;;;;;;-1:-1:-1::0;;;;;25130:12:0::2;-1:-1:-1::0;;;;;25130:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;25130:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;25130:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;25130:20:0;25184:12:::2;::::0;25130:73:::2;::::0;;-1:-1:-1;;;25130:73:0;;25164:10:::2;25130:73;::::0;::::2;::::0;-1:-1:-1;;;;;25184:12:0;;::::2;25130:73:::0;;;;;;;;;;;;:33;;;::::2;::::0;::::2;::::0;:73;;;;;:20:::2;::::0;:73;;;;;;;25184:12:::2;25130:33:::0;:73;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;25130:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;25130:73:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;25130:73:0;25122:147:::2;;;;-1:-1:-1::0;;;25122:147:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25280:10;::::0;:34:::2;::::0;;-1:-1:-1;;;25280:34:0;;25296:10:::2;25280:34;::::0;::::2;::::0;;;;;;;;;-1:-1:-1;;;;;25280:10:0;;::::2;::::0;:15:::2;::::0;:34;;;;;:10:::2;::::0;:34;;;;;;;;:10;;:34;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;25280:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;-1:-1:::0;;25390:10:0::2;25370:31;::::0;;;:19:::2;:31;::::0;;;;;25361:48:::2;::::0;-1:-1:-1;25370:31:0;-1:-1:-1;25403:5:0;25361:8:::2;:48::i;:::-;25347:10;25327:31;::::0;;;:19:::2;:31;::::0;;;;:82;25444:12:::2;::::0;25435:29:::2;::::0;25458:5;25435:8:::2;:29::i;:::-;25420:12;:44:::0;25482:28:::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;25487:10:::2;::::0;25482:28:::2;::::0;;;;;;::::2;-1:-1:-1::0;23039:10:0::1;23019:31;::::0;;;:19:::1;:31;::::0;;;;;23052:17:::1;::::0;-1:-1:-1;;;13905:8:0;23010:60:::1;::::0;:8:::1;:60::i;:::-;:66;;;;;22996:10;22985:22;::::0;;;:10:::1;:22;::::0;;;;23010:66;;;::::1;22985:91:::0;;;2406:1;3368:22;;-1:-1:-1;24730:788:0:o;23162:57::-;2450:1;3056:7;;:19;;3048:63;;;;;-1:-1:-1;;;3048:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:63:0;;;;;;;;;;;;;;;2450:1;3189:7;:18;21996:12:::1;:10;:12::i;:::-;22045:10;22059:1;22025:31:::0;;;:19:::1;:31;::::0;;;;;:35;;;;:63:::1;;-1:-1:-1::0;22064:10:0::1;::::0;:20:::1;::::0;;-1:-1:-1;;;22064:20:0;;;;22087:1:::1;::::0;-1:-1:-1;;;;;22064:10:0::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:20;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22064:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22064:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22064:20:0;:24:::1;22025:63;22021:940;;;22193:10;22137:15;22173:31:::0;;;:19:::1;:31;::::0;;;;;22206:17:::1;::::0;22155:100:::1;::::0;-1:-1:-1;;;13905:8:0;22164:60:::1;::::0;22173:31;22164:8:::1;:60::i;22155:100::-;22318:6;::::0;22341:12:::1;::::0;22137:118;;-1:-1:-1;22272:14:0::1;::::0;22305:54:::1;::::0;-1:-1:-1;;;;;22318:6:0::1;22310:29:::0;::::1;::::0;22341:17;22305:4:::1;:54::i;:::-;22301:468;;;22425:3;22387:35;22396:7;22405:16;;22387:8;:35::i;:::-;:41;;;;;22451:6;::::0;:40:::1;::::0;;-1:-1:-1;;;22451:40:0;;22472:10:::1;22451:40;::::0;::::1;::::0;22387:41;;;::::1;22451:40:::0;;;;;;;;22387:41;;-1:-1:-1;;;;;;22451:6:0::1;::::0;:20:::1;::::0;:40;;;;;:6:::1;::::0;:40;;;;;;;:6;;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22451:40:0;;;;;;;;;;;;;;22447:307;;;::::0;14:27:-1;;::::1;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;22705:31:0;22723:12;22705:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;22705:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:106;22447:307;;;22511:10;::::0;22539:6:::1;::::0;22511:44:::1;::::0;;-1:-1:-1;;;22511:44:0;;-1:-1:-1;;;;;22539:6:0;;::::1;22511:44;::::0;::::1;::::0;;;;;;;;;:10;;;::::1;::::0;:19:::1;::::0;:44;;;;;:10:::1;::::0;:44;;;;;;;:10;;:44;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22511:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;22601:6:0::1;::::0;22579:50:::1;::::0;;-1:-1:-1;;;;;22601:6:0;;::::1;22579:50:::0;;22610:10:::1;22579:50;::::0;::::1;::::0;;;;;;;;::::1;::::0;-1:-1:-1;22579:50:0;;;;;;;-1:-1:-1;22579:50:0::1;22447:307;22785:10;::::0;-1:-1:-1;;;;;22785:10:0::1;:19;22805:10;22817:25;22826:7:::0;22835:6;22817:8:::1;:25::i;:::-;22785:58;;;;;;;;;;;;;-1:-1:-1::0;;;;;22785:58:0::1;-1:-1:-1::0;;;;;22785:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22785:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22785:58:0;;;;22875:10;;;;;;;;;-1:-1:-1::0;;;;;22875:10:0::1;-1:-1:-1::0;;;;;22875:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22875:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22875:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22875:20:0;22858:14:::1;:37:::0;22917:32:::1;::::0;;22929:10:::1;22917:32:::0;;22875:20:::1;22917:32:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22021:940;;;23039:10;23019:31;::::0;;;:19:::1;:31;::::0;;;;;23052:17:::1;::::0;-1:-1:-1;;;13905:8:0;23010:60:::1;::::0;:8:::1;:60::i;:::-;:66;;;;;22996:10;22985:22;::::0;;;:10:::1;:22;::::0;;;;23010:66;;;::::1;22985:91:::0;;;2406:1;3368:22;;23162:57::o;8219:29::-;;;;:::o;15099:157::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15182:14:::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;15181:15;15164:32:::0;::::1;-1:-1:-1::0;;15164:32:0;;::::1;::::0;;;::::1;::::0;;;;15212:36:::1;::::0;;15233:14;;;::::1;;15212:36;;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;15099:157::o:0;18780:::-;18834:7;18861:12;;18877:1;18861:17;:68;;18887:42;18895:12;;18909:19;:17;:19::i;:::-;18887:7;:42::i;:::-;18861:68;;;13860:8;18861:68;18854:75;;18780:157;;:::o;7949:31::-;;;;:::o;7485:38::-;;;;:::o;7585:32::-;;;;:::o;7092:27::-;;;;;;;;;:::o;5738:51::-;;;;;;;;;;;;;:::o;7255:26::-;;;;:::o;14863:116::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14929:7:::1;::::0;;-1:-1:-1;;14918:18:0;::::1;14929:7;::::0;;::::1;14928:8;14918:18;::::0;;;;14952:19:::1;::::0;;14963:7;;;::::1;14952:19;;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;14863:116::o:0;7836:34::-;;;;:::o;20987:534::-;21092:17;;21139:15;;21046:7;;21092:17;21124:12;:30;:51;;;;-1:-1:-1;21158:12:0;;:17;;21124:51;21120:287;;;21252:13;;:30;;;-1:-1:-1;;;21252:30:0;;;;21192:22;;-1:-1:-1;;;;;21252:13:0;;:28;;:30;;;;;;;;;;;;;;:13;:30;;;2:2:-1;;;;27:1;24;17:12;2:2;21252:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21252:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21252:30:0;21233:15;;21382:12;;21218;:30;;;;21217:65;;;;-1:-1:-1;21318:77:0;;21327:18;;21347:32;21217:65;-1:-1:-1;;;21347:8:0;:32::i;:::-;:47;;;;;;21318:8;:77::i;:::-;21297:98;;21120:287;;-1:-1:-1;;;;;21442:25:0;;;;;;:19;:25;;;;;;21424:89;;-1:-1:-1;;;13905:8:0;21433:55;;21469:18;21433:8;:55::i;:::-;:61;;;;;-1:-1:-1;;;;;21496:16:0;;;;;;:10;:16;;;;;;21433:61;;;;21424:8;:89::i;:::-;21417:96;20987:534;-1:-1:-1;;;20987:534:0:o;5899:164::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5983:27:0;::::1;;::::0;;;6013:1:::1;5983:27;::::0;;;;;;;;:31;;;;6030:25;;;;;;;::::1;::::0;;;;;;;;::::1;5899:164:::0;:::o;7706:37::-;;;;:::o;9409:34::-;;;:::o;8383:51::-;;;;;;;;;;;;;;;;;;;:::o;13875:38::-;-1:-1:-1;;;13875:38:0;:::o;9232:45::-;;;-1:-1:-1;;;;;9232:45:0;;:::o;15370:137::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15445:10:::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;15444:11;15431:24:::0;::::1;-1:-1:-1::0;;15431:24:0;;::::1;::::0;;;::::1;::::0;;;;15471:28:::1;::::0;;15488:10;;;::::1;;15471:28;;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;15370:137::o:0;20309:285::-;20358:4;20382:204;20399:99;20404:20;:18;:20::i;:::-;20478:19;:17;:19::i;:::-;20426:48;20435:21;;20458:15;;20426:8;:48::i;:::-;:71;;20399:4;:99::i;:::-;20554:21;;20511:12;;;;;;;;;-1:-1:-1;;;;;20511:12:0;-1:-1:-1;;;;;20511:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20511:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20511:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20511:40:0;:64;20382:4;:204::i;8301:57::-;;;;;;;;;;;;;:::o;17431:756::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17531:18:0;::::1;17523:74;;;;-1:-1:-1::0;;;17523:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17614:9;-1:-1:-1::0;;;17614:27:0::1;17610:520;;;17656:12;:37:::0;;-1:-1:-1;;;;;;17656:37:0::1;-1:-1:-1::0;;;;;17656:37:0;::::1;;::::0;;17610:520:::1;;;17724:9;-1:-1:-1::0;;;17724:31:0::1;17720:410;;;17770:16;:45:::0;;-1:-1:-1;;;;;;17770:45:0::1;-1:-1:-1::0;;;;;17770:45:0;::::1;;::::0;;17720:410:::1;;;17846:9;-1:-1:-1::0;;;17846:28:0::1;17842:288;;;17889:13;:39:::0;;-1:-1:-1;;;;;;17889:39:0::1;-1:-1:-1::0;;;;;17889:39:0;::::1;;::::0;;17842:288:::1;;;17959:9;-1:-1:-1::0;;;17959:21:0::1;17955:175;;;17995:6;:39:::0;;-1:-1:-1;;;;;;17995:39:0::1;-1:-1:-1::0;;;;;17995:39:0;::::1;;::::0;;17955:175:::1;;;18061:69;;-1:-1:-1::0;;;18061:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17955:175;18146:33;::::0;;-1:-1:-1;;;;;18146:33:0;::::1;::::0;;;;18163:9;;18146:33:::1;::::0;;;;;::::1;::::0;;::::1;17431:756:::0;;:::o;8810:42::-;;;-1:-1:-1;;;;;8810:42:0;;:::o;9147:::-;;;-1:-1:-1;;;;;9147:42:0;;:::o;13830:38::-;13860:8;13830:38;:::o;19560:127::-;19613:7;19640:39;19650:3;19655:23;:21;:23::i;:::-;19640:9;:39::i;:::-;19633:46;19560:127;-1:-1:-1;;19560:127:0:o;25659:555::-;2450:1;3056:7;;:19;;3048:63;;;;;-1:-1:-1;;;3048:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:63:0;;;;;;;;;;;;;;;2450:1;3189:7;:18;21996:12:::1;:10;:12::i;:::-;22045:10;22059:1;22025:31:::0;;;:19:::1;:31;::::0;;;;;:35;;;;:63:::1;;-1:-1:-1::0;22064:10:0::1;::::0;:20:::1;::::0;;-1:-1:-1;;;22064:20:0;;;;22087:1:::1;::::0;-1:-1:-1;;;;;22064:10:0::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:20;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22064:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22064:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22064:20:0;:24:::1;22025:63;22021:940;;;22193:10;22137:15;22173:31:::0;;;:19:::1;:31;::::0;;;;;22206:17:::1;::::0;22155:100:::1;::::0;-1:-1:-1;;;13905:8:0;22164:60:::1;::::0;22173:31;22164:8:::1;:60::i;22155:100::-;22318:6;::::0;22341:12:::1;::::0;22137:118;;-1:-1:-1;22272:14:0::1;::::0;22305:54:::1;::::0;-1:-1:-1;;;;;22318:6:0::1;22310:29:::0;::::1;::::0;22341:17;22305:4:::1;:54::i;:::-;22301:468;;;22425:3;22387:35;22396:7;22405:16;;22387:8;:35::i;:::-;:41;;;;;22451:6;::::0;:40:::1;::::0;;-1:-1:-1;;;22451:40:0;;22472:10:::1;22451:40;::::0;::::1;::::0;22387:41;;;::::1;22451:40:::0;;;;;;;;22387:41;;-1:-1:-1;;;;;;22451:6:0::1;::::0;:20:::1;::::0;:40;;;;;:6:::1;::::0;:40;;;;;;;:6;;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22451:40:0;;;;;;;;;;;;;;22447:307;;;::::0;14:27:-1;;::::1;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;22705:31:0;22723:12;22705:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;22705:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:106;22447:307;;;22511:10;::::0;22539:6:::1;::::0;22511:44:::1;::::0;;-1:-1:-1;;;22511:44:0;;-1:-1:-1;;;;;22539:6:0;;::::1;22511:44;::::0;::::1;::::0;;;;;;;;;:10;;;::::1;::::0;:19:::1;::::0;:44;;;;;:10:::1;::::0;:44;;;;;;;:10;;:44;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22511:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;22601:6:0::1;::::0;22579:50:::1;::::0;;-1:-1:-1;;;;;22601:6:0;;::::1;22579:50:::0;;22610:10:::1;22579:50;::::0;::::1;::::0;;;;;;;;::::1;::::0;-1:-1:-1;22579:50:0;;;;;;;-1:-1:-1;22579:50:0::1;22447:307;22785:10;::::0;-1:-1:-1;;;;;22785:10:0::1;:19;22805:10;22817:25;22826:7:::0;22835:6;22817:8:::1;:25::i;:::-;22785:58;;;;;;;;;;;;;-1:-1:-1::0;;;;;22785:58:0::1;-1:-1:-1::0;;;;;22785:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22785:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22785:58:0;;;;22875:10;;;;;;;;;-1:-1:-1::0;;;;;22875:10:0::1;-1:-1:-1::0;;;;;22875:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22875:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22875:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22875:20:0;22858:14:::1;:37:::0;22917:32:::1;::::0;;22929:10:::1;22917:32:::0;;22875:20:::1;22917:32:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22021:940;;;25748:1:::2;25742:3;:7;25734:73;;;;-1:-1:-1::0;;;25734:73:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25861:24;25870:3;25875:9;;25861:8;:24::i;:::-;25833:10;25820:24;::::0;;;:12:::2;:24;::::0;;;;:65;;;25946:37:::2;;::::0;25937:52:::2;::::0;25985:3;25937:8:::2;:52::i;:::-;25909:10;25896:24;::::0;;;:12:::2;:24;::::0;;;;;;;:37:::2;;:93:::0;;;;26045:19:::2;:31:::0;;;;26036:46:::2;::::0;26078:3;26036:8:::2;:46::i;:::-;26022:10;26002:31;::::0;;;:19:::2;:31;::::0;;;;;:80;;;;26093:10:::2;::::0;:32;;-1:-1:-1;;;26093:32:0;;::::2;::::0;::::2;::::0;;;;;;;;;;;;-1:-1:-1;;;;;26093:10:0;;::::2;::::0;:15:::2;::::0;:32;;;;;26002:31;26093:32;;;;;;26002:31;26093:10;:32;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;26093:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;-1:-1:::0;;26155:10:0::2;26167:24;::::0;;;:12:::2;:24;::::0;;;;;;;;:33;26143:63;;;;;;;::::2;::::0;;;;;26155:10;;-1:-1:-1;26143:63:0::2;::::0;-1:-1:-1;26143:63:0;;;;;::::2;23039:10:::1;23019:31;::::0;;;:19:::1;:31;::::0;;;;;23052:17:::1;::::0;-1:-1:-1;;;13905:8:0;23010:60:::1;::::0;:8:::1;:60::i;7380:38::-:0;;;;:::o;19776:352::-;19827:4;19844:31;19878:16;;;;;;;;;-1:-1:-1;;;;;19878:16:0;-1:-1:-1;;;;;19878:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19878:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19878:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19878:42:0;19957:16;;:37;;;-1:-1:-1;;;19957:37:0;;;;19878:42;;-1:-1:-1;19940:180:0;;19878:42;;-1:-1:-1;;;;;19957:16:0;;:35;;:37;;;;;19878:42;;19957:37;;;;;;;:16;:37;;;2:2:-1;;;;27:1;24;17:12;2:2;19957:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19957:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19957:37:0;20034:10;;20065:16;;20034:49;;;-1:-1:-1;;;20034:49:0;;-1:-1:-1;;;;;20065:16:0;;;20034:49;;;;;;19957:64;;;;;;20086:23;;20034:10;;;;;:22;;:49;;;;;19957:37;;20034:49;;;;;;;;:10;:49;;;2:2:-1;;;;27:1;24;17:12;19940:180:0;19933:187;;;19776:352;:::o;21624:173::-;21667:7;21691:12;;21707:1;21691:17;21687:31;;;-1:-1:-1;21717:1:0;21710:8;;21687:31;21777:12;;21737:13;;:30;;;-1:-1:-1;;;21737:30:0;;;;13860:8;;-1:-1:-1;;;;;21737:13:0;;:28;;:30;;;;;;;;;;;;;;:13;:30;;;2:2:-1;;;;27:1;24;17:12;2:2;21737:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21737:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21737:30:0;:36;21736:53;;;;;;21729:60;;21624:173;:::o;18516:157::-;18570:7;18597:12;;18613:1;18597:17;:68;;18623:42;18631:19;:17;:19::i;:::-;18652:12;;18623:7;:42::i;8135:33::-;;;;:::o;6182:170::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6269:27:0;::::1;6299:1;6269:27:::0;;;:18:::1;:27;::::0;;;;;;;:31;;;;6316:28;;;;;;;::::1;::::0;;;;;;;;::::1;6182:170:::0;:::o;9059:48::-;;;-1:-1:-1;;;;;9059:48:0;;:::o;24110:504::-;2450:1;3056:7;;:19;;3048:63;;;;;-1:-1:-1;;;3048:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:63:0;;;;;;;;;;;;;;;2450:1;3189:7;:18;24184::::1;:16;:18::i;:::-;24176:86;;;;-1:-1:-1::0;;;24176:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24275:12;::::0;24312:15:::1;::::0;24275:53:::1;::::0;;-1:-1:-1;;;24275:53:0;;24305:4:::1;24275:53;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;24275:12:0;;::::1;::::0;:21:::1;::::0;:53;;;;;:12:::1;::::0;:53;;;;;;;;:12;;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24275:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24275:53:0;;;;24339:12;;;;;;;;;-1:-1:-1::0;;;;;24339:12:0::1;-1:-1:-1::0;;;;;24339:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24339:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24339:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24339:20:0;24376:12:::1;::::0;24391:15:::1;::::0;24339:68:::1;::::0;;-1:-1:-1;;;24339:68:0;;-1:-1:-1;;;;;24376:12:0;;::::1;24339:68;::::0;::::1;::::0;;;;;;;;;:28;;;::::1;::::0;::::1;::::0;:68;;;;;:20:::1;::::0;:68;;;;;;;24376:12:::1;24339:28:::0;:68;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24339:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24339:68:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;24418:12:0::1;::::0;24444:15:::1;::::0;24461:20:::1;::::0;24418:64:::1;::::0;;-1:-1:-1;;;24418:64:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;-1:-1:-1;;;;;24418:12:0;;::::1;::::0;:25:::1;::::0;:64;;;;;24339:68:::1;::::0;24418:64;;;;;;;;:12:::1;::::0;:64;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24418:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24418:64:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24493:12:0::1;::::0;-1:-1:-1;24493:10:0::1;:12::i;:::-;24553;::::0;24568:15:::1;::::0;24585:20:::1;::::0;24523:83:::1;::::0;;-1:-1:-1;;;;;24553:12:0;;::::1;24523:83:::0;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;;;;;;::::1;2406:1:::0;3368:7;:22;24110:504::o;6870:24::-;;;;;;:::o;7170:32::-;;;;:::o;8721:44::-;;;-1:-1:-1;;;;;8721:44:0;;:::o;18302:107::-;18379:12;;:22;;;-1:-1:-1;;;18379:22:0;;;;18352:7;;-1:-1:-1;;;;;18379:12:0;;:20;;:22;;;;;;;;;;;;;;:12;:22;;;2:2:-1;;;;27:1;24;17:12;2:2;18379:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18379:22:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18379:22:0;;-1:-1:-1;18302:107:0;:::o;6998:31::-;;;;;;;;;:::o;20689:216::-;20744:4;20768:129;20786:18;:16;:18::i;:::-;20785:19;20817:69;20824:12;;;;;;;;;-1:-1:-1;;;;;20824:12:0;-1:-1:-1;;;;;20824:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20824:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20824:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20824:40:0;20871:14;;20824:45;;;20871:14;;;;;20817:6;:69::i;:::-;20768:4;:129::i;8041:29::-;;;;:::o;8884:42::-;;;-1:-1:-1;;;;;8884:42:0;;:::o;9311:38::-;;;-1:-1:-1;;;;;9311:38:0;;:::o;23435:559::-;23495:15;;23479:12;:31;23475:44;;23512:7;;23475:44;23547:12;23529:15;:30;23574:12;;23570:30;;23593:7;;23570:30;23612:11;:9;:11::i;:::-;23634:25;23662:46;23671:10;;;;;;;;;-1:-1:-1;;;;;23671:10:0;-1:-1:-1;;;;;23671:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23671:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23671:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23671:20:0;23693:14;;23662:8;:46::i;:::-;23634:74;;23736:43;23745:14;;23761:17;23736:8;:43::i;:::-;23719:14;:60;23859:17;;23913:12;;23850:76;;23859:17;23878:32;23887:17;-1:-1:-1;;;23878:8:0;:32::i;23850:76::-;23830:17;:96;;;23973:12;;23942:44;;;;;;;;;;;;;;;;;;;;;;;;;23435:559;;:::o;23286:92::-;23325:13;;23358:10;;23325:45;;;-1:-1:-1;;;23325:45:0;;-1:-1:-1;;;;;23358:10:0;;;23325:45;;;;;;:13;;;;;:24;;:45;;;;;:13;;:45;;;;;;;:13;;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;23325:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23325:45:0;;;;23286:92::o;26272:653::-;2450:1;3056:7;;:19;;3048:63;;;;;-1:-1:-1;;;3048:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3048:63:0;;;;;;;;;;;;;;;2450:1;3189:7;:18;;;26354:10:::1;26341:24:::0;;:12:::1;:24;::::0;;;;:33;;26376:37:::1;::::0;;::::1;::::0;26329:89:::1;::::0;26334:3:::1;:40;;::::0;26376:41;;26329:4:::1;:89::i;:::-;26321:145;;;;-1:-1:-1::0;;;26321:145:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26485:41;26493:20;:18;:20::i;:::-;26515:10;::::0;26492:21;::::1;::::0;26515:10;;::::1;;;26485:6;:41::i;:::-;26477:104;;;;-1:-1:-1::0;;;26477:104:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26633:10;26594:13;26620:24:::0;;;:12:::1;:24;::::0;;;;:37:::1;;::::0;26610:48:::1;::::0;:9:::1;:48::i;:::-;26694:12;::::0;26721:10:::1;26708:24;::::0;;;:12:::1;:24;::::0;;;;:37:::1;;::::0;26594:64;;-1:-1:-1;26685:61:0::1;::::0;:8:::1;:61::i;:::-;26669:12;:77:::0;26757:12:::1;::::0;:40:::1;::::0;;-1:-1:-1;;;26757:40:0;;26779:10:::1;26757:40;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;26757:12:0;;::::1;::::0;:21:::1;::::0;:40;;;;;:12:::1;::::0;:40;;;;;;;;:12;;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;26757:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;26818:10:0::1;26837:24;::::0;;;:12:::1;:24;::::0;;;;;;;;:37:::1;;::::0;26813:62;;;;;;;::::1;::::0;;;26818:10;;-1:-1:-1;26813:62:0::1;::::0;-1:-1:-1;26813:62:0;;;;;::::1;-1:-1:-1::0;26906:10:0::1;26893:24;::::0;;;:12:::1;:24;::::0;;;;26886:31;;;::::1;::::0;;::::1;::::0;;;3368:22;;26272:653::o;19185:127::-;19238:7;19265:39;19275:3;19280:23;:21;:23::i;8973:44::-;;;-1:-1:-1;;;;;8973:44:0;;:::o;15679:1580::-;6505:10;6486:30;;;;:18;:30;;;;;;;;;:35;6478:104;;;;-1:-1:-1;;;6478:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15775:9:::1;-1:-1:-1::0;;;15775:24:0::1;15771:1431;;;15830:9;15822:4;:17;;15814:82;;;;-1:-1:-1::0;;;15814:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15909:9;:16:::0;;;15771:1431:::1;;;15956:9;-1:-1:-1::0;;;15956:36:0::1;15952:1250;;;16022:1;16015:4;:8;16007:77;;;;-1:-1:-1::0;;;16007:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16097:21;:28:::0;;;15952:1250:::1;;;16156:9;-1:-1:-1::0;;;16156:30:0::1;16152:1050;;;16216:1;16209:4;:8;16201:80;;;;-1:-1:-1::0;;;16201:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16294:15;:22:::0;;;16152:1050:::1;;;16347:9;-1:-1:-1::0;;;16347:35:0::1;16343:859;;;16412:1;16405:4;:8;16397:83;;;;-1:-1:-1::0;;;16397:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16493:20;:27:::0;;;16343:859:::1;;;16551:9;-1:-1:-1::0;;;16551:36:0::1;16547:655;;;16617:1;16610:4;:8;16602:86;;;;-1:-1:-1::0;;;16602:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16701:21;:28:::0;;;16547:655:::1;;;16760:9;-1:-1:-1::0;;;16760:27:0::1;16756:446;;;16818:1;16810:4;:9;;16802:77;;;;-1:-1:-1::0;;;16802:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16892:12;:19:::0;;;16756:446:::1;;;16942:9;-1:-1:-1::0;;;16942:31:0::1;16938:264;;;17003:3;16996:4;:10;16988:82;;;;-1:-1:-1::0;;;16988:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17083:16;:23:::0;;;16938:264:::1;17218:33;::::0;;;;;;;17235:9;;17218:33:::1;::::0;;;;;::::1;::::0;;::::1;15679:1580:::0;;:::o;14271:173::-;14328:6;14355;;;:30;;-1:-1:-1;;14370:5:0;;;14384:1;14379;14370:5;14379:1;14365:15;;;;;:20;14355:30;14347:89;;;;-1:-1:-1;;;14347:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14096:169;14194:5;;;14189:16;;;;14181:76;;;;-1:-1:-1;;;14181:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13586:104;13673:9;;13666:17::o;13922:168::-;14020:5;;;14015:16;;;;14007:75;;;;-1:-1:-1;;;14007:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14450:182;14506:6;14537:1;14533;:5;14525:64;;;;-1:-1:-1;;;14525:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14623:1;14604:16;14613:1;13860:8;14604;:16::i;:::-;:20;;;;;;;14450:182;-1:-1:-1;;;14450:182:0:o;14638:109::-;14696:6;13860:8;14719:14;14728:1;14731;14719:8;:14::i;13696:105::-;13785:8;;13778:16::o
Swarm Source
ipfs://bde6a006d3fd32aba7bbfc2a86ae454f8041e58d11433384b9f9eff60effe7d5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.