ERC-20
Overview
Max Total Supply
3,268,990,695.62435907 SENXS
Holders
51
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
3,066,778.690010562 SENXSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GOVERNANCETAO
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT pragma solidity 0.8.14; import "./IERC20.sol"; import "./Ownable.sol"; import "./ReentrantGuard.sol"; import "./IUniswapV2Router02.sol"; interface IGovernance { function mint(address account, uint256 amount) external returns (bool); } /** GOVERNANCE TAO Staking Contract */ contract GOVERNANCETAO is Ownable, IERC20, ReentrancyGuard { // name and symbol for tokenized contract string private constant _name = 'EtherNexus STAKE'; string private constant _symbol = 'SENXS'; uint8 private constant _decimals = 9; // constants uint256 private constant precision = 10**24; uint256 public constant minLockTimeMultiplier = 10**6; address private constant burnAddress = 0x000000000000000000000000000000000000dEaD; address public constant token = 0x18a3563c21062897950BB09339C82b9686a35667; // Router for reinvesting IUniswapV2Router02 public router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // maximum lock time in blocks uint256 public maxLockTime = 730 days; uint256 public minLockTime = 7 days; uint256 public maxLockTimeMultiplier = 25 * minLockTimeMultiplier / 10; // maximum leave early fee multiplier uint256 public minEarlyFee = 2 * 10**16; uint256 public maxEarlyFee = 15 * 10**16; // Lock Info struct LockInfo { uint256 lockAmount; uint256 unlockTime; uint256 lockDuration; uint256 rewardPointsAssigned; uint256 index; address locker; } // Nonce For Lock Info uint256 public lockInfoNonce; // Nonce => LockInfo mapping(uint256 => LockInfo) public lockInfo; // User Info struct UserInfo { uint256 totalAmountStaked; uint256 rewardPoints; uint256[] lockIds; uint256 totalRewardsClaimed; } // Address => UserInfo mapping(address => UserInfo) public userInfo; // list of all users for airdrop functionality address[] public allUsers; // Tracks Dividends uint256 public totalStaked; uint256 public totalRewardPoints; // Average Lock Times uint256 public totalTimeLocked; // Reward tracking info uint256 public totalRewards; uint256 private dividendsPerPoint; mapping ( address => uint256 ) private totalExcluded; // Governance Token IGovernance public GENXS; // Events event SetMaxLockTime(uint256 newMaxLockTime); event SetMinLockTime(uint256 newMinLockTime); event SetMaxLeaveEarlyFee(uint256 newMaxFee); event SetMinLeaveEarlyFee(uint256 newMinFee); event SetMaxLockTimeMultiplier(uint256 newMaxLockTimeMultiplier); constructor() { emit Transfer(address(0), msg.sender, 0); } /** Returns the total number of tokens in existence */ function totalSupply() external view override returns (uint256) { return totalStaked; } /** Returns the number of tokens owned by `account` */ function balanceOf(address account) public view override returns (uint256) { return userInfo[account].totalAmountStaked; } /** Returns the number of tokens `spender` can transfer from `holder` */ function allowance(address, address) external pure override returns (uint256) { return 0; } /** Token Name */ function name() public pure override returns (string memory) { return _name; } /** Token Ticker Symbol */ function symbol() public pure override returns (string memory) { return _symbol; } /** Tokens decimals */ function decimals() public pure override returns (uint8) { return _decimals; } /** Approves `spender` to transfer `amount` tokens from caller */ function approve(address spender, uint256) public override returns (bool) { emit Approval(msg.sender, spender, 0); return true; } /** Transfer Function */ function transfer(address recipient, uint256) external override nonReentrant returns (bool) { _claimReward(msg.sender, false); emit Transfer(msg.sender, recipient, 0); return true; } /** Transfer Function */ function transferFrom( address, address recipient, uint256 ) external override nonReentrant returns (bool) { _claimReward(msg.sender, false); emit Transfer(msg.sender, recipient, 0); return true; } /////////////////////////////////////////// //////// OWNER FUNCTIONS ///////// /////////////////////////////////////////// /** Sets The Governance Token, Can Only Be Set Once */ function setGENXS(address GENXS_) external onlyOwner { require( GENXS_ != address(0) && address(GENXS) == address(0), 'Already Set' ); GENXS = IGovernance(GENXS_); } /** Sets the router for reinvesting */ function setRouter(address newRouter) external onlyOwner { router = IUniswapV2Router02(newRouter); } /** Sets The Minimum Allowed Lock Time That Users Can Stake Requirements: - newMinLockTime must be less than the maxLockTime */ function setMinLockTime(uint256 newMinLockTime) external onlyOwner { require( newMinLockTime < maxLockTime, "Min Lock Time Cannot Exceed Max Lock Time" ); minLockTime = newMinLockTime; emit SetMinLockTime(newMinLockTime); } /** Sets The Maximum Allowed Lock Time That Users Can Stake Requirements: - newMaxLockTime must be greater than the minLockTime */ function setMaxLockTime(uint256 newMaxLockTime) external onlyOwner { require( newMaxLockTime > minLockTime, "Max Lock Time Must Exceed Min Lock Time" ); maxLockTime = newMaxLockTime; emit SetMaxLockTime(newMaxLockTime); } /** Sets The Minimum Penalty For Unstaking Before Stake Unlocks Requirements: - newMinLeaveEarlyFee must be less than the maxEarlyFee */ function setMinLeaveEarlyFee(uint256 newMinLeaveEarlyFee) external onlyOwner { require( newMinLeaveEarlyFee < maxEarlyFee, "Min Lock Time Cannot Exceed Max Lock Time" ); minEarlyFee = newMinLeaveEarlyFee; emit SetMinLeaveEarlyFee(newMinLeaveEarlyFee); } /** Sets The Maximum Penalty For Unstaking Before Stake Unlocks Requirements: - newMaxLeaveEarlyFee must be less than the minEarlyFee */ function setMaxLeaveEarlyFee(uint256 newMaxLeaveEarlyFee) external onlyOwner { require( newMaxLeaveEarlyFee > minEarlyFee, "Max Lock Time Must Exceed Min Lock Time" ); maxEarlyFee = newMaxLeaveEarlyFee; emit SetMaxLeaveEarlyFee(newMaxLeaveEarlyFee); } /** Sets The Multiplier For Maximum Lock Time A Multiplier Of 4 * 10^18 Would Make A Max Lock Time Stake Gain 4x The Rewards Of A Min Lock Time Stake For The Same Amount Of Tokens Staked Requirements: - newMaxLockTimeMultiplier MUST Be Greater Than Or Equal To 10^18 */ function setMaxLockTimeMultiplier(uint256 newMaxLockTimeMultiplier) external onlyOwner { require( newMaxLockTimeMultiplier >= minLockTimeMultiplier, "Max Lock Time Multiplier Too Small" ); maxLockTimeMultiplier = newMaxLockTimeMultiplier; emit SetMaxLockTimeMultiplier(newMaxLockTimeMultiplier); } /** Withdraws Any Token That Is Not MTAO NOTE: Withdrawing Reward Tokens Will Mess Up The Math Associated With Rewarding The Contract will still function as desired, but the last users to claim Will not receive their full amount, or any, of the reward token */ function withdrawForeignToken(address token_) external onlyOwner { require(token != token_, "Cannot Withdraw Staked Token"); _send(token_, msg.sender, balanceOfToken(token_)); } /** Withdraws The Native Chain Token To Owner's Address */ function withdrawNative() external onlyOwner { (bool s, ) = payable(msg.sender).call{value: address(this).balance}(""); require(s, "Failure To Withdraw Native"); } /** Stakes `amount` of MTAO for the specified `lockTime` Increasing the user's rewardPoints and overall share of the pool Also claims the current pending rewards for the user Requirements: - `amount` is greater than zero - lock time is within bounds for min and max lock time, lock time is in blocks - emergencyWithdraw has not been enabled by contract owner */ function stakeFor(address user, uint256 amount, uint256 lockTime) external nonReentrant onlyOwner { require(amount > 0, "Zero Amount"); require(user != address(0), 'Zero Address'); require(lockTime <= maxLockTime, "Lock Time Exceeds Maximum"); require(lockTime >= minLockTime, "Lock Time Preceeds Minimum"); // attempt to claim rewards if (userInfo[user].totalAmountStaked > 0) { _claimReward(user, false); } // transfer in tokens uint256 received = _transferIn(token, amount); // total reward multiplier uint256 multiplier = calculateRewardPoints(received, lockTime); // update reward multiplier data unchecked { userInfo[user].rewardPoints += multiplier; totalRewardPoints += multiplier; } // update staked data unchecked { totalStaked += received; userInfo[user].totalAmountStaked += received; } // update reward data for each reward token totalExcluded[user] = getCumulativeDividends(userInfo[user].rewardPoints); // Map Lock Nonce To Lock Info lockInfo[lockInfoNonce] = LockInfo({ lockAmount: received, unlockTime: block.timestamp + lockTime, lockDuration: lockTime, rewardPointsAssigned: multiplier, index: userInfo[user].lockIds.length, locker: user }); // Push Lock Nonce To User's Lock IDs userInfo[user].lockIds.push(lockInfoNonce); unchecked { // Increment Global Lock Nonce lockInfoNonce++; // Increment Total Time Locked totalTimeLocked += lockTime; } // show transfer for Staking Token emit Transfer(address(0), user, received); // mint governance tokens GENXS.mint(user, multiplier); } /////////////////////////////////////////// //////// PUBLIC FUNCTIONS ///////// /////////////////////////////////////////// /** Claims All The Rewards Associated With `msg.sender` in ETH */ function claimRewards() external nonReentrant { _claimReward(msg.sender, false); } /** Claims All The Rewards Associated With `msg.sender` in MTAO */ function claimRewardsAsMTAO() external nonReentrant { _claimReward(msg.sender, true); } /** Stakes `amount` of MTAO for the specified `lockTime` Increasing the user's rewardPoints and overall share of the pool Also claims the current pending rewards for the user Requirements: - `amount` is greater than zero - lock time is within bounds for min and max lock time, lock time is in blocks - emergencyWithdraw has not been enabled by contract owner */ function stake(uint256 amount, uint256 lockTime) external nonReentrant { require(amount > 0, "Zero Amount"); require(lockTime <= maxLockTime, "Lock Time Exceeds Maximum"); require(lockTime >= minLockTime, "Lock Time Preceeds Minimum"); // gas savings address user = msg.sender; // attempt to claim rewards if (userInfo[user].totalAmountStaked > 0) { _claimReward(user, false); } // transfer in tokens uint256 received = _transferIn(token, amount); // total reward multiplier uint256 multiplier = calculateRewardPoints(received, lockTime); // update reward multiplier data unchecked { userInfo[user].rewardPoints += multiplier; totalRewardPoints += multiplier; } // update staked data unchecked { totalStaked += received; userInfo[user].totalAmountStaked += received; } // update reward data for each reward token totalExcluded[user] = getCumulativeDividends(userInfo[user].rewardPoints); // Map Lock Nonce To Lock Info lockInfo[lockInfoNonce] = LockInfo({ lockAmount: received, unlockTime: block.timestamp + lockTime, lockDuration: lockTime, rewardPointsAssigned: multiplier, index: userInfo[user].lockIds.length, locker: user }); // Push Lock Nonce To User's Lock IDs userInfo[user].lockIds.push(lockInfoNonce); unchecked { // Increment Global Lock Nonce lockInfoNonce++; // Increment Total Time Locked totalTimeLocked += lockTime; } // show transfer for Staking Token emit Transfer(address(0), user, received); // mint governance tokens GENXS.mint(user, multiplier); } /** Withdraws `amount` of MTAO Associated With `lockId` Claims All Pending Rewards For The User Requirements: - `lockId` is a valid lock ID - locker of `lockId` is msg.sender - lock amount for `lockId` is greater than zero - the time left until unlock for `lockId` is zero - Emergency Withdraw is disabled */ function withdraw(uint256 lockId, uint256 amount) external nonReentrant { // gas savings address user = msg.sender; uint256 lockIdAmount = lockInfo[lockId].lockAmount; // Require Input Data Is Correct require(lockId < lockInfoNonce, "Invalid LockID"); require(lockInfo[lockId].locker == user, "Not Owner Of LockID"); require(lockIdAmount > 0 && amount > 0, "Insufficient Amount"); // claim reward for user if (userInfo[user].totalAmountStaked > 0) { _claimReward(user, false); } // ensure we are not trying to unlock more than we own if (amount > lockIdAmount) { amount = lockIdAmount; } // update amount staked totalStaked -= amount; userInfo[user].totalAmountStaked -= amount; // see if early fee should be applied uint earlyFee = timeUntilUnlock(lockId) == 0 ? 0 : amount * getEarlyFee(lockId) / 10**18; // if withdrawing full amount, remove lock ID if (amount == lockIdAmount) { // reduce reward points assigned uint256 rewardPointsAssigned = lockInfo[lockId].rewardPointsAssigned; userInfo[user].rewardPoints -= rewardPointsAssigned; totalRewardPoints -= rewardPointsAssigned; // remove all lockId data _removeLock(lockId); } else { // reduce rewardPoints by rewardPoints * ( amount / lockAmount ) uint256 rewardPointsToRemove = (amount * lockInfo[lockId].rewardPointsAssigned) / lockIdAmount; // decrement reward points userInfo[user].rewardPoints -= rewardPointsToRemove; totalRewardPoints -= rewardPointsToRemove; // update lock data lockInfo[lockId].lockAmount -= amount; lockInfo[lockId].rewardPointsAssigned -= rewardPointsToRemove; } // update reward data for each reward token totalExcluded[user] = getCumulativeDividends(userInfo[user].rewardPoints); // remove user from list if unstaked completely if (userInfo[user].totalAmountStaked == 0) { delete userInfo[user]; } // burn early fee if applicable if (earlyFee > 0) { _send(token, burnAddress, earlyFee); } // send rest of amount to user _send(token, user, amount - earlyFee); // emit token transfer emit Transfer(user, address(0), amount); } /** Allows Contract To Receive Native Currency */ receive() external payable nonReentrant { // update rewards unchecked { totalRewards += msg.value; } if (totalRewardPoints > 0) { dividendsPerPoint += ( precision * msg.value ) / totalRewardPoints; } } /////////////////////////////////////////// //////// INTERNAL FUNCTIONS ///////// /////////////////////////////////////////// function _claimReward(address user, bool asMTAO) internal { // exit if zero value locked if (userInfo[user].totalAmountStaked == 0) { return; } // get pending rewards uint256 pending = pendingRewards(user); // reset total excluded totalExcluded[user] = getCumulativeDividends(userInfo[user].rewardPoints); // increment total rewards claimed unchecked { userInfo[user].totalRewardsClaimed += pending; } if (asMTAO) { // amount of MTAO in contract before swap uint256 amountBefore = IERC20(token).balanceOf(address(this)); // define swap path address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = token; // swap ETH for MTAO router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: pending}( 0, path, address(this), block.timestamp + 10000 ); // amount of MTAO in contract after swap uint256 amountAfter = IERC20(token).balanceOf(address(this)); require( amountAfter > amountBefore, 'No Received' ); // calculate amount of MTAO purchased uint256 received = amountAfter - amountBefore; // send MTAO to user _send(token, user, received); // save memory, refund gas delete path; } else { // send ETH value to user _send(address(0), user, pending); } } function _transferIn(address _token, uint256 amount) internal returns (uint256) { require( IERC20(_token).allowance(msg.sender, address(this)) >= amount, 'Insufficient Allowance' ); uint256 before = balanceOfToken(_token); IERC20(_token).transferFrom(msg.sender, address(this), amount); uint256 After = balanceOfToken(_token); require(After > before, "Error On Transfer From"); return After - before; } function _send( address _token, address to, uint256 amount ) internal { if (to == address(0)) { return; } // fetch and validate contract owns necessary balance uint256 bal = _token == address(0) ? address(this).balance : balanceOfToken(_token); if (amount > bal) { amount = bal; } // return if amount is zero if (amount == 0) { return; } if (_token == address(0)) { (bool s,) = payable(to).call{value: amount}(""); require(s, 'Failure On Eth Transfer'); } else { // ensure transfer succeeds require( IERC20(_token).transfer(to, amount), "Failure On Token Transfer" ); } } function _removeLock(uint256 id) internal { // fetch elements to make function more readable address user = lockInfo[id].locker; uint256 rmIndex = lockInfo[id].index; uint256 lastElement = userInfo[user].lockIds[ userInfo[user].lockIds.length - 1 ]; // set last element's index to be removed index lockInfo[lastElement].index = rmIndex; // set removed index's position to be the last element userInfo[user].lockIds[rmIndex] = lastElement; // pop last element off the user array userInfo[user].lockIds.pop(); // delete lock data delete lockInfo[id]; } /////////////////////////////////////////// //////// READ FUNCTIONS ///////// /////////////////////////////////////////// function getCumulativeDividends(uint256 share) public view returns (uint256) { return ( share * dividendsPerPoint ) / precision; } function getEarlyFee(uint lockId) public view returns (uint256) { return calculateLeaveEarlyFee(lockInfo[lockId].lockDuration); } function balanceOfToken(address _token) public view returns (uint256) { return IERC20(_token).balanceOf(address(this)); } function tokenBalanceOf(address user) external view returns (uint256) { return userInfo[user].totalAmountStaked; } function calculateRewardPoints(uint256 lockAmount, uint256 lockTime) public view returns (uint256) { return lockAmount * (minLockTimeMultiplier + (((lockTime - minLockTime) * (maxLockTimeMultiplier - minLockTimeMultiplier)) / (maxLockTime - minLockTime))); } function calculateLeaveEarlyFee(uint256 lockTime) public view returns (uint256) { return minEarlyFee + (((lockTime - minLockTime) * (maxEarlyFee - minEarlyFee)) / (maxLockTime - minLockTime)); } function timeUntilUnlock(uint256 lockId) public view returns (uint256) { return lockInfo[lockId].unlockTime <= block.timestamp ? 0 : lockInfo[lockId].unlockTime - block.timestamp; } function pendingRewards(address user) public view returns (uint256) { if (userInfo[user].totalAmountStaked == 0) { return 0; } uint256 holderTotalDividends = getCumulativeDividends(userInfo[user].rewardPoints); uint256 holderTotalExcluded = totalExcluded[user]; return holderTotalDividends > holderTotalExcluded ? holderTotalDividends - holderTotalExcluded : 0; } function averageTimeLocked() external view returns (uint256) { return totalTimeLocked / lockInfoNonce; } function getAllLockIDsForUser(address user) external view returns (uint256[] memory) { return userInfo[user].lockIds; } function getNumberOfLockIDsForUser(address user) external view returns (uint256) { return userInfo[user].lockIds.length; } function getTotalRewardsClaimedForUser(address user) external view returns (uint256) { return userInfo[user].totalRewardsClaimed; } function fetchLockData(address user) external view returns ( uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory ) { uint256 len = userInfo[user].lockIds.length; uint256[] memory amounts = new uint256[](len); uint256[] memory durations = new uint256[](len); uint256[] memory timeRemaining = new uint256[](len); uint256[] memory earlyFees = new uint256[](len); for (uint256 i = 0; i < len; ) { amounts[i] = lockInfo[userInfo[user].lockIds[i]].lockAmount; durations[i] = lockInfo[userInfo[user].lockIds[i]].lockDuration; timeRemaining[i] = timeUntilUnlock(userInfo[user].lockIds[i]); earlyFees[i] = getEarlyFee(userInfo[user].lockIds[i]); unchecked { ++i; } } return (userInfo[user].lockIds, amounts, durations, timeRemaining, earlyFees); } }
//SPDX-License-Identifier: MIT pragma solidity 0.8.14; interface IERC20 { function totalSupply() external view returns (uint256); function symbol() external view returns(string memory); function name() external view returns(string memory); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Returns the number of decimal places */ function decimals() external view returns (uint8); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
//SPDX-License-Identifier: MIT pragma solidity 0.8.14; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
//SPDX-License-Identifier: MIT pragma solidity 0.8.14; /** * @title Owner * @dev Set & change owner */ contract Ownable { address private owner; // event for EVM logging event OwnerSet(address indexed oldOwner, address indexed newOwner); // modifier to check if caller is owner modifier onlyOwner() { // If the first argument of 'require' evaluates to 'false', execution terminates and all // changes to the state and to Ether balances are reverted. // This used to consume all gas in old EVM versions, but not anymore. // It is often a good idea to use 'require' to check if functions are called correctly. // As a second argument, you can also provide an explanation about what went wrong. require(msg.sender == owner, "Caller is not owner"); _; } /** * @dev Set contract deployer as owner */ constructor() { owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor emit OwnerSet(address(0), owner); } /** * @dev Change owner * @param newOwner address of new owner */ function changeOwner(address newOwner) public onlyOwner { emit OwnerSet(owner, newOwner); owner = newOwner; } /** * @dev Return owner address * @return address of owner */ function getOwner() external view returns (address) { return owner; } }
//SPDX-License-Identifier: MIT pragma solidity 0.8.14; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxFee","type":"uint256"}],"name":"SetMaxLeaveEarlyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxLockTime","type":"uint256"}],"name":"SetMaxLockTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxLockTimeMultiplier","type":"uint256"}],"name":"SetMaxLockTimeMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinFee","type":"uint256"}],"name":"SetMinLeaveEarlyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinLockTime","type":"uint256"}],"name":"SetMinLockTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GENXS","outputs":[{"internalType":"contract IGovernance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"averageTimeLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"balanceOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"calculateLeaveEarlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"calculateRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewardsAsMTAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"fetchLockData","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllLockIDsForUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"name":"getCumulativeDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockId","type":"uint256"}],"name":"getEarlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNumberOfLockIDsForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalRewardsClaimedForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockInfo","outputs":[{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"lockDuration","type":"uint256"},{"internalType":"uint256","name":"rewardPointsAssigned","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"locker","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockInfoNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEarlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLockTimeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minEarlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLockTimeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"GENXS_","type":"address"}],"name":"setGENXS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxLeaveEarlyFee","type":"uint256"}],"name":"setMaxLeaveEarlyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxLockTime","type":"uint256"}],"name":"setMaxLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxLockTimeMultiplier","type":"uint256"}],"name":"setMaxLockTimeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinLeaveEarlyFee","type":"uint256"}],"name":"setMinLeaveEarlyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinLockTime","type":"uint256"}],"name":"setMinLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"stakeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockId","type":"uint256"}],"name":"timeUntilUnlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"tokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTimeLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"totalAmountStaked","type":"uint256"},{"internalType":"uint256","name":"rewardPoints","type":"uint256"},{"internalType":"uint256","name":"totalRewardsClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556303c2670060035562093a80600455600a6200004b620f42406019620000ff565b6200005791906200012d565b60055566470de4df820000600655670214e8348c4f00006007553480156200007e57600080fd5b50600080546001600160a01b0319163390811782556040519091907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a360018055604051600080825233917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000150565b60008160001904831182151516156200012857634e487b7160e01b600052601160045260246000fd5b500290565b6000826200014b57634e487b7160e01b600052601260045260246000fd5b500490565b61318580620001606000396000f3fe6080604052600436106103545760003560e01c8063817b1cd2116101c6578063b99152d0116100f7578063e42c08f211610095578063f25c8e3f1161006f578063f25c8e3f14610af9578063f887ea4014610b0f578063fa27ba5f14610b2f578063fc0c546a14610b4f57600080fd5b8063e42c08f2146107a6578063e4918a5914610ac4578063e68af3ac14610ad957600080fd5b8063cb282f53116100d1578063cb282f5314610a56578063cbe1d80f14610a6b578063d308e10e14610a8b578063dd62ed3e14610aa157600080fd5b8063b99152d014610a00578063c0d7865514610a20578063c2e8caf614610a4057600080fd5b8063a60ff76611610164578063a9059cbb1161013e578063a9059cbb14610979578063ada74f3814610999578063b23f2942146109af578063b4385572146109cf57600080fd5b8063a60ff76614610923578063a6f9dae114610939578063a86d01d81461095957600080fd5b8063893d20e8116101a0578063893d20e81461087e57806395d89b411461089c5780639853a4d5146108ca578063a2bdedf41461090357600080fd5b8063817b1cd21461082857806382e5d1bc1461083e578063885a4cd01461085e57600080fd5b806331d7a262116102a057806358e9a8151161023e57806370a082311161021857806370a08231146107a657806376089a08146107dc578063787e7ece146107f25780637b0472f01461080857600080fd5b806358e9a815146106ca5780635b1a4c24146106ea5780635db623871461077957600080fd5b8063441a3e701161027a578063441a3e70146106475780634fa469b31461066757806350431ce41461069f57806352234150146106b457600080fd5b806331d7a262146105f2578063367e312414610612578063372500ab1461063257600080fd5b80631959a0021161030d57806327230702116102e7578063272307021461055b5780632a28d56b146105945780632d9d12f2146105b4578063313ce567146105d657600080fd5b80631959a002146104c45780631b934ce51461051b57806323b872dd1461053b57600080fd5b806303d17cd6146103dd57806306fdde0314610407578063095ea7b3146104495780630e15561a1461047957806313cc11581461048f57806318160ddd146104af57600080fd5b366103d8576002600154036103845760405162461bcd60e51b815260040161037b90612c59565b60405180910390fd5b6002600155600f805434019055600d54156103d157600d546103b03469d3c21bcecceda1000000612ca6565b6103ba9190612cc5565b601060008282546103cb9190612ce7565b90915550505b6001808055005b600080fd5b3480156103e957600080fd5b506103f4620f424081565b6040519081526020015b60405180910390f35b34801561041357600080fd5b5060408051808201909152601081526f45746865724e65787573205354414b4560801b60208201525b6040516103fe9190612cff565b34801561045557600080fd5b50610469610464366004612d69565b610b77565b60405190151581526020016103fe565b34801561048557600080fd5b506103f4600f5481565b34801561049b57600080fd5b506103f46104aa366004612d95565b610bd0565b3480156104bb57600080fd5b50600c546103f4565b3480156104d057600080fd5b506105006104df366004612dae565b600a6020526000908152604090208054600182015460039092015490919083565b604080519384526020840192909252908201526060016103fe565b34801561052757600080fd5b506103f4610536366004612d95565b610bf1565b34801561054757600080fd5b50610469610556366004612dcb565b610c2c565b34801561056757600080fd5b506103f4610576366004612dae565b6001600160a01b03166000908152600a602052604090206003015490565b3480156105a057600080fd5b506103f46105af366004612d95565b610c9c565b3480156105c057600080fd5b506105d46105cf366004612d95565b610cec565b005b3480156105e257600080fd5b50604051600981526020016103fe565b3480156105fe57600080fd5b506103f461060d366004612dae565b610db0565b34801561061e57600080fd5b506105d461062d366004612dae565b610e38565b34801561063e57600080fd5b506105d4610edf565b34801561065357600080fd5b506105d4610662366004612e0c565b610f17565b34801561067357600080fd5b50601254610687906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b3480156106ab57600080fd5b506105d4611348565b3480156106c057600080fd5b506103f460055481565b3480156106d657600080fd5b506105d46106e5366004612e2e565b61140d565b3480156106f657600080fd5b50610743610705366004612d95565b60096020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b031686565b60408051968752602087019590955293850192909252606084015260808301526001600160a01b031660a082015260c0016103fe565b34801561078557600080fd5b50610799610794366004612dae565b6117c2565b6040516103fe9190612e9e565b3480156107b257600080fd5b506103f46107c1366004612dae565b6001600160a01b03166000908152600a602052604090205490565b3480156107e857600080fd5b506103f460085481565b3480156107fe57600080fd5b506103f4600e5481565b34801561081457600080fd5b506105d4610823366004612e0c565b611831565b34801561083457600080fd5b506103f4600c5481565b34801561084a57600080fd5b506105d4610859366004612d95565b611b20565b34801561086a57600080fd5b506105d4610879366004612dae565b611ba0565b34801561088a57600080fd5b506000546001600160a01b0316610687565b3480156108a857600080fd5b5060408051808201909152600581526453454e585360d81b602082015261043c565b3480156108d657600080fd5b506103f46108e5366004612dae565b6001600160a01b03166000908152600a602052604090206002015490565b34801561090f57600080fd5b5061068761091e366004612d95565b611c44565b34801561092f57600080fd5b506103f460045481565b34801561094557600080fd5b506105d4610954366004612dae565b611c6e565b34801561096557600080fd5b506105d4610974366004612d95565b611cf3565b34801561098557600080fd5b50610469610994366004612d69565b611d73565b3480156109a557600080fd5b506103f460075481565b3480156109bb57600080fd5b506105d46109ca366004612d95565b611de2565b3480156109db57600080fd5b506109ef6109ea366004612dae565b611e62565b6040516103fe959493929190612eb1565b348015610a0c57600080fd5b506103f4610a1b366004612dae565b612205565b348015610a2c57600080fd5b506105d4610a3b366004612dae565b612270565b348015610a4c57600080fd5b506103f4600d5481565b348015610a6257600080fd5b506103f46122bc565b348015610a7757600080fd5b506103f4610a86366004612e0c565b6122d3565b348015610a9757600080fd5b506103f460035481565b348015610aad57600080fd5b506103f4610abc366004612f1e565b600092915050565b348015610ad057600080fd5b506105d4612335565b348015610ae557600080fd5b506103f4610af4366004612d95565b61236a565b348015610b0557600080fd5b506103f460065481565b348015610b1b57600080fd5b50600254610687906001600160a01b031681565b348015610b3b57600080fd5b506105d4610b4a366004612d95565b61238f565b348015610b5b57600080fd5b506106877318a3563c21062897950bb09339c82b9686a3566781565b6000826001600160a01b0316336001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256000604051610bbf91815260200190565b60405180910390a350600192915050565b600081815260096020526040812060020154610beb90610c9c565b92915050565b600081815260096020526040812060010154421015610abc57600082815260096020526040902060010154610c27904290612f57565b610beb565b6000600260015403610c505760405162461bcd60e51b815260040161037b90612c59565b6002600155610c6033600061240f565b604051600081526001600160a01b0384169033906000805160206131308339815191529060200160405180910390a35060018080559392505050565b6000600454600354610cae9190612f57565b600654600754610cbe9190612f57565b600454610ccb9085612f57565b610cd59190612ca6565b610cdf9190612cc5565b600654610beb9190612ce7565b6000546001600160a01b03163314610d165760405162461bcd60e51b815260040161037b90612f6e565b620f4240811015610d745760405162461bcd60e51b815260206004820152602260248201527f4d6178204c6f636b2054696d65204d756c7469706c69657220546f6f20536d616044820152611b1b60f21b606482015260840161037b565b60058190556040518181527f9267f2be7ed7272cd77e981676bf18ceb15dbc58c990454917ef92bf85a739c1906020015b60405180910390a150565b6001600160a01b0381166000908152600a60205260408120548103610dd757506000919050565b6001600160a01b0382166000908152600a6020526040812060010154610dfc9061236a565b6001600160a01b038416600090815260116020526040902054909150808211610e26576000610e30565b610e308183612f57565b949350505050565b6000546001600160a01b03163314610e625760405162461bcd60e51b815260040161037b90612f6e565b6001600160a01b03811615801590610e8357506012546001600160a01b0316155b610ebd5760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e4814d95d60aa1b604482015260640161037b565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600260015403610f015760405162461bcd60e51b815260040161037b90612c59565b6002600155610f1133600061240f565b60018055565b600260015403610f395760405162461bcd60e51b815260040161037b90612c59565b60026001556000828152600960205260409020546008543391908410610f925760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908131bd8dad25160921b604482015260640161037b565b6000848152600960205260409020600501546001600160a01b03838116911614610ff45760405162461bcd60e51b8152602060048201526013602482015272139bdd0813dddb995c8813d988131bd8dad251606a1b604482015260640161037b565b6000811180156110045750600083115b6110465760405162461bcd60e51b8152602060048201526013602482015272125b9cdd59999a58da595b9d08105b5bdd5b9d606a1b604482015260640161037b565b6001600160a01b0382166000908152600a60205260409020541561106f5761106f82600061240f565b8083111561107b578092505b82600c600082825461108d9190612f57565b90915550506001600160a01b0382166000908152600a6020526040812080548592906110ba908490612f57565b90915550600090506110cb85610bf1565b156110fb57670de0b6b3a76400006110e286610bd0565b6110ec9086612ca6565b6110f69190612cc5565b6110fe565b60005b9050818403611171576000858152600960209081526040808320600301546001600160a01b0387168452600a9092528220600101805491928392611143908490612f57565b9250508190555080600d600082825461115c9190612f57565b9091555061116b90508661277a565b50611232565b600085815260096020526040812060030154839061118f9087612ca6565b6111999190612cc5565b6001600160a01b0385166000908152600a60205260408120600101805492935083929091906111c9908490612f57565b9250508190555080600d60008282546111e29190612f57565b909155505060008681526009602052604081208054879290611205908490612f57565b90915550506000868152600960205260408120600301805483929061122b908490612f57565b9091555050505b6001600160a01b0383166000908152600a60205260409020600101546112579061236a565b6001600160a01b038416600090815260116020908152604080832093909355600a90529081205490036112bf576001600160a01b0383166000908152600a6020526040812081815560018101829055906112b46002830182612c27565b600382016000905550505b80156112e6576112e67318a3563c21062897950bb09339c82b9686a3566761dead836128b3565b61130e7318a3563c21062897950bb09339c82b9686a35667846113098488612f57565b6128b3565b6040518481526000906001600160a01b038516906000805160206131308339815191529060200160405180910390a3505060018055505050565b6000546001600160a01b031633146113725760405162461bcd60e51b815260040161037b90612f6e565b604051600090339047908381818185875af1925050503d80600081146113b4576040519150601f19603f3d011682016040523d82523d6000602084013e6113b9565b606091505b505090508061140a5760405162461bcd60e51b815260206004820152601a60248201527f4661696c75726520546f205769746864726177204e6174697665000000000000604482015260640161037b565b50565b60026001540361142f5760405162461bcd60e51b815260040161037b90612c59565b60026001556000546001600160a01b0316331461145e5760405162461bcd60e51b815260040161037b90612f6e565b6000821161149c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b604482015260640161037b565b6001600160a01b0383166114e15760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b604482015260640161037b565b60035481111561152f5760405162461bcd60e51b81526020600482015260196024820152784c6f636b2054696d652045786365656473204d6178696d756d60381b604482015260640161037b565b6004548110156115815760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b2054696d65205072656365656473204d696e696d756d000000000000604482015260640161037b565b6001600160a01b0383166000908152600a6020526040902054156115aa576115aa83600061240f565b60006115ca7318a3563c21062897950bb09339c82b9686a3566784612a7f565b905060006115d882846122d3565b6001600160a01b0386166000908152600a6020526040902060018101805483018155600d805484019055600c805486019055815485019091555490915061161e9061236a565b6001600160a01b03861660009081526011602090815260409182902092909255805160c081019091528381529081016116578542612ce7565b8152602080820186905260408083018590526001600160a01b038981166000818152600a808652848220600290810180546060808b01919091526080998a0186905260088054865260098a528886208c5181558c8b01516001808301919091558d8b015195820195909555918c01516003830155998b0151600482015560a0909a01516005909a0180546001600160a01b0319169a909616999099179094558552855487548085018955978252858220909701969096558454909101909355600e80548801905551858152919291600080516020613130833981519152910160405180910390a36012546040516340c10f1960e01b81526001600160a01b03878116600483015260248201849052909116906340c10f19906044015b6020604051808303816000875af1158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b69190612f9b565b50506001805550505050565b6001600160a01b0381166000908152600a602090815260409182902060020180548351818402810184019094528084526060939283018282801561182557602002820191906000526020600020905b815481526020019060010190808311611811575b50505050509050919050565b6002600154036118535760405162461bcd60e51b815260040161037b90612c59565b6002600155816118935760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b604482015260640161037b565b6003548111156118e15760405162461bcd60e51b81526020600482015260196024820152784c6f636b2054696d652045786365656473204d6178696d756d60381b604482015260640161037b565b6004548110156119335760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b2054696d65205072656365656473204d696e696d756d000000000000604482015260640161037b565b336000818152600a6020526040902054156119535761195381600061240f565b60006119737318a3563c21062897950bb09339c82b9686a3566785612a7f565b9050600061198182856122d3565b6001600160a01b0384166000908152600a6020526040902060018101805483018155600d805484019055600c80548601905581548501909155549091506119c79061236a565b6001600160a01b03841660009081526011602090815260409182902092909255805160c08101909152838152908101611a008642612ce7565b8152602080820187905260408083018590526001600160a01b038781166000818152600a808652848220600290810180546060808b01919091526080998a0186905260088054865260098a528886208c5181558c8b01516001808301919091558d8b015195820195909555918c01516003830155998b0151600482015560a0909a01516005909a0180546001600160a01b0319169a909616999099179094558552855487548085018955978252858220909701969096558454909101909355600e80548901905551858152919291600080516020613130833981519152910160405180910390a36012546040516340c10f1960e01b81526001600160a01b03858116600483015260248201849052909116906340c10f1990604401611773565b6000546001600160a01b03163314611b4a5760405162461bcd60e51b815260040161037b90612f6e565b6003548110611b6b5760405162461bcd60e51b815260040161037b90612fbd565b60048190556040518181527f6d75d7fa343cd4abb03ab6e4e818fa3d3189ea95066365738b5bcfbcdd6d189490602001610da5565b6000546001600160a01b03163314611bca5760405162461bcd60e51b815260040161037b90612f6e565b6001600160a01b0381167318a3563c21062897950bb09339c82b9686a3566703611c365760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74205769746864726177205374616b656420546f6b656e00000000604482015260640161037b565b61140a813361130984612205565b600b8181548110611c5457600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611c985760405162461bcd60e51b815260040161037b90612f6e565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d1d5760405162461bcd60e51b815260040161037b90612f6e565b6004548111611d3e5760405162461bcd60e51b815260040161037b90613006565b60038190556040518181527f64a2c86a826b521169cbfba8217846317cc369b740aed5adaa78856897a4b2c290602001610da5565b6000600260015403611d975760405162461bcd60e51b815260040161037b90612c59565b6002600155611da733600061240f565b604051600081526001600160a01b0384169033906000805160206131308339815191529060200160405180910390a350600180805592915050565b6000546001600160a01b03163314611e0c5760405162461bcd60e51b815260040161037b90612f6e565b6006548111611e2d5760405162461bcd60e51b815260040161037b90613006565b60078190556040518181527f1ee1104b41ddbd4e3017d672df41257849a4f5fc9e6c9df6156a9979e7953c9490602001610da5565b6001600160a01b0381166000908152600a602052604081206002015460609182918291829182918167ffffffffffffffff811115611ea257611ea261304d565b604051908082528060200260200182016040528015611ecb578160200160208202803683370190505b50905060008267ffffffffffffffff811115611ee957611ee961304d565b604051908082528060200260200182016040528015611f12578160200160208202803683370190505b50905060008367ffffffffffffffff811115611f3057611f3061304d565b604051908082528060200260200182016040528015611f59578160200160208202803683370190505b50905060008467ffffffffffffffff811115611f7757611f7761304d565b604051908082528060200260200182016040528015611fa0578160200160208202803683370190505b50905060005b8581101561216e576001600160a01b038c166000908152600a602052604081206002018054600992919084908110611fe057611fe0613063565b906000526020600020015481526020019081526020016000206000015485828151811061200f5761200f613063565b60200260200101818152505060096000600a60008f6001600160a01b03166001600160a01b03168152602001908152602001600020600201838154811061205857612058613063565b906000526020600020015481526020019081526020016000206002015484828151811061208757612087613063565b6020026020010181815250506120df600a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060020182815481106120cf576120cf613063565b9060005260206000200154610bf1565b8382815181106120f1576120f1613063565b602002602001018181525050612149600a60008e6001600160a01b03166001600160a01b03168152602001908152602001600020600201828154811061213957612139613063565b9060005260206000200154610bd0565b82828151811061215b5761215b613063565b6020908102919091010152600101611fa6565b50600a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060020184848484848054806020026020016040519081016040528092919081815260200182805480156121e657602002820191906000526020600020905b8154815260200190600101908083116121d2575b5050505050945099509950995099509950505050505091939590929450565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561224c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190613079565b6000546001600160a01b0316331461229a5760405162461bcd60e51b815260040161037b90612f6e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600854600e546122ce9190612cc5565b905090565b60006004546003546122e59190612f57565b620f42406005546122f69190612f57565b6004546123039085612f57565b61230d9190612ca6565b6123179190612cc5565b61232490620f4240612ce7565b61232e9084612ca6565b9392505050565b6002600154036123575760405162461bcd60e51b815260040161037b90612c59565b6002600181905550610f1133600161240f565b600069d3c21bcecceda1000000601054836123859190612ca6565b610beb9190612cc5565b6000546001600160a01b031633146123b95760405162461bcd60e51b815260040161037b90612f6e565b60075481106123da5760405162461bcd60e51b815260040161037b90612fbd565b60068190556040518181527fc5cb188f6d81b52195bba0451a13b67d087d38fc7ecf64e4b06151b3734826fc90602001610da5565b6001600160a01b0382166000908152600a60205260408120549003612432575050565b600061243d83610db0565b6001600160a01b0384166000908152600a60205260409020600101549091506124659061236a565b6001600160a01b038416600090815260116020908152604080832093909355600a9052206003018054820190558115612769576040516370a0823160e01b81523060048201526000907318a3563c21062897950bb09339c82b9686a35667906370a0823190602401602060405180830381865afa1580156124ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250e9190613079565b60408051600280825260608201835292935060009290916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613092565b816000815181106125b4576125b4613063565b60200260200101906001600160a01b031690816001600160a01b0316815250507318a3563c21062897950bb09339c82b9686a35667816001815181106125fc576125fc613063565b6001600160a01b0392831660209182029290920101526002541663b6f9de95846000843061262c42612710612ce7565b6040518663ffffffff1660e01b815260040161264b94939291906130af565b6000604051808303818588803b15801561266457600080fd5b505af1158015612678573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093507318a3563c21062897950bb09339c82b9686a3566792506370a082319150602401602060405180830381865afa1580156126cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f39190613079565b90508281116127325760405162461bcd60e51b815260206004820152600b60248201526a139bc8149958d95a5d995960aa1b604482015260640161037b565b600061273e8483612f57565b905061275f7318a3563c21062897950bb09339c82b9686a3566788836128b3565b5061277592505050565b612775600084836128b3565b505050565b600081815260096020908152604080832060058101546004909101546001600160a01b03909116808552600a9093529083206002018054929391926127c190600190612f57565b815481106127d1576127d1613063565b60009182526020808320909101548083526009825260408084206004018690556001600160a01b0387168452600a9092529120600201805491925082918490811061281e5761281e613063565b60009182526020808320909101929092556001600160a01b0385168152600a9091526040902060020180548061285657612856613119565b600082815260208082208301600019908101839055909201909255948152600990945250506040822082815560018101839055600281018390556003810183905560048101929092555060050180546001600160a01b0319169055565b6001600160a01b0382166128c657505050565b60006001600160a01b038416156128e5576128e084612205565b6128e7565b475b9050808211156128f5578091505b816000036129035750505050565b6001600160a01b0384166129ba576000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461295e576040519150601f19603f3d011682016040523d82523d6000602084013e612963565b606091505b50509050806129b45760405162461bcd60e51b815260206004820152601760248201527f4661696c757265204f6e20457468205472616e73666572000000000000000000604482015260640161037b565b50612a79565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015612a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2d9190612f9b565b612a795760405162461bcd60e51b815260206004820152601960248201527f4661696c757265204f6e20546f6b656e205472616e7366657200000000000000604482015260640161037b565b50505050565b604051636eb1769f60e11b815233600482015230602482015260009082906001600160a01b0385169063dd62ed3e90604401602060405180830381865afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190613079565b1015612b395760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b604482015260640161037b565b6000612b4484612205565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303816000875af1158015612b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbe9190612f9b565b506000612bca85612205565b9050818111612c145760405162461bcd60e51b81526020600482015260166024820152754572726f72204f6e205472616e736665722046726f6d60501b604482015260640161037b565b612c1e8282612f57565b95945050505050565b508054600082559060005260206000209081019061140a91905b80821115612c555760008155600101612c41565b5090565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612cc057612cc0612c90565b500290565b600082612ce257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612cfa57612cfa612c90565b500190565b600060208083528351808285015260005b81811015612d2c57858101830151858201604001528201612d10565b81811115612d3e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461140a57600080fd5b60008060408385031215612d7c57600080fd5b8235612d8781612d54565b946020939093013593505050565b600060208284031215612da757600080fd5b5035919050565b600060208284031215612dc057600080fd5b813561232e81612d54565b600080600060608486031215612de057600080fd5b8335612deb81612d54565b92506020840135612dfb81612d54565b929592945050506040919091013590565b60008060408385031215612e1f57600080fd5b50508035926020909101359150565b600080600060608486031215612e4357600080fd5b8335612e4e81612d54565b95602085013595506040909401359392505050565b600081518084526020808501945080840160005b83811015612e9357815187529582019590820190600101612e77565b509495945050505050565b60208152600061232e6020830184612e63565b60a081526000612ec460a0830188612e63565b8281036020840152612ed68188612e63565b90508281036040840152612eea8187612e63565b90508281036060840152612efe8186612e63565b90508281036080840152612f128185612e63565b98975050505050505050565b60008060408385031215612f3157600080fd5b8235612f3c81612d54565b91506020830135612f4c81612d54565b809150509250929050565b600082821015612f6957612f69612c90565b500390565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600060208284031215612fad57600080fd5b8151801515811461232e57600080fd5b60208082526029908201527f4d696e204c6f636b2054696d652043616e6e6f7420457863656564204d6178206040820152684c6f636b2054696d6560b81b606082015260800190565b60208082526027908201527f4d6178204c6f636b2054696d65204d75737420457863656564204d696e204c6f604082015266636b2054696d6560c81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561308b57600080fd5b5051919050565b6000602082840312156130a457600080fd5b815161232e81612d54565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156130f95784516001600160a01b0316835293830193918301916001016130d4565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052603160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203eb7ffa3557b1592671092e92de12bdd48f946f8663b4d560610baf8acee363e64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106103545760003560e01c8063817b1cd2116101c6578063b99152d0116100f7578063e42c08f211610095578063f25c8e3f1161006f578063f25c8e3f14610af9578063f887ea4014610b0f578063fa27ba5f14610b2f578063fc0c546a14610b4f57600080fd5b8063e42c08f2146107a6578063e4918a5914610ac4578063e68af3ac14610ad957600080fd5b8063cb282f53116100d1578063cb282f5314610a56578063cbe1d80f14610a6b578063d308e10e14610a8b578063dd62ed3e14610aa157600080fd5b8063b99152d014610a00578063c0d7865514610a20578063c2e8caf614610a4057600080fd5b8063a60ff76611610164578063a9059cbb1161013e578063a9059cbb14610979578063ada74f3814610999578063b23f2942146109af578063b4385572146109cf57600080fd5b8063a60ff76614610923578063a6f9dae114610939578063a86d01d81461095957600080fd5b8063893d20e8116101a0578063893d20e81461087e57806395d89b411461089c5780639853a4d5146108ca578063a2bdedf41461090357600080fd5b8063817b1cd21461082857806382e5d1bc1461083e578063885a4cd01461085e57600080fd5b806331d7a262116102a057806358e9a8151161023e57806370a082311161021857806370a08231146107a657806376089a08146107dc578063787e7ece146107f25780637b0472f01461080857600080fd5b806358e9a815146106ca5780635b1a4c24146106ea5780635db623871461077957600080fd5b8063441a3e701161027a578063441a3e70146106475780634fa469b31461066757806350431ce41461069f57806352234150146106b457600080fd5b806331d7a262146105f2578063367e312414610612578063372500ab1461063257600080fd5b80631959a0021161030d57806327230702116102e7578063272307021461055b5780632a28d56b146105945780632d9d12f2146105b4578063313ce567146105d657600080fd5b80631959a002146104c45780631b934ce51461051b57806323b872dd1461053b57600080fd5b806303d17cd6146103dd57806306fdde0314610407578063095ea7b3146104495780630e15561a1461047957806313cc11581461048f57806318160ddd146104af57600080fd5b366103d8576002600154036103845760405162461bcd60e51b815260040161037b90612c59565b60405180910390fd5b6002600155600f805434019055600d54156103d157600d546103b03469d3c21bcecceda1000000612ca6565b6103ba9190612cc5565b601060008282546103cb9190612ce7565b90915550505b6001808055005b600080fd5b3480156103e957600080fd5b506103f4620f424081565b6040519081526020015b60405180910390f35b34801561041357600080fd5b5060408051808201909152601081526f45746865724e65787573205354414b4560801b60208201525b6040516103fe9190612cff565b34801561045557600080fd5b50610469610464366004612d69565b610b77565b60405190151581526020016103fe565b34801561048557600080fd5b506103f4600f5481565b34801561049b57600080fd5b506103f46104aa366004612d95565b610bd0565b3480156104bb57600080fd5b50600c546103f4565b3480156104d057600080fd5b506105006104df366004612dae565b600a6020526000908152604090208054600182015460039092015490919083565b604080519384526020840192909252908201526060016103fe565b34801561052757600080fd5b506103f4610536366004612d95565b610bf1565b34801561054757600080fd5b50610469610556366004612dcb565b610c2c565b34801561056757600080fd5b506103f4610576366004612dae565b6001600160a01b03166000908152600a602052604090206003015490565b3480156105a057600080fd5b506103f46105af366004612d95565b610c9c565b3480156105c057600080fd5b506105d46105cf366004612d95565b610cec565b005b3480156105e257600080fd5b50604051600981526020016103fe565b3480156105fe57600080fd5b506103f461060d366004612dae565b610db0565b34801561061e57600080fd5b506105d461062d366004612dae565b610e38565b34801561063e57600080fd5b506105d4610edf565b34801561065357600080fd5b506105d4610662366004612e0c565b610f17565b34801561067357600080fd5b50601254610687906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b3480156106ab57600080fd5b506105d4611348565b3480156106c057600080fd5b506103f460055481565b3480156106d657600080fd5b506105d46106e5366004612e2e565b61140d565b3480156106f657600080fd5b50610743610705366004612d95565b60096020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b031686565b60408051968752602087019590955293850192909252606084015260808301526001600160a01b031660a082015260c0016103fe565b34801561078557600080fd5b50610799610794366004612dae565b6117c2565b6040516103fe9190612e9e565b3480156107b257600080fd5b506103f46107c1366004612dae565b6001600160a01b03166000908152600a602052604090205490565b3480156107e857600080fd5b506103f460085481565b3480156107fe57600080fd5b506103f4600e5481565b34801561081457600080fd5b506105d4610823366004612e0c565b611831565b34801561083457600080fd5b506103f4600c5481565b34801561084a57600080fd5b506105d4610859366004612d95565b611b20565b34801561086a57600080fd5b506105d4610879366004612dae565b611ba0565b34801561088a57600080fd5b506000546001600160a01b0316610687565b3480156108a857600080fd5b5060408051808201909152600581526453454e585360d81b602082015261043c565b3480156108d657600080fd5b506103f46108e5366004612dae565b6001600160a01b03166000908152600a602052604090206002015490565b34801561090f57600080fd5b5061068761091e366004612d95565b611c44565b34801561092f57600080fd5b506103f460045481565b34801561094557600080fd5b506105d4610954366004612dae565b611c6e565b34801561096557600080fd5b506105d4610974366004612d95565b611cf3565b34801561098557600080fd5b50610469610994366004612d69565b611d73565b3480156109a557600080fd5b506103f460075481565b3480156109bb57600080fd5b506105d46109ca366004612d95565b611de2565b3480156109db57600080fd5b506109ef6109ea366004612dae565b611e62565b6040516103fe959493929190612eb1565b348015610a0c57600080fd5b506103f4610a1b366004612dae565b612205565b348015610a2c57600080fd5b506105d4610a3b366004612dae565b612270565b348015610a4c57600080fd5b506103f4600d5481565b348015610a6257600080fd5b506103f46122bc565b348015610a7757600080fd5b506103f4610a86366004612e0c565b6122d3565b348015610a9757600080fd5b506103f460035481565b348015610aad57600080fd5b506103f4610abc366004612f1e565b600092915050565b348015610ad057600080fd5b506105d4612335565b348015610ae557600080fd5b506103f4610af4366004612d95565b61236a565b348015610b0557600080fd5b506103f460065481565b348015610b1b57600080fd5b50600254610687906001600160a01b031681565b348015610b3b57600080fd5b506105d4610b4a366004612d95565b61238f565b348015610b5b57600080fd5b506106877318a3563c21062897950bb09339c82b9686a3566781565b6000826001600160a01b0316336001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256000604051610bbf91815260200190565b60405180910390a350600192915050565b600081815260096020526040812060020154610beb90610c9c565b92915050565b600081815260096020526040812060010154421015610abc57600082815260096020526040902060010154610c27904290612f57565b610beb565b6000600260015403610c505760405162461bcd60e51b815260040161037b90612c59565b6002600155610c6033600061240f565b604051600081526001600160a01b0384169033906000805160206131308339815191529060200160405180910390a35060018080559392505050565b6000600454600354610cae9190612f57565b600654600754610cbe9190612f57565b600454610ccb9085612f57565b610cd59190612ca6565b610cdf9190612cc5565b600654610beb9190612ce7565b6000546001600160a01b03163314610d165760405162461bcd60e51b815260040161037b90612f6e565b620f4240811015610d745760405162461bcd60e51b815260206004820152602260248201527f4d6178204c6f636b2054696d65204d756c7469706c69657220546f6f20536d616044820152611b1b60f21b606482015260840161037b565b60058190556040518181527f9267f2be7ed7272cd77e981676bf18ceb15dbc58c990454917ef92bf85a739c1906020015b60405180910390a150565b6001600160a01b0381166000908152600a60205260408120548103610dd757506000919050565b6001600160a01b0382166000908152600a6020526040812060010154610dfc9061236a565b6001600160a01b038416600090815260116020526040902054909150808211610e26576000610e30565b610e308183612f57565b949350505050565b6000546001600160a01b03163314610e625760405162461bcd60e51b815260040161037b90612f6e565b6001600160a01b03811615801590610e8357506012546001600160a01b0316155b610ebd5760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e4814d95d60aa1b604482015260640161037b565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600260015403610f015760405162461bcd60e51b815260040161037b90612c59565b6002600155610f1133600061240f565b60018055565b600260015403610f395760405162461bcd60e51b815260040161037b90612c59565b60026001556000828152600960205260409020546008543391908410610f925760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908131bd8dad25160921b604482015260640161037b565b6000848152600960205260409020600501546001600160a01b03838116911614610ff45760405162461bcd60e51b8152602060048201526013602482015272139bdd0813dddb995c8813d988131bd8dad251606a1b604482015260640161037b565b6000811180156110045750600083115b6110465760405162461bcd60e51b8152602060048201526013602482015272125b9cdd59999a58da595b9d08105b5bdd5b9d606a1b604482015260640161037b565b6001600160a01b0382166000908152600a60205260409020541561106f5761106f82600061240f565b8083111561107b578092505b82600c600082825461108d9190612f57565b90915550506001600160a01b0382166000908152600a6020526040812080548592906110ba908490612f57565b90915550600090506110cb85610bf1565b156110fb57670de0b6b3a76400006110e286610bd0565b6110ec9086612ca6565b6110f69190612cc5565b6110fe565b60005b9050818403611171576000858152600960209081526040808320600301546001600160a01b0387168452600a9092528220600101805491928392611143908490612f57565b9250508190555080600d600082825461115c9190612f57565b9091555061116b90508661277a565b50611232565b600085815260096020526040812060030154839061118f9087612ca6565b6111999190612cc5565b6001600160a01b0385166000908152600a60205260408120600101805492935083929091906111c9908490612f57565b9250508190555080600d60008282546111e29190612f57565b909155505060008681526009602052604081208054879290611205908490612f57565b90915550506000868152600960205260408120600301805483929061122b908490612f57565b9091555050505b6001600160a01b0383166000908152600a60205260409020600101546112579061236a565b6001600160a01b038416600090815260116020908152604080832093909355600a90529081205490036112bf576001600160a01b0383166000908152600a6020526040812081815560018101829055906112b46002830182612c27565b600382016000905550505b80156112e6576112e67318a3563c21062897950bb09339c82b9686a3566761dead836128b3565b61130e7318a3563c21062897950bb09339c82b9686a35667846113098488612f57565b6128b3565b6040518481526000906001600160a01b038516906000805160206131308339815191529060200160405180910390a3505060018055505050565b6000546001600160a01b031633146113725760405162461bcd60e51b815260040161037b90612f6e565b604051600090339047908381818185875af1925050503d80600081146113b4576040519150601f19603f3d011682016040523d82523d6000602084013e6113b9565b606091505b505090508061140a5760405162461bcd60e51b815260206004820152601a60248201527f4661696c75726520546f205769746864726177204e6174697665000000000000604482015260640161037b565b50565b60026001540361142f5760405162461bcd60e51b815260040161037b90612c59565b60026001556000546001600160a01b0316331461145e5760405162461bcd60e51b815260040161037b90612f6e565b6000821161149c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b604482015260640161037b565b6001600160a01b0383166114e15760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b604482015260640161037b565b60035481111561152f5760405162461bcd60e51b81526020600482015260196024820152784c6f636b2054696d652045786365656473204d6178696d756d60381b604482015260640161037b565b6004548110156115815760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b2054696d65205072656365656473204d696e696d756d000000000000604482015260640161037b565b6001600160a01b0383166000908152600a6020526040902054156115aa576115aa83600061240f565b60006115ca7318a3563c21062897950bb09339c82b9686a3566784612a7f565b905060006115d882846122d3565b6001600160a01b0386166000908152600a6020526040902060018101805483018155600d805484019055600c805486019055815485019091555490915061161e9061236a565b6001600160a01b03861660009081526011602090815260409182902092909255805160c081019091528381529081016116578542612ce7565b8152602080820186905260408083018590526001600160a01b038981166000818152600a808652848220600290810180546060808b01919091526080998a0186905260088054865260098a528886208c5181558c8b01516001808301919091558d8b015195820195909555918c01516003830155998b0151600482015560a0909a01516005909a0180546001600160a01b0319169a909616999099179094558552855487548085018955978252858220909701969096558454909101909355600e80548801905551858152919291600080516020613130833981519152910160405180910390a36012546040516340c10f1960e01b81526001600160a01b03878116600483015260248201849052909116906340c10f19906044015b6020604051808303816000875af1158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b69190612f9b565b50506001805550505050565b6001600160a01b0381166000908152600a602090815260409182902060020180548351818402810184019094528084526060939283018282801561182557602002820191906000526020600020905b815481526020019060010190808311611811575b50505050509050919050565b6002600154036118535760405162461bcd60e51b815260040161037b90612c59565b6002600155816118935760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8105b5bdd5b9d60aa1b604482015260640161037b565b6003548111156118e15760405162461bcd60e51b81526020600482015260196024820152784c6f636b2054696d652045786365656473204d6178696d756d60381b604482015260640161037b565b6004548110156119335760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b2054696d65205072656365656473204d696e696d756d000000000000604482015260640161037b565b336000818152600a6020526040902054156119535761195381600061240f565b60006119737318a3563c21062897950bb09339c82b9686a3566785612a7f565b9050600061198182856122d3565b6001600160a01b0384166000908152600a6020526040902060018101805483018155600d805484019055600c80548601905581548501909155549091506119c79061236a565b6001600160a01b03841660009081526011602090815260409182902092909255805160c08101909152838152908101611a008642612ce7565b8152602080820187905260408083018590526001600160a01b038781166000818152600a808652848220600290810180546060808b01919091526080998a0186905260088054865260098a528886208c5181558c8b01516001808301919091558d8b015195820195909555918c01516003830155998b0151600482015560a0909a01516005909a0180546001600160a01b0319169a909616999099179094558552855487548085018955978252858220909701969096558454909101909355600e80548901905551858152919291600080516020613130833981519152910160405180910390a36012546040516340c10f1960e01b81526001600160a01b03858116600483015260248201849052909116906340c10f1990604401611773565b6000546001600160a01b03163314611b4a5760405162461bcd60e51b815260040161037b90612f6e565b6003548110611b6b5760405162461bcd60e51b815260040161037b90612fbd565b60048190556040518181527f6d75d7fa343cd4abb03ab6e4e818fa3d3189ea95066365738b5bcfbcdd6d189490602001610da5565b6000546001600160a01b03163314611bca5760405162461bcd60e51b815260040161037b90612f6e565b6001600160a01b0381167318a3563c21062897950bb09339c82b9686a3566703611c365760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74205769746864726177205374616b656420546f6b656e00000000604482015260640161037b565b61140a813361130984612205565b600b8181548110611c5457600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611c985760405162461bcd60e51b815260040161037b90612f6e565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d1d5760405162461bcd60e51b815260040161037b90612f6e565b6004548111611d3e5760405162461bcd60e51b815260040161037b90613006565b60038190556040518181527f64a2c86a826b521169cbfba8217846317cc369b740aed5adaa78856897a4b2c290602001610da5565b6000600260015403611d975760405162461bcd60e51b815260040161037b90612c59565b6002600155611da733600061240f565b604051600081526001600160a01b0384169033906000805160206131308339815191529060200160405180910390a350600180805592915050565b6000546001600160a01b03163314611e0c5760405162461bcd60e51b815260040161037b90612f6e565b6006548111611e2d5760405162461bcd60e51b815260040161037b90613006565b60078190556040518181527f1ee1104b41ddbd4e3017d672df41257849a4f5fc9e6c9df6156a9979e7953c9490602001610da5565b6001600160a01b0381166000908152600a602052604081206002015460609182918291829182918167ffffffffffffffff811115611ea257611ea261304d565b604051908082528060200260200182016040528015611ecb578160200160208202803683370190505b50905060008267ffffffffffffffff811115611ee957611ee961304d565b604051908082528060200260200182016040528015611f12578160200160208202803683370190505b50905060008367ffffffffffffffff811115611f3057611f3061304d565b604051908082528060200260200182016040528015611f59578160200160208202803683370190505b50905060008467ffffffffffffffff811115611f7757611f7761304d565b604051908082528060200260200182016040528015611fa0578160200160208202803683370190505b50905060005b8581101561216e576001600160a01b038c166000908152600a602052604081206002018054600992919084908110611fe057611fe0613063565b906000526020600020015481526020019081526020016000206000015485828151811061200f5761200f613063565b60200260200101818152505060096000600a60008f6001600160a01b03166001600160a01b03168152602001908152602001600020600201838154811061205857612058613063565b906000526020600020015481526020019081526020016000206002015484828151811061208757612087613063565b6020026020010181815250506120df600a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060020182815481106120cf576120cf613063565b9060005260206000200154610bf1565b8382815181106120f1576120f1613063565b602002602001018181525050612149600a60008e6001600160a01b03166001600160a01b03168152602001908152602001600020600201828154811061213957612139613063565b9060005260206000200154610bd0565b82828151811061215b5761215b613063565b6020908102919091010152600101611fa6565b50600a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060020184848484848054806020026020016040519081016040528092919081815260200182805480156121e657602002820191906000526020600020905b8154815260200190600101908083116121d2575b5050505050945099509950995099509950505050505091939590929450565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561224c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190613079565b6000546001600160a01b0316331461229a5760405162461bcd60e51b815260040161037b90612f6e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600854600e546122ce9190612cc5565b905090565b60006004546003546122e59190612f57565b620f42406005546122f69190612f57565b6004546123039085612f57565b61230d9190612ca6565b6123179190612cc5565b61232490620f4240612ce7565b61232e9084612ca6565b9392505050565b6002600154036123575760405162461bcd60e51b815260040161037b90612c59565b6002600181905550610f1133600161240f565b600069d3c21bcecceda1000000601054836123859190612ca6565b610beb9190612cc5565b6000546001600160a01b031633146123b95760405162461bcd60e51b815260040161037b90612f6e565b60075481106123da5760405162461bcd60e51b815260040161037b90612fbd565b60068190556040518181527fc5cb188f6d81b52195bba0451a13b67d087d38fc7ecf64e4b06151b3734826fc90602001610da5565b6001600160a01b0382166000908152600a60205260408120549003612432575050565b600061243d83610db0565b6001600160a01b0384166000908152600a60205260409020600101549091506124659061236a565b6001600160a01b038416600090815260116020908152604080832093909355600a9052206003018054820190558115612769576040516370a0823160e01b81523060048201526000907318a3563c21062897950bb09339c82b9686a35667906370a0823190602401602060405180830381865afa1580156124ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250e9190613079565b60408051600280825260608201835292935060009290916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613092565b816000815181106125b4576125b4613063565b60200260200101906001600160a01b031690816001600160a01b0316815250507318a3563c21062897950bb09339c82b9686a35667816001815181106125fc576125fc613063565b6001600160a01b0392831660209182029290920101526002541663b6f9de95846000843061262c42612710612ce7565b6040518663ffffffff1660e01b815260040161264b94939291906130af565b6000604051808303818588803b15801561266457600080fd5b505af1158015612678573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093507318a3563c21062897950bb09339c82b9686a3566792506370a082319150602401602060405180830381865afa1580156126cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f39190613079565b90508281116127325760405162461bcd60e51b815260206004820152600b60248201526a139bc8149958d95a5d995960aa1b604482015260640161037b565b600061273e8483612f57565b905061275f7318a3563c21062897950bb09339c82b9686a3566788836128b3565b5061277592505050565b612775600084836128b3565b505050565b600081815260096020908152604080832060058101546004909101546001600160a01b03909116808552600a9093529083206002018054929391926127c190600190612f57565b815481106127d1576127d1613063565b60009182526020808320909101548083526009825260408084206004018690556001600160a01b0387168452600a9092529120600201805491925082918490811061281e5761281e613063565b60009182526020808320909101929092556001600160a01b0385168152600a9091526040902060020180548061285657612856613119565b600082815260208082208301600019908101839055909201909255948152600990945250506040822082815560018101839055600281018390556003810183905560048101929092555060050180546001600160a01b0319169055565b6001600160a01b0382166128c657505050565b60006001600160a01b038416156128e5576128e084612205565b6128e7565b475b9050808211156128f5578091505b816000036129035750505050565b6001600160a01b0384166129ba576000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461295e576040519150601f19603f3d011682016040523d82523d6000602084013e612963565b606091505b50509050806129b45760405162461bcd60e51b815260206004820152601760248201527f4661696c757265204f6e20457468205472616e73666572000000000000000000604482015260640161037b565b50612a79565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015612a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2d9190612f9b565b612a795760405162461bcd60e51b815260206004820152601960248201527f4661696c757265204f6e20546f6b656e205472616e7366657200000000000000604482015260640161037b565b50505050565b604051636eb1769f60e11b815233600482015230602482015260009082906001600160a01b0385169063dd62ed3e90604401602060405180830381865afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190613079565b1015612b395760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b604482015260640161037b565b6000612b4484612205565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303816000875af1158015612b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbe9190612f9b565b506000612bca85612205565b9050818111612c145760405162461bcd60e51b81526020600482015260166024820152754572726f72204f6e205472616e736665722046726f6d60501b604482015260640161037b565b612c1e8282612f57565b95945050505050565b508054600082559060005260206000209081019061140a91905b80821115612c555760008155600101612c41565b5090565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612cc057612cc0612c90565b500290565b600082612ce257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612cfa57612cfa612c90565b500190565b600060208083528351808285015260005b81811015612d2c57858101830151858201604001528201612d10565b81811115612d3e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461140a57600080fd5b60008060408385031215612d7c57600080fd5b8235612d8781612d54565b946020939093013593505050565b600060208284031215612da757600080fd5b5035919050565b600060208284031215612dc057600080fd5b813561232e81612d54565b600080600060608486031215612de057600080fd5b8335612deb81612d54565b92506020840135612dfb81612d54565b929592945050506040919091013590565b60008060408385031215612e1f57600080fd5b50508035926020909101359150565b600080600060608486031215612e4357600080fd5b8335612e4e81612d54565b95602085013595506040909401359392505050565b600081518084526020808501945080840160005b83811015612e9357815187529582019590820190600101612e77565b509495945050505050565b60208152600061232e6020830184612e63565b60a081526000612ec460a0830188612e63565b8281036020840152612ed68188612e63565b90508281036040840152612eea8187612e63565b90508281036060840152612efe8186612e63565b90508281036080840152612f128185612e63565b98975050505050505050565b60008060408385031215612f3157600080fd5b8235612f3c81612d54565b91506020830135612f4c81612d54565b809150509250929050565b600082821015612f6957612f69612c90565b500390565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600060208284031215612fad57600080fd5b8151801515811461232e57600080fd5b60208082526029908201527f4d696e204c6f636b2054696d652043616e6e6f7420457863656564204d6178206040820152684c6f636b2054696d6560b81b606082015260800190565b60208082526027908201527f4d6178204c6f636b2054696d65204d75737420457863656564204d696e204c6f604082015266636b2054696d6560c81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561308b57600080fd5b5051919050565b6000602082840312156130a457600080fd5b815161232e81612d54565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156130f95784516001600160a01b0316835293830193918301916001016130d4565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052603160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203eb7ffa3557b1592671092e92de12bdd48f946f8663b4d560610baf8acee363e64736f6c634300080e0033
Deployed Bytecode Sourcemap
317:24384:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;;;;;;;;;179:1;382:7;:18;16905:12:4::1;:25:::0;;16921:9:::1;16905:25;::::0;;16957:17:::1;::::0;:21;16953:118:::1;;17043:17;::::0;17017:21:::1;17029:9;629:6;17017:21;:::i;:::-;17015:45;;;;:::i;:::-;16994:17;;:66;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16953:118:4::1;136:1:3::0;421:22;;;;317:24384:4;;;;641:53;;;;;;;;;;;;689:5;641:53;;;;;1180:25:5;;;1168:2;1153:18;641:53:4;;;;;;;;3364:90;;;;;;;;;;-1:-1:-1;3442:5:4;;;;;;;;;;;;-1:-1:-1;;;3442:5:4;;;;3364:90;;;;;;;:::i;3784:149::-;;;;;;;;;;-1:-1:-1;3784:149:4;;;;;:::i;:::-;;:::i;:::-;;;2439:14:5;;2432:22;2414:41;;2402:2;2387:18;3784:149:4;2274:187:5;2209:27:4;;;;;;;;;;;;;;;;21186:141;;;;;;;;;;-1:-1:-1;21186:141:4;;;;;:::i;:::-;;:::i;2816:99::-;;;;;;;;;;-1:-1:-1;2897:11:4;;2816:99;;1889:44;;;;;;;;;;-1:-1:-1;1889:44:4;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3105:25:5;;;3161:2;3146:18;;3139:34;;;;3189:18;;;3182:34;3093:2;3078:18;1889:44:4;2903:319:5;22296:237:4;;;;;;;;;;-1:-1:-1;22296:237:4;;;;;:::i;:::-;;:::i;4249:253::-;;;;;;;;;;-1:-1:-1;4249:253:4;;;;;:::i;:::-;;:::i;23493:171::-;;;;;;;;;;-1:-1:-1;23493:171:4;;;;;:::i;:::-;-1:-1:-1;;;;;23623:14:4;23593:7;23623:14;;;:8;:14;;;;;:34;;;;23493:171;21988:302;;;;;;;;;;-1:-1:-1;21988:302:4;;;;;:::i;:::-;;:::i;7352:377::-;;;;;;;;;;-1:-1:-1;7352:377:4;;;;;:::i;:::-;;:::i;:::-;;3618:90;;;;;;;;;;-1:-1:-1;3618:90:4;;567:1;3830:36:5;;3818:2;3803:18;3618:90:4;3688:184:5;22539:493:4;;;;;;;;;;-1:-1:-1;22539:493:4;;;;;:::i;:::-;;:::i;4725:229::-;;;;;;;;;;-1:-1:-1;4725:229:4;;;;;:::i;:::-;;:::i;11128:94::-;;;;;;;;;;;;;:::i;14179:2552::-;;;;;;;;;;-1:-1:-1;14179:2552:4;;;;;:::i;:::-;;:::i;2364:24::-;;;;;;;;;;-1:-1:-1;2364:24:4;;;;-1:-1:-1;;;;;2364:24:4;;;;;;-1:-1:-1;;;;;4313:32:5;;;4295:51;;4283:2;4268:18;2364:24:4;4130:222:5;8328:183:4;;;;;;;;;;;;;:::i;1121:70::-;;;;;;;;;;;;;;;;8956:1936;;;;;;;;;;-1:-1:-1;8956:1936:4;;;;;:::i;:::-;;:::i;1636:44::-;;;;;;;;;;-1:-1:-1;1636:44:4;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1636:44:4;;;;;;;5032:25:5;;;5088:2;5073:18;;5066:34;;;;5116:18;;;5109:34;;;;5174:2;5159:18;;5152:34;5217:3;5202:19;;5195:35;-1:-1:-1;;;;;5267:32:5;5287:3;5246:19;;5239:61;5019:3;5004:19;1636:44:4;4745:561:5;23160:159:4;;;;;;;;;;-1:-1:-1;23160:159:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2980:134::-;;;;;;;;;;-1:-1:-1;2980:134:4;;;;;:::i;:::-;-1:-1:-1;;;;;3072:17:4;3046:7;3072:17;;;:8;:17;;;;;:35;;2980:134;1576:28;;;;;;;;;;;;;;;;2144:30;;;;;;;;;;;;;;;;11856:1915;;;;;;;;;;-1:-1:-1;11856:1915:4;;;;;:::i;:::-;;:::i;2047:26::-;;;;;;;;;;;;;;;;5300:283;;;;;;;;;;-1:-1:-1;5300:283:4;;;;;:::i;:::-;;:::i;8049:197::-;;;;;;;;;;-1:-1:-1;8049:197:4;;;;;:::i;:::-;;:::i;1391:81:2:-;;;;;;;;;;-1:-1:-1;1434:7:2;1460:5;-1:-1:-1;;;;;1460:5:2;1391:81;;3491:94:4;;;;;;;;;;-1:-1:-1;3571:7:4;;;;;;;;;;;;-1:-1:-1;;;3571:7:4;;;;3491:94;;23325:162;;;;;;;;;;-1:-1:-1;23325:162:4;;;;;:::i;:::-;-1:-1:-1;;;;;23451:14:4;23421:7;23451:14;;;:8;:14;;;;;:22;;:29;;23325:162;1991:25;;;;;;;;;;-1:-1:-1;1991:25:4;;;;;:::i;:::-;;:::i;1080:35::-;;;;;;;;;;;;;;;;1174:129:2;;;;;;;;;;-1:-1:-1;1174:129:2;;;;;:::i;:::-;;:::i;5758:281:4:-;;;;;;;;;;-1:-1:-1;5758:281:4;;;;;:::i;:::-;;:::i;3968:246::-;;;;;;;;;;-1:-1:-1;3968:246:4;;;;;:::i;:::-;;:::i;1285:40::-;;;;;;;;;;;;;;;;6712:311;;;;;;;;;;-1:-1:-1;6712:311:4;;;;;:::i;:::-;;:::i;23670:1029::-;;;;;;;;;;-1:-1:-1;23670:1029:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;21333:133::-;;;;;;;;;;-1:-1:-1;21333:133:4;;;;;:::i;:::-;;:::i;5016:112::-;;;;;;;;;;-1:-1:-1;5016:112:4;;;;;:::i;:::-;;:::i;2079:32::-;;;;;;;;;;;;;;;;23038:116;;;;;;;;;;;;;:::i;21604:378::-;;;;;;;;;;-1:-1:-1;21604:378:4;;;;;:::i;:::-;;:::i;1037:37::-;;;;;;;;;;;;;;;;3197:139;;;;;;;;;;-1:-1:-1;3197:139:4;;;;;:::i;:::-;22461:1;22377:149;22296:237;-1:-1:-1;;22296:237:4;11312:99;;;;;;;;;;;;;:::i;21038:142::-;;;;;;;;;;-1:-1:-1;21038:142:4;;;;;:::i;:::-;;:::i;1240:39::-;;;;;;;;;;;;;;;;898:97;;;;;;;;;;-1:-1:-1;898:97:4;;;;-1:-1:-1;;;;;898:97:4;;;6219:313;;;;;;;;;;-1:-1:-1;6219:313:4;;;;;:::i;:::-;;:::i;787:74::-;;;;;;;;;;;;819:42;787:74;;3784:149;3852:4;3894:7;-1:-1:-1;;;;;3873:32:4;3882:10;-1:-1:-1;;;;;3873:32:4;;3903:1;3873:32;;;;1180:25:5;;1168:2;1153:18;;1034:177;3873:32:4;;;;;;;;-1:-1:-1;3922:4:4;3784:149;;;;:::o;21186:141::-;21241:7;21290:16;;;:8;:16;;;;;:29;;;21267:53;;:22;:53::i;:::-;21260:60;21186:141;-1:-1:-1;;21186:141:4:o;22296:237::-;22358:7;22396:16;;;:8;:16;;;;;:27;;;22427:15;-1:-1:-1;22396:46:4;:130;;22481:16;;;;:8;:16;;;;;:27;;;:45;;22511:15;;22481:45;:::i;:::-;22396:130;;4249:253;4378:4;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;4394:31:4::1;4407:10;4419:5;4394:12;:31::i;:::-;4440:34;::::0;4472:1:::1;1180:25:5::0;;-1:-1:-1;;;;;4440:34:4;::::1;::::0;4449:10:::1;::::0;-1:-1:-1;;;;;;;;;;;4440:34:4;1168:2:5;1153:18;4440:34:4::1;;;;;;;-1:-1:-1::0;4491:4:4::1;136:1:3::0;421:22;;4249:253:4;;-1:-1:-1;;;4249:253:4:o;21988:302::-;22083:7;22270:11;;22256;;:25;;;;:::i;:::-;22219:11;;22205;;:25;;;;:::i;:::-;22169:11;;22158:22;;:8;:22;:::i;:::-;22157:74;;;;:::i;:::-;22156:126;;;;:::i;:::-;22125:11;;:158;;;;:::i;7352:377::-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;689:5:4::1;7490:24;:49;;7469:130;;;::::0;-1:-1:-1;;;7469:130:4;;8807:2:5;7469:130:4::1;::::0;::::1;8789:21:5::0;8846:2;8826:18;;;8819:30;8885:34;8865:18;;;8858:62;-1:-1:-1;;;8936:18:5;;;8929:32;8978:19;;7469:130:4::1;8605:398:5::0;7469:130:4::1;7609:21;:48:::0;;;7672:50:::1;::::0;1180:25:5;;;7672:50:4::1;::::0;1168:2:5;1153:18;7672:50:4::1;;;;;;;;7352:377:::0;:::o;22539:493::-;-1:-1:-1;;;;;22649:14:4;;22622:7;22649:14;;;:8;:14;;;;;:32;:37;;22645:76;;-1:-1:-1;22709:1:4;;22539:493;-1:-1:-1;22539:493:4:o;22645:76::-;-1:-1:-1;;;;;22785:14:4;;22731:28;22785:14;;;:8;:14;;;;;:27;;;22762:51;;:22;:51::i;:::-;-1:-1:-1;;;;;22853:19:4;;22823:27;22853:19;;;:13;:19;;;;;;22731:82;;-1:-1:-1;22902:42:4;;;:123;;23024:1;22902:123;;;22963:42;22986:19;22963:20;:42;:::i;:::-;22883:142;22539:493;-1:-1:-1;;;;22539:493:4:o;4725:229::-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;4809:20:4;::::1;::::0;;::::1;::::0;:64:::1;;-1:-1:-1::0;4853:5:4::1;::::0;-1:-1:-1;;;;;4853:5:4::1;4845:28:::0;4809:64:::1;4788:122;;;::::0;-1:-1:-1;;;4788:122:4;;9210:2:5;4788:122:4::1;::::0;::::1;9192:21:5::0;9249:2;9229:18;;;9222:30;-1:-1:-1;;;9268:18:5;;;9261:41;9319:18;;4788:122:4::1;9008:335:5::0;4788:122:4::1;4920:5;:27:::0;;-1:-1:-1;;;;;;4920:27:4::1;-1:-1:-1::0;;;;;4920:27:4;;;::::1;::::0;;;::::1;::::0;;4725:229::o;11128:94::-;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;11184:31:4::1;11197:10;11209:5;11184:12;:31::i;:::-;136:1:3::0;421:22;;11128:94:4:o;14179:2552::-;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;14293:12:4::1;14351:16:::0;;;:8:::1;:16;::::0;;;;:27;14447:13:::1;::::0;14308:10:::1;::::0;14351:27;14438:22;::::1;14430:49;;;::::0;-1:-1:-1;;;14430:49:4;;9550:2:5;14430:49:4::1;::::0;::::1;9532:21:5::0;9589:2;9569:18;;;9562:30;-1:-1:-1;;;9608:18:5;;;9601:44;9662:18;;14430:49:4::1;9348:338:5::0;14430:49:4::1;14497:16;::::0;;;:8:::1;:16;::::0;;;;:23:::1;;::::0;-1:-1:-1;;;;;14497:31:4;;::::1;:23:::0;::::1;:31;14489:63;;;::::0;-1:-1:-1;;;14489:63:4;;9893:2:5;14489:63:4::1;::::0;::::1;9875:21:5::0;9932:2;9912:18;;;9905:30;-1:-1:-1;;;9951:18:5;;;9944:49;10010:18;;14489:63:4::1;9691:343:5::0;14489:63:4::1;14585:1;14570:12;:16;:30;;;;;14599:1;14590:6;:10;14570:30;14562:62;;;::::0;-1:-1:-1;;;14562:62:4;;10241:2:5;14562:62:4::1;::::0;::::1;10223:21:5::0;10280:2;10260:18;;;10253:30;-1:-1:-1;;;10299:18:5;;;10292:49;10358:18;;14562:62:4::1;10039:343:5::0;14562:62:4::1;-1:-1:-1::0;;;;;14672:14:4;::::1;14707:1;14672:14:::0;;;:8:::1;:14;::::0;;;;:32;:36;14668:92:::1;;14724:25;14737:4;14743:5;14724:12;:25::i;:::-;14846:12;14837:6;:21;14833:73;;;14883:12;14874:21;;14833:73;14963:6;14948:11;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;14979:14:4;::::1;;::::0;;;:8:::1;:14;::::0;;;;:42;;15015:6;;14979:14;:42:::1;::::0;15015:6;;14979:42:::1;:::i;:::-;::::0;;;-1:-1:-1;15078:13:4::1;::::0;-1:-1:-1;15094:23:4::1;15110:6:::0;15094:15:::1;:23::i;:::-;:28:::0;:72:::1;;15160:6;15138:19;15150:6;15138:11;:19::i;:::-;15129:28;::::0;:6;:28:::1;:::i;:::-;:37;;;;:::i;:::-;15094:72;;;15125:1;15094:72;15078:88;;15245:12;15235:6;:22:::0;15231:907:::1;;15318:28;15349:16:::0;;;:8:::1;:16;::::0;;;;;;;:37:::1;;::::0;-1:-1:-1;;;;;15400:14:4;::::1;::::0;;:8:::1;:14:::0;;;;;:27:::1;;:51:::0;;15349:37;;;;15400:51:::1;::::0;15349:37;;15400:51:::1;:::i;:::-;;;;;;;;15486:20;15465:17;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;15559:19:4::1;::::0;-1:-1:-1;15571:6:4;15559:11:::1;:19::i;:::-;15259:330;15231:907;;;15686:28;15743:16:::0;;;:8:::1;:16;::::0;;;;:37:::1;;::::0;15784:12;;15718:62:::1;::::0;:6;:62:::1;:::i;:::-;15717:79;;;;:::i;:::-;-1:-1:-1::0;;;;;15862:14:4;::::1;;::::0;;;:8:::1;:14;::::0;;;;:27:::1;;:51:::0;;15686:110;;-1:-1:-1;15686:110:4;;15862:27;;:14;:51:::1;::::0;15686:110;;15862:51:::1;:::i;:::-;;;;;;;;15948:20;15927:17;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16015:16:4::1;::::0;;;:8:::1;:16;::::0;;;;:37;;16046:6;;16015:16;:37:::1;::::0;16046:6;;16015:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;16066:16:4::1;::::0;;;:8:::1;:16;::::0;;;;:37:::1;;:61:::0;;16107:20;;16066:16;:61:::1;::::0;16107:20;;16066:61:::1;:::i;:::-;::::0;;;-1:-1:-1;;;15231:907:4::1;-1:-1:-1::0;;;;;16245:14:4;::::1;;::::0;;;:8:::1;:14;::::0;;;;:27:::1;;::::0;16222:51:::1;::::0;:22:::1;:51::i;:::-;-1:-1:-1::0;;;;;16200:19:4;::::1;;::::0;;;:13:::1;:19;::::0;;;;;;;:73;;;;16344:8:::1;:14:::0;;;;;:32;:37;;16340:89:::1;;-1:-1:-1::0;;;;;16404:14:4;::::1;;::::0;;;:8:::1;:14;::::0;;;;16397:21;;;::::1;::::0;::::1;::::0;;;16404:14;16397:21:::1;;::::0;::::1;16404:14:::0;16397:21:::1;:::i;:::-;;;;;;;;;16340:89;16483:12:::0;;16479:78:::1;;16511:35;819:42;739;16537:8;16511:5;:35::i;:::-;16606:37;819:42;16619:4:::0;16625:17:::1;16634:8:::0;16625:6;:17:::1;:::i;:::-;16606:5;:37::i;:::-;16690:34;::::0;1180:25:5;;;16713:1:4::1;::::0;-1:-1:-1;;;;;16690:34:4;::::1;::::0;-1:-1:-1;;;;;;;;;;;16690:34:4;1168:2:5;1153:18;16690:34:4::1;;;;;;;-1:-1:-1::0;;136:1:3;421:22;;-1:-1:-1;;;14179:2552:4:o;8328:183::-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;8396:58:4::1;::::0;8384:6:::1;::::0;8404:10:::1;::::0;8428:21:::1;::::0;8384:6;8396:58;8384:6;8396:58;8428:21;8404:10;8396:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8383:71;;;8472:1;8464:40;;;::::0;-1:-1:-1;;;8464:40:4;;10799:2:5;8464:40:4::1;::::0;::::1;10781:21:5::0;10838:2;10818:18;;;10811:30;10877:28;10857:18;;;10850:56;10923:18;;8464:40:4::1;10597:350:5::0;8464:40:4::1;8373:138;8328:183::o:0;8956:1936::-;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;797:5:2::1;::::0;-1:-1:-1;;;;;797:5:2::1;783:10;:19;775:51;;;;-1:-1:-1::0;;;775:51:2::1;;;;;;;:::i;:::-;9081:1:4::2;9072:6;:10;9064:34;;;::::0;-1:-1:-1;;;9064:34:4;;11154:2:5;9064:34:4::2;::::0;::::2;11136:21:5::0;11193:2;11173:18;;;11166:30;-1:-1:-1;;;11212:18:5;;;11205:41;11263:18;;9064:34:4::2;10952:335:5::0;9064:34:4::2;-1:-1:-1::0;;;;;9116:18:4;::::2;9108:43;;;::::0;-1:-1:-1;;;9108:43:4;;11494:2:5;9108:43:4::2;::::0;::::2;11476:21:5::0;11533:2;11513:18;;;11506:30;-1:-1:-1;;;11552:18:5;;;11545:42;11604:18;;9108:43:4::2;11292:336:5::0;9108:43:4::2;9181:11;;9169:8;:23;;9161:61;;;::::0;-1:-1:-1;;;9161:61:4;;11835:2:5;9161:61:4::2;::::0;::::2;11817:21:5::0;11874:2;11854:18;;;11847:30;-1:-1:-1;;;11893:18:5;;;11886:55;11958:18;;9161:61:4::2;11633:349:5::0;9161:61:4::2;9252:11;;9240:8;:23;;9232:62;;;::::0;-1:-1:-1;;;9232:62:4;;12189:2:5;9232:62:4::2;::::0;::::2;12171:21:5::0;12228:2;12208:18;;;12201:30;12267:28;12247:18;;;12240:56;12313:18;;9232:62:4::2;11987:350:5::0;9232:62:4::2;-1:-1:-1::0;;;;;9345:14:4;::::2;9380:1;9345:14:::0;;;:8:::2;:14;::::0;;;;:32;:36;9341:92:::2;;9397:25;9410:4;9416:5;9397:12;:25::i;:::-;9473:16;9492:26;819:42;9511:6;9492:11;:26::i;:::-;9473:45;;9564:18;9585:41;9607:8;9617;9585:21;:41::i;:::-;-1:-1:-1::0;;;;;9702:14:4;::::2;;::::0;;;:8:::2;:14;::::0;;;;:27:::2;::::0;::::2;:41:::0;;;::::2;::::0;;9757:17:::2;:31:::0;;;::::2;::::0;;9863:11:::2;:23:::0;;;::::2;::::0;;9900:44;;;::::2;::::0;;;10062:27;9564:62;;-1:-1:-1;10039:51:4::2;::::0;:22:::2;:51::i;:::-;-1:-1:-1::0;;;;;10017:19:4;::::2;;::::0;;;:13:::2;:19;::::0;;;;;;;;:73;;;;10166:264;;::::2;::::0;::::2;::::0;;;;;;;;::::2;10235:26;10253:8:::0;10235:15:::2;:26;:::i;:::-;10166:264:::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;-1:-1:-1;;;;;10364:14:4;;::::2;-1:-1:-1::0;10364:14:4;;;:8:::2;:14:::0;;;;;;:22:::2;::::0;;::::2;:29:::0;;10166:264;;;;;;;;;;;;;;;10149:13:::2;::::0;;10140:23;;:8:::2;:23:::0;;;;;:290;;;;;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;::::2;::::0;;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;;10140:290:4::2;::::0;;;::::2;::::0;;;::::2;::::0;;;10487:14;;10515:13;;10487:42;;;;::::2;::::0;;;;;;;;;;::::2;::::0;;;;10607:15;;;;::::2;::::0;;;10680::::2;:27:::0;;;::::2;::::0;;10776:36;1180:25:5;;;10364:14:4;;-1:-1:-1;;;;;;;;;;;;10776:36:4;1153:18:5;10776:36:4::2;;;;;;;10857:5;::::0;:28:::2;::::0;-1:-1:-1;;;10857:28:4;;-1:-1:-1;;;;;12534:32:5;;;10857:28:4::2;::::0;::::2;12516:51:5::0;12583:18;;;12576:34;;;10857:5:4;;::::2;::::0;:10:::2;::::0;12489:18:5;;10857:28:4::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;136:1:3;421:22;;-1:-1:-1;;;;8956:1936:4:o;23160:159::-;-1:-1:-1;;;;;23290:14:4;;;;;;:8;:14;;;;;;;;;:22;;23283:29;;;;;;;;;;;;;;;;;23251:16;;23283:29;;;23290:22;23283:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23160:159;;;:::o;11856:1915::-;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;11945:10:4;11937:34:::1;;;::::0;-1:-1:-1;;;11937:34:4;;11154:2:5;11937:34:4::1;::::0;::::1;11136:21:5::0;11193:2;11173:18;;;11166:30;-1:-1:-1;;;11212:18:5;;;11205:41;11263:18;;11937:34:4::1;10952:335:5::0;11937:34:4::1;12001:11;;11989:8;:23;;11981:61;;;::::0;-1:-1:-1;;;11981:61:4;;11835:2:5;11981:61:4::1;::::0;::::1;11817:21:5::0;11874:2;11854:18;;;11847:30;-1:-1:-1;;;11893:18:5;;;11886:55;11958:18;;11981:61:4::1;11633:349:5::0;11981:61:4::1;12072:11;;12060:8;:23;;12052:62;;;::::0;-1:-1:-1;;;12052:62:4;;12189:2:5;12052:62:4::1;::::0;::::1;12171:21:5::0;12228:2;12208:18;;;12201:30;12267:28;12247:18;;;12240:56;12313:18;;12052:62:4::1;11987:350:5::0;12052:62:4::1;12163:10;12148:12;12224:14:::0;;;:8:::1;:14;::::0;;;;:32;:36;12220:92:::1;;12276:25;12289:4;12295:5;12276:12;:25::i;:::-;12352:16;12371:26;819:42;12390:6;12371:11;:26::i;:::-;12352:45;;12443:18;12464:41;12486:8;12496;12464:21;:41::i;:::-;-1:-1:-1::0;;;;;12581:14:4;::::1;;::::0;;;:8:::1;:14;::::0;;;;:27:::1;::::0;::::1;:41:::0;;;::::1;::::0;;12636:17:::1;:31:::0;;;::::1;::::0;;12742:11:::1;:23:::0;;;::::1;::::0;;12779:44;;;::::1;::::0;;;12941:27;12443:62;;-1:-1:-1;12918:51:4::1;::::0;:22:::1;:51::i;:::-;-1:-1:-1::0;;;;;12896:19:4;::::1;;::::0;;;:13:::1;:19;::::0;;;;;;;;:73;;;;13045:264;;::::1;::::0;::::1;::::0;;;;;;;;::::1;13114:26;13132:8:::0;13114:15:::1;:26;:::i;:::-;13045:264:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;-1:-1:-1;;;;;13243:14:4;;::::1;-1:-1:-1::0;13243:14:4;;;:8:::1;:14:::0;;;;;;:22:::1;::::0;;::::1;:29:::0;;13045:264;;;;;;;;;;;;;;;13028:13:::1;::::0;;13019:23;;:8:::1;:23:::0;;;;;:290;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;13019:290:4::1;::::0;;;::::1;::::0;;;::::1;::::0;;;13366:14;;13394:13;;13366:42;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;;;13486:15;;;;::::1;::::0;;;13559::::1;:27:::0;;;::::1;::::0;;13655:36;1180:25:5;;;13243:14:4;;-1:-1:-1;;;;;;;;;;;;13655:36:4;1153:18:5;13655:36:4::1;;;;;;;13736:5;::::0;:28:::1;::::0;-1:-1:-1;;;13736:28:4;;-1:-1:-1;;;;;12534:32:5;;;13736:28:4::1;::::0;::::1;12516:51:5::0;12583:18;;;12576:34;;;13736:5:4;;::::1;::::0;:10:::1;::::0;12489:18:5;;13736:28:4::1;12342:274:5::0;5300:283:4;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;5415:11:4::1;;5398:14;:28;5377:116;;;;-1:-1:-1::0;;;5377:116:4::1;;;;;;;:::i;:::-;5503:11;:28:::0;;;5546:30:::1;::::0;1180:25:5;;;5546:30:4::1;::::0;1168:2:5;1153:18;5546:30:4::1;1034:177:5::0;8049:197:4;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;8132:15:4;::::1;819:42;8132:15:::0;8124:56:::1;;;::::0;-1:-1:-1;;;8124:56:4;;13515:2:5;8124:56:4::1;::::0;::::1;13497:21:5::0;13554:2;13534:18;;;13527:30;13593;13573:18;;;13566:58;13641:18;;8124:56:4::1;13313:352:5::0;8124:56:4::1;8190:49;8196:6;8204:10;8216:22;8231:6;8216:14;:22::i;1991:25::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1991:25:4;;-1:-1:-1;1991:25:4;:::o;1174:129:2:-;797:5;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;1254:5:::1;::::0;;1245:25:::1;::::0;-1:-1:-1;;;;;1245:25:2;;::::1;::::0;1254:5;::::1;::::0;1245:25:::1;::::0;::::1;1280:5;:16:::0;;-1:-1:-1;;;;;;1280:16:2::1;-1:-1:-1::0;;;;;1280:16:2;;;::::1;::::0;;;::::1;::::0;;1174:129::o;5758:281:4:-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;5873:11:4::1;;5856:14;:28;5835:114;;;;-1:-1:-1::0;;;5835:114:4::1;;;;;;;:::i;:::-;5959:11;:28:::0;;;6002:30:::1;::::0;1180:25:5;;;6002:30:4::1;::::0;1168:2:5;1153:18;6002:30:4::1;1034:177:5::0;3968:246:4;4086:4;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;4106:31:4::1;4119:10;4131:5;4106:12;:31::i;:::-;4152:34;::::0;4184:1:::1;1180:25:5::0;;-1:-1:-1;;;;;4152:34:4;::::1;::::0;4161:10:::1;::::0;-1:-1:-1;;;;;;;;;;;4152:34:4;1168:2:5;1153:18;4152:34:4::1;;;;;;;-1:-1:-1::0;4203:4:4::1;136:1:3::0;421:22;;3968:246:4;;-1:-1:-1;;3968:246:4:o;6712:311::-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;6842:11:4::1;;6820:19;:33;6799:119;;;;-1:-1:-1::0;;;6799:119:4::1;;;;;;;:::i;:::-;6928:11;:33:::0;;;6976:40:::1;::::0;1180:25:5;;;6976:40:4::1;::::0;1168:2:5;1153:18;6976:40:4::1;1034:177:5::0;23670:1029:4;-1:-1:-1;;;;;23942:14:4;;23928:11;23942:14;;;:8;:14;;;;;:22;;:29;23767:16;;;;;;;;;;23942:29;24008:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24008:18:4;;23981:45;;24036:26;24079:3;24065:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24065:18:4;;24036:47;;24093:30;24140:3;24126:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24126:18:4;;24093:51;;24154:26;24197:3;24183:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24183:18:4;;24154:47;;24217:9;24212:393;24236:3;24232:1;:7;24212:393;;;-1:-1:-1;;;;;24279:14:4;;24270:35;24279:14;;;:8;:14;;;;;:22;;:25;;24270:8;;:35;24279:22;24302:1;;24279:25;;;;;;:::i;:::-;;;;;;;;;24270:35;;;;;;;;;;;:46;;;24257:7;24265:1;24257:10;;;;;;;;:::i;:::-;;;;;;:59;;;;;24345:8;:35;24354:8;:14;24363:4;-1:-1:-1;;;;;24354:14:4;-1:-1:-1;;;;;24354:14:4;;;;;;;;;;;;:22;;24377:1;24354:25;;;;;;;;:::i;:::-;;;;;;;;;24345:35;;;;;;;;;;;:48;;;24330:9;24340:1;24330:12;;;;;;;;:::i;:::-;;;;;;:63;;;;;24426:42;24442:8;:14;24451:4;-1:-1:-1;;;;;24442:14:4;-1:-1:-1;;;;;24442:14:4;;;;;;;;;;;;:22;;24465:1;24442:25;;;;;;;;:::i;:::-;;;;;;;;;24426:15;:42::i;:::-;24407:13;24421:1;24407:16;;;;;;;;:::i;:::-;;;;;;:61;;;;;24497:38;24509:8;:14;24518:4;-1:-1:-1;;;;;24509:14:4;-1:-1:-1;;;;;24509:14:4;;;;;;;;;;;;:22;;24532:1;24509:25;;;;;;;;:::i;:::-;;;;;;;;;24497:11;:38::i;:::-;24482:9;24492:1;24482:12;;;;;;;;:::i;:::-;;;;;;;;;;:53;24577:3;;24212:393;;;;24623:8;:14;24632:4;-1:-1:-1;;;;;24623:14:4;-1:-1:-1;;;;;24623:14:4;;;;;;;;;;;;:22;;24647:7;24656:9;24667:13;24682:9;24615:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23670:1029;;;;;;;:::o;21333:133::-;21420:39;;-1:-1:-1;;;21420:39:4;;21453:4;21420:39;;;4295:51:5;21394:7:4;;-1:-1:-1;;;;;21420:24:4;;;;;4268:18:5;;21420:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5016:112::-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;5083:6:4::1;:38:::0;;-1:-1:-1;;;;;;5083:38:4::1;-1:-1:-1::0;;;;;5083:38:4;;;::::1;::::0;;;::::1;::::0;;5016:112::o;23038:116::-;23090:7;23134:13;;23116:15;;:31;;;;:::i;:::-;23109:38;;23038:116;:::o;21604:378::-;21718:7;21961:11;;21947;;:25;;;;:::i;:::-;689:5;21876:21;;:45;;;;:::i;:::-;21840:11;;21829:22;;:8;:22;:::i;:::-;21828:94;;;;:::i;:::-;21827:146;;;;:::i;:::-;21786:188;;689:5;21786:188;:::i;:::-;21760:215;;:10;:215;:::i;:::-;21741:234;21604:378;-1:-1:-1;;;21604:378:4:o;11312:99::-;179:1:3;317:7;;:19;309:63;;;;-1:-1:-1;;;309:63:3;;;;;;;:::i;:::-;179:1;382:7;:18;;;;11374:30:4::1;11387:10;11399:4;11374:12;:30::i;21038:142::-:0;21106:7;629:6;21142:17;;21134:5;:25;;;;:::i;:::-;21132:41;;;;:::i;6219:313::-;797:5:2;;-1:-1:-1;;;;;797:5:2;783:10;:19;775:51;;;;-1:-1:-1;;;775:51:2;;;;;;;:::i;:::-;6349:11:4::1;;6327:19;:33;6306:121;;;;-1:-1:-1::0;;;6306:121:4::1;;;;;;;:::i;:::-;6437:11;:33:::0;;;6485:40:::1;::::0;1180:25:5;;;6485:40:4::1;::::0;1168:2:5;1153:18;6485:40:4::1;1034:177:5::0;17228:1633:4;-1:-1:-1;;;;;17337:14:4;;;;;;:8;:14;;;;;:32;:37;;17333:74;;17228:1633;;:::o;17333:74::-;17448:15;17466:20;17481:4;17466:14;:20::i;:::-;-1:-1:-1;;;;;17574:14:4;;;;;;:8;:14;;;;;:27;;;17448:38;;-1:-1:-1;17551:51:4;;:22;:51::i;:::-;-1:-1:-1;;;;;17529:19:4;;;;;;:13;:19;;;;;;;;:73;;;;17680:8;:14;;;:34;;:45;;;;;;17746:1109;;;;17850:38;;-1:-1:-1;;;17850:38:4;;17882:4;17850:38;;;4295:51:5;17827:20:4;;819:42;;17850:23;;4268:18:5;;17850:38:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17971:16;;;17985:1;17971:16;;;;;;;;17827:61;;-1:-1:-1;17947:21:4;;17971:16;;;;;;;;;;-1:-1:-1;;18011:6:4;;:13;;;-1:-1:-1;;;18011:13:4;;;;17947:40;;-1:-1:-1;;;;;;18011:6:4;;;;:11;;-1:-1:-1;18011:13:4;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18001:4;18006:1;18001:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;18001:23:4;;;-1:-1:-1;;;;;18001:23:4;;;;;819:42;18038:4;18043:1;18038:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18038:15:4;;;:7;;;;;;;;;:15;18101:6;;;:57;18166:7;18101:6;18195:4;18209;18216:23;:15;18234:5;18216:23;:::i;:::-;18101:152;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18343:38:4;;-1:-1:-1;;;18343:38:4;;18375:4;18343:38;;;4295:51:5;18321:19:4;;-1:-1:-1;819:42:4;;-1:-1:-1;18343:23:4;;-1:-1:-1;4268:18:5;;18343:38:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18321:60;;18434:12;18420:11;:26;18395:96;;;;-1:-1:-1;;;18395:96:4;;15902:2:5;18395:96:4;;;15884:21:5;15941:2;15921:18;;;15914:30;-1:-1:-1;;;15960:18:5;;;15953:41;16011:18;;18395:96:4;15700:335:5;18395:96:4;18556:16;18575:26;18589:12;18575:11;:26;:::i;:::-;18556:45;;18649:28;819:42;18662:4;18668:8;18649:5;:28::i;:::-;-1:-1:-1;17746:1109:4;;-1:-1:-1;;;17746:1109:4;;18812:32;18826:1;18830:4;18836:7;18812:5;:32::i;:::-;17286:1575;17228:1633;;:::o;20215:672::-;20324:12;20339;;;:8;:12;;;;;;;;:19;;;;20386:18;;;;;-1:-1:-1;;;;;20339:19:4;;;20436:14;;;:8;:14;;;;;;:22;;20472:29;;20339:19;;20386:18;;20472:33;;20339:19;;20472:33;:::i;:::-;20436:79;;;;;;;;:::i;:::-;;;;;;;;;;;;;20582:21;;;:8;:21;;;;;;:27;;:37;;;-1:-1:-1;;;;;20692:14:4;;;;:8;:14;;;;;:22;;:31;;20436:79;;-1:-1:-1;20436:79:4;;20612:7;;20692:31;;;;;;:::i;:::-;;;;;;;;;;;;:45;;;;-1:-1:-1;;;;;20794:14:4;;;;:8;:14;;;;;;:22;;:28;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;20794:28:4;;;;;;;;;;;;20868:12;;;:8;:12;;;-1:-1:-1;;20868:12:4;;;20861:19;;;20794:28;20861:19;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20861:19:4;;;;-1:-1:-1;;;;;;20861:19:4;;;20215:672::o;19379:830::-;-1:-1:-1;;;;;19491:16:4;;19487:53;;19379:830;;;:::o;19487:53::-;19612:11;-1:-1:-1;;;;;19626:20:4;;;:69;;19673:22;19688:6;19673:14;:22::i;:::-;19626:69;;;19649:21;19626:69;19612:83;;19718:3;19709:6;:12;19705:55;;;19746:3;19737:12;;19705:55;19810:6;19820:1;19810:11;19806:48;;19837:7;19379:830;;;:::o;19806:48::-;-1:-1:-1;;;;;19868:20:4;;19864:339;;19905:6;19924:2;-1:-1:-1;;;;;19916:16:4;19940:6;19916:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19904:47;;;19973:1;19965:37;;;;-1:-1:-1;;;19965:37:4;;16374:2:5;19965:37:4;;;16356:21:5;16413:2;16393:18;;;16386:30;16452:25;16432:18;;;16425:53;16495:18;;19965:37:4;16172:347:5;19965:37:4;19890:123;19864:339;;;20098:35;;-1:-1:-1;;;20098:35:4;;-1:-1:-1;;;;;12534:32:5;;;20098:35:4;;;12516:51:5;12583:18;;;12576:34;;;20098:23:4;;;;;12489:18:5;;20098:35:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20073:119;;;;-1:-1:-1;;;20073:119:4;;16726:2:5;20073:119:4;;;16708:21:5;16765:2;16745:18;;;16738:30;16804:27;16784:18;;;16777:55;16849:18;;20073:119:4;16524:349:5;20073:119:4;19477:732;19379:830;;;:::o;18867:506::-;18998:51;;-1:-1:-1;;;18998:51:4;;19023:10;18998:51;;;17090:34:5;19043:4:4;17140:18:5;;;17133:43;18954:7:4;;19053:6;;-1:-1:-1;;;;;18998:24:4;;;;;17025:18:5;;18998:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;18977:130;;;;-1:-1:-1;;;18977:130:4;;17389:2:5;18977:130:4;;;17371:21:5;17428:2;17408:18;;;17401:30;-1:-1:-1;;;17447:18:5;;;17440:52;17509:18;;18977:130:4;17187:346:5;18977:130:4;19117:14;19134:22;19149:6;19134:14;:22::i;:::-;19166:62;;-1:-1:-1;;;19166:62:4;;19194:10;19166:62;;;17778:34:5;19214:4:4;17828:18:5;;;17821:43;17880:18;;;17873:34;;;19117:39:4;;-1:-1:-1;;;;;;19166:27:4;;;;;17713:18:5;;19166:62:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19238:13;19254:22;19269:6;19254:14;:22::i;:::-;19238:38;;19302:6;19294:5;:14;19286:49;;;;-1:-1:-1;;;19286:49:4;;18120:2:5;19286:49:4;;;18102:21:5;18159:2;18139:18;;;18132:30;-1:-1:-1;;;18178:18:5;;;18171:52;18240:18;;19286:49:4;17918:346:5;19286:49:4;19352:14;19360:6;19352:5;:14;:::i;:::-;19345:21;18867:506;-1:-1:-1;;;;;18867:506:4:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:355:5:-;216:2;198:21;;;255:2;235:18;;;228:30;294:33;289:2;274:18;;267:61;360:2;345:18;;14:355::o;374:127::-;435:10;430:3;426:20;423:1;416:31;466:4;463:1;456:15;490:4;487:1;480:15;506:168;546:7;612:1;608;604:6;600:14;597:1;594:21;589:1;582:9;575:17;571:45;568:71;;;619:18;;:::i;:::-;-1:-1:-1;659:9:5;;506:168::o;679:217::-;719:1;745;735:132;;789:10;784:3;780:20;777:1;770:31;824:4;821:1;814:15;852:4;849:1;842:15;735:132;-1:-1:-1;881:9:5;;679:217::o;901:128::-;941:3;972:1;968:6;965:1;962:13;959:39;;;978:18;;:::i;:::-;-1:-1:-1;1014:9:5;;901:128::o;1216:597::-;1328:4;1357:2;1386;1375:9;1368:21;1418:6;1412:13;1461:6;1456:2;1445:9;1441:18;1434:34;1486:1;1496:140;1510:6;1507:1;1504:13;1496:140;;;1605:14;;;1601:23;;1595:30;1571:17;;;1590:2;1567:26;1560:66;1525:10;;1496:140;;;1654:6;1651:1;1648:13;1645:91;;;1724:1;1719:2;1710:6;1699:9;1695:22;1691:31;1684:42;1645:91;-1:-1:-1;1797:2:5;1776:15;-1:-1:-1;;1772:29:5;1757:45;;;;1804:2;1753:54;;1216:597;-1:-1:-1;;;1216:597:5:o;1818:131::-;-1:-1:-1;;;;;1893:31:5;;1883:42;;1873:70;;1939:1;1936;1929:12;1954:315;2022:6;2030;2083:2;2071:9;2062:7;2058:23;2054:32;2051:52;;;2099:1;2096;2089:12;2051:52;2138:9;2125:23;2157:31;2182:5;2157:31;:::i;:::-;2207:5;2259:2;2244:18;;;;2231:32;;-1:-1:-1;;;1954:315:5:o;2466:180::-;2525:6;2578:2;2566:9;2557:7;2553:23;2549:32;2546:52;;;2594:1;2591;2584:12;2546:52;-1:-1:-1;2617:23:5;;2466:180;-1:-1:-1;2466:180:5:o;2651:247::-;2710:6;2763:2;2751:9;2742:7;2738:23;2734:32;2731:52;;;2779:1;2776;2769:12;2731:52;2818:9;2805:23;2837:31;2862:5;2837:31;:::i;3227:456::-;3304:6;3312;3320;3373:2;3361:9;3352:7;3348:23;3344:32;3341:52;;;3389:1;3386;3379:12;3341:52;3428:9;3415:23;3447:31;3472:5;3447:31;:::i;:::-;3497:5;-1:-1:-1;3554:2:5;3539:18;;3526:32;3567:33;3526:32;3567:33;:::i;:::-;3227:456;;3619:7;;-1:-1:-1;;;3673:2:5;3658:18;;;;3645:32;;3227:456::o;3877:248::-;3945:6;3953;4006:2;3994:9;3985:7;3981:23;3977:32;3974:52;;;4022:1;4019;4012:12;3974:52;-1:-1:-1;;4045:23:5;;;4115:2;4100:18;;;4087:32;;-1:-1:-1;3877:248:5:o;4357:383::-;4434:6;4442;4450;4503:2;4491:9;4482:7;4478:23;4474:32;4471:52;;;4519:1;4516;4509:12;4471:52;4558:9;4545:23;4577:31;4602:5;4577:31;:::i;:::-;4627:5;4679:2;4664:18;;4651:32;;-1:-1:-1;4730:2:5;4715:18;;;4702:32;;4357:383;-1:-1:-1;;;4357:383:5:o;5311:435::-;5364:3;5402:5;5396:12;5429:6;5424:3;5417:19;5455:4;5484:2;5479:3;5475:12;5468:19;;5521:2;5514:5;5510:14;5542:1;5552:169;5566:6;5563:1;5560:13;5552:169;;;5627:13;;5615:26;;5661:12;;;;5696:15;;;;5588:1;5581:9;5552:169;;;-1:-1:-1;5737:3:5;;5311:435;-1:-1:-1;;;;;5311:435:5:o;5751:261::-;5930:2;5919:9;5912:21;5893:4;5950:56;6002:2;5991:9;5987:18;5979:6;5950:56;:::i;6225:1080::-;6716:3;6705:9;6698:22;6679:4;6743:57;6795:3;6784:9;6780:19;6772:6;6743:57;:::i;:::-;6848:9;6840:6;6836:22;6831:2;6820:9;6816:18;6809:50;6882:44;6919:6;6911;6882:44;:::i;:::-;6868:58;;6974:9;6966:6;6962:22;6957:2;6946:9;6942:18;6935:50;7008:44;7045:6;7037;7008:44;:::i;:::-;6994:58;;7100:9;7092:6;7088:22;7083:2;7072:9;7068:18;7061:50;7134:44;7171:6;7163;7134:44;:::i;:::-;7120:58;;7227:9;7219:6;7215:22;7209:3;7198:9;7194:19;7187:51;7255:44;7292:6;7284;7255:44;:::i;:::-;7247:52;6225:1080;-1:-1:-1;;;;;;;;6225:1080:5:o;7310:388::-;7378:6;7386;7439:2;7427:9;7418:7;7414:23;7410:32;7407:52;;;7455:1;7452;7445:12;7407:52;7494:9;7481:23;7513:31;7538:5;7513:31;:::i;:::-;7563:5;-1:-1:-1;7620:2:5;7605:18;;7592:32;7633:33;7592:32;7633:33;:::i;:::-;7685:7;7675:17;;;7310:388;;;;;:::o;8127:125::-;8167:4;8195:1;8192;8189:8;8186:34;;;8200:18;;:::i;:::-;-1:-1:-1;8237:9:5;;8127:125::o;8257:343::-;8459:2;8441:21;;;8498:2;8478:18;;;8471:30;-1:-1:-1;;;8532:2:5;8517:18;;8510:49;8591:2;8576:18;;8257:343::o;12621:277::-;12688:6;12741:2;12729:9;12720:7;12716:23;12712:32;12709:52;;;12757:1;12754;12747:12;12709:52;12789:9;12783:16;12842:5;12835:13;12828:21;12821:5;12818:32;12808:60;;12864:1;12861;12854:12;12903:405;13105:2;13087:21;;;13144:2;13124:18;;;13117:30;13183:34;13178:2;13163:18;;13156:62;-1:-1:-1;;;13249:2:5;13234:18;;13227:39;13298:3;13283:19;;12903:405::o;13670:403::-;13872:2;13854:21;;;13911:2;13891:18;;;13884:30;13950:34;13945:2;13930:18;;13923:62;-1:-1:-1;;;14016:2:5;14001:18;;13994:37;14063:3;14048:19;;13670:403::o;14078:127::-;14139:10;14134:3;14130:20;14127:1;14120:31;14170:4;14167:1;14160:15;14194:4;14191:1;14184:15;14210:127;14271:10;14266:3;14262:20;14259:1;14252:31;14302:4;14299:1;14292:15;14326:4;14323:1;14316:15;14342:184;14412:6;14465:2;14453:9;14444:7;14440:23;14436:32;14433:52;;;14481:1;14478;14471:12;14433:52;-1:-1:-1;14504:16:5;;14342:184;-1:-1:-1;14342:184:5:o;14531:251::-;14601:6;14654:2;14642:9;14633:7;14629:23;14625:32;14622:52;;;14670:1;14667;14660:12;14622:52;14702:9;14696:16;14721:31;14746:5;14721:31;:::i;14787:908::-;15021:4;15069:3;15058:9;15054:19;15100:6;15089:9;15082:25;15126:2;15164:3;15159:2;15148:9;15144:18;15137:31;15188:6;15223;15217:13;15254:6;15246;15239:22;15292:3;15281:9;15277:19;15270:26;;15331:2;15323:6;15319:15;15305:29;;15352:1;15362:195;15376:6;15373:1;15370:13;15362:195;;;15441:13;;-1:-1:-1;;;;;15437:39:5;15425:52;;15532:15;;;;15497:12;;;;15473:1;15391:9;15362:195;;;-1:-1:-1;;;;;;;15613:32:5;;;;15608:2;15593:18;;15586:60;-1:-1:-1;;;15677:2:5;15662:18;15655:34;15574:3;14787:908;-1:-1:-1;;14787:908:5:o;16040:127::-;16101:10;16096:3;16092:20;16089:1;16082:31;16132:4;16129:1;16122:15;16156:4;16153:1;16146:15
Swarm Source
ipfs://3eb7ffa3557b1592671092e92de12bdd48f946f8663b4d560610baf8acee363e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.