ETH Price: $3,131.38 (-0.91%)
Gas: 6 Gwei

Contract

0x60842A6B44cca5Eb7685D1135acF69b1336B28b3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Claim Tokens195990392024-04-06 20:24:1120 days ago1712435051IN
0x60842A6B...1336B28b3
0 ETH0.0015681813.67315344
Claim Tokens188933102023-12-29 19:29:23119 days ago1703878163IN
0x60842A6B...1336B28b3
0 ETH0.002318120.21175764
Claim Tokens175301132023-06-21 19:27:11310 days ago1687375631IN
0x60842A6B...1336B28b3
0 ETH0.0031861827.78061909
Claim Tokens170304152023-04-12 7:21:23380 days ago1681284083IN
0x60842A6B...1336B28b3
0 ETH0.0025388626.01538555
Claim Tokens170304082023-04-12 7:19:59380 days ago1681283999IN
0x60842A6B...1336B28b3
0 ETH0.0037276932.50210727
Claim Tokens168957572023-03-24 7:04:11399 days ago1679641451IN
0x60842A6B...1336B28b3
0 ETH0.0020758318
Claim Tokens168904822023-03-23 13:18:11400 days ago1679577491IN
0x60842A6B...1336B28b3
0 ETH0.0019010319.3541167
Claim Tokens168824182023-03-22 10:03:47401 days ago1679479427IN
0x60842A6B...1336B28b3
0 ETH0.0014488714.7507301
Claim Tokens168545202023-03-18 12:04:11405 days ago1679141051IN
0x60842A6B...1336B28b3
0 ETH0.001601313.96194747
Claim Tokens167970922023-03-10 10:18:47413 days ago1678443527IN
0x60842A6B...1336B28b3
0 ETH0.0030202530.74867246
Claim Tokens167951732023-03-10 3:46:47413 days ago1678420007IN
0x60842A6B...1336B28b3
0 ETH0.0022382622.78739695
Claim Tokens167950582023-03-10 3:23:23413 days ago1678418603IN
0x60842A6B...1336B28b3
0 ETH0.0024147924.5845557
Claim Tokens167896092023-03-09 8:58:23414 days ago1678352303IN
0x60842A6B...1336B28b3
0 ETH0.0023197623.61708788
Claim Tokens167868982023-03-08 23:49:59414 days ago1678319399IN
0x60842A6B...1336B28b3
0 ETH0.0037484438.16222735
Claim Tokens167836912023-03-08 12:59:23415 days ago1678280363IN
0x60842A6B...1336B28b3
0 ETH0.0022546422.95408029
Claim Tokens167836712023-03-08 12:55:23415 days ago1678280123IN
0x60842A6B...1336B28b3
0 ETH0.0028742324.92313382
Claim Tokens167828482023-03-08 10:08:11415 days ago1678270091IN
0x60842A6B...1336B28b3
0 ETH0.0022384422.78918982
Claim Tokens167825172023-03-08 9:01:47415 days ago1678266107IN
0x60842A6B...1336B28b3
0 ETH0.0020915621.29386179
Claim Tokens167820842023-03-08 7:34:11415 days ago1678260851IN
0x60842A6B...1336B28b3
0 ETH0.0021324321.70990314
Claim Tokens167817442023-03-08 6:25:35415 days ago1678256735IN
0x60842A6B...1336B28b3
0 ETH0.0021609222
Claim Tokens167767122023-03-07 13:26:35416 days ago1678195595IN
0x60842A6B...1336B28b3
0 ETH0.0026520427
Claim Tokens167766832023-03-07 13:20:35416 days ago1678195235IN
0x60842A6B...1336B28b3
0 ETH0.002926729.79984165
Claim Tokens167730652023-03-07 1:08:23416 days ago1678151303IN
0x60842A6B...1336B28b3
0 ETH0.0059115960.18485462
Claim Tokens167705042023-03-06 16:29:23417 days ago1678120163IN
0x60842A6B...1336B28b3
0 ETH0.0038835239.5374663
Claim Tokens167703332023-03-06 15:55:11417 days ago1678118111IN
0x60842A6B...1336B28b3
0 ETH0.0047147548
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PPTimedVesting

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-13
*/

/*
https://powerpool.finance/

          wrrrw r wrr
         ppwr rrr wppr0       prwwwrp                                 prwwwrp                   wr0
        rr 0rrrwrrprpwp0      pp   pr  prrrr0 pp   0r  prrrr0  0rwrrr pp   pr  prrrr0  prrrr0    r0
        rrp pr   wr00rrp      prwww0  pp   wr pp w00r prwwwpr  0rw    prwww0  pp   wr pp   wr    r0
        r0rprprwrrrp pr0      pp      wr   pr pp rwwr wr       0r     pp      wr   pr wr   pr    r0
         prwr wrr0wpwr        00        www0   0w0ww    www0   0w     00        www0    www0   0www0
          wrr ww0rrrr

*/

// SPDX-License-Identifier: MIT

// File: contracts/utils/SafeMath.sol

// From
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/ccf79ee483b12fb9759dc5bb5f947a31aa0a3bd6/contracts/math/SafeMath.sol

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/GSN/Context.sol

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/PPTimedVesting.sol

pragma solidity 0.6.12;



interface IERC20 {
  function totalSupply() external view returns (uint256);

  function transfer(address _to, uint256 _amount) external;
}

interface CvpInterface {
  function getPriorVotes(address account, uint256 blockNumber) external view returns (uint96);
}

/**
 * @title PowerPool Vesting Contract
 * @author PowerPool
 */
contract PPTimedVesting is CvpInterface, Ownable {
  using SafeMath for uint256;

  // @notice Emitted once when the contract was deployed
  event Init(address[] members);

  // @notice Emitted when the owner increases durationT correspondingly increasing the endT timestamp
  event IncreaseDurationT(uint256 prevDurationT, uint256 prevEndT, uint256 newDurationT, uint256 newEndT);

  // @notice Emitted when a member delegates his votes to one of the delegates or to himself
  event DelegateVotes(address indexed from, address indexed to, address indexed previousDelegate, uint96 adjustedVotes);

  // @notice Emitted when a member transfer his permission
  event Transfer(
    address indexed from,
    address indexed to,
    uint96 alreadyClaimedVotes,
    uint96 alreadyClaimedTokens,
    address currentDelegate
  );

  /// @notice Emitted when a member claims available votes
  event ClaimVotes(
    address indexed member,
    address indexed delegate,
    uint96 lastAlreadyClaimedVotes,
    uint96 lastAlreadyClaimedTokens,
    uint96 newAlreadyClaimedVotes,
    uint96 newAlreadyClaimedTokens,
    uint96 lastMemberAdjustedVotes,
    uint96 adjustedVotes,
    uint96 diff
  );

  /// @notice Emitted when a member claims available tokens
  event ClaimTokens(
    address indexed member,
    address indexed to,
    uint96 amount,
    uint256 newAlreadyClaimed,
    uint256 votesAvailable
  );

  /// @notice A Emitted when a member unclaimed balance changes
  event UnclaimedBalanceChanged(address indexed member, uint256 previousUnclaimed, uint256 newUnclaimed);

  /// @notice A member statuses and unclaimed balance tracker
  struct Member {
    bool active;
    bool transferred;
    uint96 alreadyClaimedVotes;
    uint96 alreadyClaimedTokens;
  }

  /// @notice A checkpoint for marking number of votes from a given block
  struct Checkpoint {
    uint32 fromBlock;
    uint96 votes;
  }

  /// @notice ERC20 token address
  address public immutable token;

  /// @notice Start timestamp for vote vesting calculations
  uint256 public immutable startV;

  /// @notice Duration of the vote vesting in seconds
  uint256 public immutable durationV;

  /// @notice End vote vesting timestamp
  uint256 public immutable endV;

  /// @notice Start timestamp for token vesting calculations
  uint256 public immutable startT;

  /// @notice Number of the vesting contract members, used only from UI
  uint256 public immutable memberCount;

  /// @notice Amount of ERC20 tokens to distribute during the vesting period
  uint96 public immutable amountPerMember;

  /// @notice Duration of the token vesting in seconds
  uint256 public durationT;

  /// @notice End token timestamp, used only from UI
  uint256 public endT;

  /// @notice Member details by their address
  mapping(address => Member) public members;

  /// @notice A record of vote checkpoints for each member, by index
  mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

  /// @notice The number of checkpoints for each member
  mapping(address => uint32) public numCheckpoints;

  /// @notice Vote delegations
  mapping(address => address) public voteDelegations;

  /**
   * @notice Constructs a new vesting contract
   * @dev It's up to a deployer to allocate the correct amount of ERC20 tokens on this contract
   * @param _tokenAddress The ERC20 token address to use with this vesting contract
   * @param _startV The timestamp when the vote vesting period starts
   * @param _durationV The duration in second the vote vesting period should last
   * @param _startT The timestamp when the token vesting period starts
   * @param _durationT The duration in seconds the token vesting period should last
   * @param _memberList The list of addresses to distribute tokens to
   * @param _amountPerMember The number of tokens to distribute to each vesting contract member
   */
  constructor(
    address _tokenAddress,
    uint256 _startV,
    uint256 _durationV,
    uint256 _startT,
    uint256 _durationT,
    address[] memory _memberList,
    uint96 _amountPerMember
  ) public {
    require(_durationV > 1, "Vesting: Invalid durationV");
    require(_durationT > 1, "Vesting: Invalid durationT");
    require(_startV < _startT, "Vesting: Requires startV < startT");
    // require((_startV + _durationV) <= (_startT + _durationT), "Vesting: Requires endV <= endT");
    require((_startV.add(_durationV)) <= (_startT.add(_durationT)), "Vesting: Requires endV <= endT");
    require(_amountPerMember > 0, "Vesting: Invalid amount per member");
    require(IERC20(_tokenAddress).totalSupply() > 0, "Vesting: Missing supply of the token");

    token = _tokenAddress;

    startV = _startV;
    durationV = _durationV;
    endV = _startV + _durationV;

    startT = _startT;
    durationT = _durationT;
    endT = _startT + _durationT;

    amountPerMember = _amountPerMember;

    uint256 len = _memberList.length;
    require(len > 0, "Vesting: Empty member list");

    memberCount = len;

    for (uint256 i = 0; i < len; i++) {
      members[_memberList[i]].active = true;
    }

    emit Init(_memberList);
  }

  /**
   * @notice Checks whether the vote vesting period has started or not
   * @return true If the vote vesting period has started
   */
  function hasVoteVestingStarted() external view returns (bool) {
    return block.timestamp >= startV;
  }

  /**
   * @notice Checks whether the vote vesting period has ended or not
   * @return true If the vote vesting period has ended
   */
  function hasVoteVestingEnded() external view returns (bool) {
    return block.timestamp >= endV;
  }

  /**
   * @notice Checks whether the token vesting period has started or not
   * @return true If the token vesting period has started
   */
  function hasTokenVestingStarted() external view returns (bool) {
    return block.timestamp >= startT;
  }

  /**
   * @notice Checks whether the token vesting period has ended or not
   * @return true If the token vesting period has ended
   */
  function hasTokenVestingEnded() external view returns (bool) {
    return block.timestamp >= endT;
  }

  /**
   * @notice Returns the address a _voteHolder delegated their votes to
   * @param _voteHolder The address to fetch delegate for
   * @return address The delegate address
   */
  function getVoteUser(address _voteHolder) public view returns (address) {
    address currentDelegate = voteDelegations[_voteHolder];
    if (currentDelegate == address(0)) {
      return _voteHolder;
    }
    return currentDelegate;
  }

  /**
   * @notice Provides information about the last cached votes checkpoint with no other conditions
   * @dev Provides a latest cached votes value. For actual votes information use `getPriorVotes()` which introduce
   *      some additional logic constraints on top of this cached value.
   * @param _member The member address to get votes for
   */
  function getLastCachedVotes(address _member) external view returns (uint256) {
    uint32 dstRepNum = numCheckpoints[_member];
    return dstRepNum > 0 ? checkpoints[_member][dstRepNum - 1].votes : 0;
  }

  /**
   * @notice Provides information about a member already claimed votes
   * @dev Behaves like a CVP delegated balance, but with a member unclaimed balance
   * @dev Block number must be a finalized block or else this function will revert to prevent misinformation
   * @dev Returns 0 for non-member addresses, even for previously valid ones
   * @dev This method is a copy from CVP token with several modifications
   * @param account The address of the member to check
   * @param blockNumber The block number to get the vote balance at
   * @return The number of votes the account had as of the given block
   */
  function getPriorVotes(address account, uint256 blockNumber) public view override returns (uint96) {
    require(blockNumber < block.number, "Vesting::getPriorVotes: Not yet determined");

    uint32 nCheckpoints = numCheckpoints[account];

    // Not a member
    if (members[account].active == false) {
      return 0;
    }

    // (No one can use vesting votes left on the contract after endT, even for votings created before endT)
    if (block.timestamp > endT) {
      return 0;
    }

    // (A member has not claimed any tokens yet) OR (The blockNumber is before the first checkpoint)
    if (nCheckpoints == 0 || checkpoints[account][0].fromBlock > blockNumber) {
      return 0;
    }

    // Next check most recent balance
    if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
      return checkpoints[account][nCheckpoints - 1].votes;
    }

    uint32 lower = 0;
    uint32 upper = nCheckpoints - 1;
    while (upper > lower) {
      uint32 center = upper - (upper - lower) / 2;
      // ceil, avoiding overflow
      Checkpoint memory cp = checkpoints[account][center];
      if (cp.fromBlock == blockNumber) {
        return cp.votes;
      } else if (cp.fromBlock < blockNumber) {
        lower = center;
      } else {
        upper = center - 1;
      }
    }
    return checkpoints[account][lower].votes;
  }

  /*** Available to Claim calculation ***/

  /**
   * @notice Returns available amount for a claim in the given timestamp
   *         by the given member based on the current contract values
   * @param _member The member address to return available balance for
   * @return The available amount for a claim in the next block
   */
  function getAvailableTokensForMemberAt(uint256 _atTimestamp, address _member) external view returns (uint256) {
    Member storage member = members[_member];
    if (member.active == false) {
      return 0;
    }

    return getAvailable(_atTimestamp, startT, amountPerMember, durationT, member.alreadyClaimedTokens);
  }

  /**
   * @notice Returns available token amount for a claim by a given member in the current timestamp
   *         based on the current contract values
   * @param _member The member address to return available balance for
   * @return The available amount for a claim in the current block
   */
  function getAvailableTokensForMember(address _member) external view returns (uint256) {
    Member storage member = members[_member];
    if (member.active == false) {
      return 0;
    }

    return getAvailableTokens(member.alreadyClaimedTokens);
  }

  /**
   * @notice Returns available vote amount for a claim by a given member at the moment
   *         based on the current contract values
   * @param _member The member address to return available balance for
   * @return The available amount for a claim at the moment
   */
  function getAvailableVotesForMember(address _member) external view returns (uint256) {
    Member storage member = members[_member];
    if (member.active == false) {
      return 0;
    }

    return getAvailableVotes(member.alreadyClaimedVotes);
  }

  /**
   * @notice Returns available token amount for a claim based on the current contract values
   *         and an already claimed amount input
   * @dev Will return amountPerMember for non-members, so an external check is required for this case
   * @param _alreadyClaimed amount
   * @return The available amount for claim
   */
  function getAvailableTokens(uint256 _alreadyClaimed) public view returns (uint256) {
    return getAvailable(block.timestamp, startT, amountPerMember, durationT, _alreadyClaimed);
  }

  /**
   * @notice Returns available vote amount for claim based on the current contract values
   *         and an already claimed amount input
   * @dev Will return amountPerMember for non-members, so an external check is required for this case
   * @param _alreadyClaimed amount
   * @return The available amount for claim
   */
  function getAvailableVotes(uint256 _alreadyClaimed) public view returns (uint256) {
    if (block.timestamp > endT) {
      return 0;
    }
    return getAvailable(block.timestamp, startV, amountPerMember, durationV, _alreadyClaimed);
  }

  /**
   * @notice Calculates available amount for a claim
   * @dev A pure function which doesn't reads anything from state
   * @param _now A timestamp to calculate the available amount
   * @param _start The vesting period start timestamp
   * @param _amountPerMember The amount of ERC20 tokens to be distributed to each member
   *         during this vesting period
   * @param _duration The vesting total duration in seconds
   * @param _alreadyClaimed The amount of tokens already claimed by a member
   * @return The available amount for a claim
   */
  function getAvailable(
    uint256 _now,
    uint256 _start,
    uint256 _amountPerMember,
    uint256 _duration,
    uint256 _alreadyClaimed
  ) public pure returns (uint256) {
    if (_now <= _start) {
      return 0;
    }

    // uint256 vestingEndsAt = _start + _duration;
    uint256 vestingEndsAt = _start.add(_duration);
    uint256 to = _now > vestingEndsAt ? vestingEndsAt : _now;

    // uint256 accrued = (to - _start) * _amountPerMember / _duration;
    uint256 accrued = ((to - _start).mul(_amountPerMember).div(_duration));

    // return accrued - _alreadyClaimed;
    return accrued.sub(_alreadyClaimed);
  }

  /*** Owner Methods ***/

  function increaseDurationT(uint256 _newDurationT) external onlyOwner {
    require(_newDurationT > durationT, "Vesting::increaseDurationT: Too small duration");
    require((_newDurationT - durationT) < 180 days, "Vesting::increaseDurationT: Too big duration");

    uint256 prevDurationT = durationT;
    uint256 prevEndT = endT;

    durationT = _newDurationT;
    uint256 newEndT = startT.add(_newDurationT);
    endT = newEndT;

    emit IncreaseDurationT(prevDurationT, prevEndT, _newDurationT, newEndT);
  }

  /*** Member Methods ***/

  /**
   * @notice An active member claims a distributed amount of votes
   * @dev Caches unclaimed balance per block number which could be used by voting contract
   * @param _to address to claim votes to
   */
  function claimVotes(address _to) external {
    Member memory member = members[_to];
    require(member.active == true, "Vesting::claimVotes: User not active");

    uint256 votes = getAvailableVotes(member.alreadyClaimedVotes);

    require(block.timestamp <= endT, "Vesting::claimVotes: Vote vesting has ended");
    require(votes > 0, "Vesting::claimVotes: Nothing to claim");

    _claimVotes(_to, member, votes);
  }

  function _claimVotes(
    address _memberAddress,
    Member memory _member,
    uint256 _availableVotes
  ) internal {
    uint96 newAlreadyClaimedVotes;

    if (_availableVotes > 0) {
      uint96 amount = safe96(_availableVotes, "Vesting::_claimVotes: Amount overflow");

      // member.alreadyClaimed += amount
      newAlreadyClaimedVotes = add96(
        _member.alreadyClaimedVotes,
        amount,
        "Vesting::claimVotes: newAlreadyClaimed overflow"
      );
      members[_memberAddress].alreadyClaimedVotes = newAlreadyClaimedVotes;
    } else {
      newAlreadyClaimedVotes = _member.alreadyClaimedVotes;
    }

    // Step #1. Get the accrued votes value
    // lastMemberAdjustedVotes = claimedVotesBeforeTx - claimedTokensBeforeTx
    uint96 lastMemberAdjustedVotes =
      sub96(
        _member.alreadyClaimedVotes,
        _member.alreadyClaimedTokens,
        "Vesting::_claimVotes: lastMemberAdjustedVotes overflow"
      );

    // Step #2. Get the adjusted value in relation to the member itself.
    // `adjustedVotes = votesAfterTx - claimedTokensBeforeTheCalculation`
    // `claimedTokensBeforeTheCalculation` could be updated earlier in claimVotes() method in the same tx
    uint96 adjustedVotes =
      sub96(
        newAlreadyClaimedVotes,
        members[_memberAddress].alreadyClaimedTokens,
        "Vesting::_claimVotes: adjustedVotes underflow"
      );

    address delegate = getVoteUser(_memberAddress);
    uint96 diff;

    // Step #3. Apply the adjusted value in relation to the delegate
    if (adjustedVotes > lastMemberAdjustedVotes) {
      diff = sub96(adjustedVotes, lastMemberAdjustedVotes, "Vesting::_claimVotes: Positive diff underflow");
      _addDelegatedVotesCache(delegate, diff);
    } else if (lastMemberAdjustedVotes > adjustedVotes) {
      diff = sub96(lastMemberAdjustedVotes, adjustedVotes, "Vesting::_claimVotes: Negative diff underflow");
      _subDelegatedVotesCache(delegate, diff);
    }

    emit ClaimVotes(
      _memberAddress,
      delegate,
      _member.alreadyClaimedVotes,
      _member.alreadyClaimedTokens,
      newAlreadyClaimedVotes,
      members[_memberAddress].alreadyClaimedTokens,
      lastMemberAdjustedVotes,
      adjustedVotes,
      diff
    );
  }

  /**
   * @notice An active member claims a distributed amount of ERC20 tokens
   * @param _to address to claim ERC20 tokens to
   */
  function claimTokens(address _to) external {
    Member memory member = members[msg.sender];
    require(member.active == true, "Vesting::claimTokens: User not active");

    uint256 bigAmount = getAvailableTokens(member.alreadyClaimedTokens);
    require(bigAmount > 0, "Vesting::claimTokens: Nothing to claim");
    uint96 amount = safe96(bigAmount, "Vesting::claimTokens: Amount overflow");

    // member.alreadyClaimed += amount
    uint96 newAlreadyClaimed =
      add96(member.alreadyClaimedTokens, amount, "Vesting::claimTokens: NewAlreadyClaimed overflow");
    members[msg.sender].alreadyClaimedTokens = newAlreadyClaimed;

    uint256 votes = getAvailableVotes(member.alreadyClaimedVotes);

    if (block.timestamp <= endT) {
      _claimVotes(msg.sender, member, votes);
    }

    emit ClaimTokens(msg.sender, _to, amount, newAlreadyClaimed, votes);

    IERC20(token).transfer(_to, bigAmount);
  }

  /**
   * @notice Delegates an already claimed votes amount to the given address
   * @param _to address to delegate votes
   */
  function delegateVotes(address _to) external {
    Member memory member = members[msg.sender];
    require(_to != address(0), "Vesting::delegateVotes: Can't delegate to 0 address");
    require(member.active == true, "Vesting::delegateVotes: msg.sender not active");

    address currentDelegate = getVoteUser(msg.sender);
    require(_to != currentDelegate, "Vesting::delegateVotes: Already delegated to this address");

    voteDelegations[msg.sender] = _to;
    uint96 adjustedVotes =
      sub96(member.alreadyClaimedVotes, member.alreadyClaimedTokens, "Vesting::claimVotes: AdjustedVotes underflow");

    _subDelegatedVotesCache(currentDelegate, adjustedVotes);
    _addDelegatedVotesCache(_to, adjustedVotes);

    emit DelegateVotes(msg.sender, _to, currentDelegate, adjustedVotes);
  }

  /**
   * @notice Transfers a vested rights for a member funds to another address
   * @dev A new member won't have any votes for a period between a start timestamp and a current timestamp
   * @param _to address to transfer a vested right to
   */
  function transfer(address _to) external {
    Member memory from = members[msg.sender];
    Member memory to = members[_to];

    uint96 alreadyClaimedTokens = from.alreadyClaimedTokens;
    uint96 alreadyClaimedVotes = from.alreadyClaimedVotes;

    require(from.active == true, "Vesting::transfer: From member is inactive");
    require(to.active == false, "Vesting::transfer: To address is already active");
    require(to.transferred == false, "Vesting::transfer: To address has been already used");

    members[msg.sender] = Member({ active: false, transferred: true, alreadyClaimedVotes: 0, alreadyClaimedTokens: 0 });
    members[_to] = Member({
      active: true,
      transferred: false,
      alreadyClaimedVotes: alreadyClaimedVotes,
      alreadyClaimedTokens: alreadyClaimedTokens
    });

    address currentDelegate = voteDelegations[msg.sender];

    uint32 currentBlockNumber = safe32(block.number, "Vesting::transfer: Block number exceeds 32 bits");

    checkpoints[_to][0] = Checkpoint(uint32(0), 0);
    if (currentDelegate == address(0)) {
      uint96 adjustedVotes =
        sub96(from.alreadyClaimedVotes, from.alreadyClaimedTokens, "Vesting::claimVotes: AdjustedVotes underflow");
      _subDelegatedVotesCache(msg.sender, adjustedVotes);
      checkpoints[_to][1] = Checkpoint(currentBlockNumber, adjustedVotes);
      numCheckpoints[_to] = 2;
    } else {
      numCheckpoints[_to] = 1;
    }

    voteDelegations[_to] = voteDelegations[msg.sender];
    delete voteDelegations[msg.sender];

    Member memory toMember = members[_to];

    emit Transfer(msg.sender, _to, alreadyClaimedVotes, alreadyClaimedTokens, currentDelegate);

    uint256 votes = getAvailableVotes(toMember.alreadyClaimedVotes);
    _claimVotes(_to, toMember, votes);
  }

  function _subDelegatedVotesCache(address _member, uint96 _subAmount) internal {
    uint32 dstRepNum = numCheckpoints[_member];
    uint96 dstRepOld = dstRepNum > 0 ? checkpoints[_member][dstRepNum - 1].votes : 0;
    uint96 dstRepNew = sub96(dstRepOld, _subAmount, "Vesting::_cacheUnclaimed: Sub amount overflows");
    _writeCheckpoint(_member, dstRepNum, dstRepOld, dstRepNew);
  }

  function _addDelegatedVotesCache(address _member, uint96 _addAmount) internal {
    uint32 dstRepNum = numCheckpoints[_member];
    uint96 dstRepOld = dstRepNum > 0 ? checkpoints[_member][dstRepNum - 1].votes : 0;
    uint96 dstRepNew = add96(dstRepOld, _addAmount, "Vesting::_cacheUnclaimed: Add amount overflows");
    _writeCheckpoint(_member, dstRepNum, dstRepOld, dstRepNew);
  }

  /// @dev A copy from CVP token, only the event name changed
  function _writeCheckpoint(
    address delegatee,
    uint32 nCheckpoints,
    uint96 oldVotes,
    uint96 newVotes
  ) internal {
    uint32 blockNumber = safe32(block.number, "Vesting::_writeCheckpoint: Block number exceeds 32 bits");

    if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
      checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
    } else {
      checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
      numCheckpoints[delegatee] = nCheckpoints + 1;
    }

    emit UnclaimedBalanceChanged(delegatee, oldVotes, newVotes);
  }

  /// @dev The exact copy from CVP token
  function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {
    require(n < 2**32, errorMessage);
    return uint32(n);
  }

  /// @dev The exact copy from CVP token
  function safe96(uint256 n, string memory errorMessage) internal pure returns (uint96) {
    require(n < 2**96, errorMessage);
    return uint96(n);
  }

  /// @dev The exact copy from CVP token
  function sub96(
    uint96 a,
    uint96 b,
    string memory errorMessage
  ) internal pure returns (uint96) {
    require(b <= a, errorMessage);
    return a - b;
  }

  /// @dev The exact copy from CVP token
  function add96(
    uint96 a,
    uint96 b,
    string memory errorMessage
  ) internal pure returns (uint96) {
    uint96 c = a + b;
    require(c >= a, errorMessage);
    return c;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_startV","type":"uint256"},{"internalType":"uint256","name":"_durationV","type":"uint256"},{"internalType":"uint256","name":"_startT","type":"uint256"},{"internalType":"uint256","name":"_durationT","type":"uint256"},{"internalType":"address[]","name":"_memberList","type":"address[]"},{"internalType":"uint96","name":"_amountPerMember","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"},{"indexed":false,"internalType":"uint256","name":"newAlreadyClaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"votesAvailable","type":"uint256"}],"name":"ClaimTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint96","name":"lastAlreadyClaimedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"lastAlreadyClaimedTokens","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"newAlreadyClaimedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"newAlreadyClaimedTokens","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"lastMemberAdjustedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"adjustedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"diff","type":"uint96"}],"name":"ClaimVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"previousDelegate","type":"address"},{"indexed":false,"internalType":"uint96","name":"adjustedVotes","type":"uint96"}],"name":"DelegateVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevDurationT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevEndT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDurationT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEndT","type":"uint256"}],"name":"IncreaseDurationT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"members","type":"address[]"}],"name":"Init","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint96","name":"alreadyClaimedVotes","type":"uint96"},{"indexed":false,"internalType":"uint96","name":"alreadyClaimedTokens","type":"uint96"},{"indexed":false,"internalType":"address","name":"currentDelegate","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousUnclaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnclaimed","type":"uint256"}],"name":"UnclaimedBalanceChanged","type":"event"},{"inputs":[],"name":"amountPerMember","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"claimVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"delegateVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"durationT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"durationV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_now","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_amountPerMember","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_alreadyClaimed","type":"uint256"}],"name":"getAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alreadyClaimed","type":"uint256"}],"name":"getAvailableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getAvailableTokensForMember","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_atTimestamp","type":"uint256"},{"internalType":"address","name":"_member","type":"address"}],"name":"getAvailableTokensForMemberAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alreadyClaimed","type":"uint256"}],"name":"getAvailableVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getAvailableVotesForMember","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getLastCachedVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_voteHolder","type":"address"}],"name":"getVoteUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasTokenVestingEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasTokenVestingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasVoteVestingEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasVoteVestingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDurationT","type":"uint256"}],"name":"increaseDurationT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"memberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"bool","name":"transferred","type":"bool"},{"internalType":"uint96","name":"alreadyClaimedVotes","type":"uint96"},{"internalType":"uint96","name":"alreadyClaimedTokens","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startV","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":"_to","type":"address"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voteDelegations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6101606040523480156200001257600080fd5b50604051620032fa380380620032fa833981810160405260e08110156200003857600080fd5b815160208301516040808501516060860151608087015160a0880180519451969895979396929591949293820192846401000000008211156200007a57600080fd5b9083019060208201858111156200009057600080fd5b8251866020820283011164010000000082111715620000ae57600080fd5b82525081516020918201928201910280838360005b83811015620000dd578181015183820152602001620000c3565b50505050919091016040525060200151915060009050620000fd6200052c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600185116200019d576040805162461bcd60e51b815260206004820152601a60248201527f56657374696e673a20496e76616c6964206475726174696f6e56000000000000604482015290519081900360640190fd5b60018311620001f3576040805162461bcd60e51b815260206004820152601a60248201527f56657374696e673a20496e76616c6964206475726174696f6e54000000000000604482015290519081900360640190fd5b838610620002335760405162461bcd60e51b8152600401808060200182810382526021815260200180620032b56021913960400191505060405180910390fd5b6200024d83856200053060201b62001dc21790919060201c565b6200026786886200053060201b62001dc21790919060201c565b1115620002bb576040805162461bcd60e51b815260206004820152601e60248201527f56657374696e673a20526571756972657320656e6456203c3d20656e64540000604482015290519081900360640190fd5b6000816001600160601b031611620003055760405162461bcd60e51b8152600401808060200182810382526022815260200180620032936022913960400191505060405180910390fd5b6000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034157600080fd5b505afa15801562000356573d6000803e3d6000fd5b505050506040513d60208110156200036d57600080fd5b505111620003ad5760405162461bcd60e51b8152600401808060200182810382526024815260200180620032d66024913960400191505060405180910390fd5b606087901b6001600160601b03191660805260a086815260c086905285870160e052610100859052600184905583850160025581901b6001600160a01b0319166101405281518062000446576040805162461bcd60e51b815260206004820152601a60248201527f56657374696e673a20456d707479206d656d626572206c697374000000000000604482015290519081900360640190fd5b61012081905260005b81811015620004a6576001600360008684815181106200046b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200044f565b507f666d383ccf45e51cbf9b64e4e30bd3fd7ca860204a781574e5cf41ba71a0a877836040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156200050b578181015183820152602001620004f1565b505050509050019250505060405180910390a1505050505050505062000592565b3390565b6000828201838110156200058b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60805160601c60a05160c05160e05161010051610120516101405160a01c612c6b6200062860003980610d855280610e86528061143052806116d052508061066f525080610d5b5280610e1452806116af528061180352806118f7525080610e3b5280611c3d525080610df0528061145a525080610dc95280610e62528061140f525080611ba65280611da05250612c6b6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063855910871161011a578063a94f0b83116100ad578063df8de3e71161007c578063df8de3e71461057d578063e6c2e94d146105a3578063f1127ed8146105ab578063f2fde38b14610605578063fc0c546a1461062b57610206565b8063a94f0b83146104f4578063ac1f80691461051a578063ad93b23b14610522578063ca28f0d01461055757610206565b80639187cb03116100e95780639187cb031461048c578063924d8cd2146104a9578063991007dc146104c6578063a8b7d824146104ec57610206565b806385591087146103ff57806388e6c659146104255780638c5fcdda146104425780638da5cb5b1461046857610206565b8063544c7f1f1161019d5780636947d7901161016c5780636947d790146103405780636e4558f0146103665780636fcfff451461038c578063715018a6146103cb578063782d6fe1146103d357610206565b8063544c7f1f1461030457806356cb9c061461030c5780635cfa7d02146103145780635e6a1dd81461031c57610206565b806331f5ee7b116101d957806331f5ee7b146102ac578063380b8e4a146102d85780633c1d2f5e146102f457806351771f40146102fc57610206565b806308ae4b0c1461020b57806311aee380146102625780631a6952301461027c578063286f89f5146102a4575b600080fd5b6102316004803603602081101561022157600080fd5b50356001600160a01b0316610633565b60408051941515855292151560208501526001600160601b0391821684840152166060830152519081900360800190f35b61026a61066d565b60408051918252519081900360200190f35b6102a26004803603602081101561029257600080fd5b50356001600160a01b0316610691565b005b61026a610d1d565b61026a600480360360408110156102c257600080fd5b50803590602001356001600160a01b0316610d23565b6102e0610dbe565b604080519115158252519081900360200190f35b6102e0610dc7565b61026a610dee565b6102e0610e12565b6102e0610e39565b61026a610e60565b610324610e84565b604080516001600160601b039092168252519081900360200190f35b6102a26004803603602081101561035657600080fd5b50356001600160a01b0316610ea8565b61026a6004803603602081101561037c57600080fd5b50356001600160a01b0316611000565b6103b2600480360360208110156103a257600080fd5b50356001600160a01b031661104e565b6040805163ffffffff9092168252519081900360200190f35b6102a2611066565b610324600480360360408110156103e957600080fd5b506001600160a01b03813516906020013561111a565b61026a6004803603602081101561041557600080fd5b50356001600160a01b031661137b565b61026a6004803603602081101561043b57600080fd5b50356113f5565b6102a26004803603602081101561045857600080fd5b50356001600160a01b031661147f565b610470611698565b604080516001600160a01b039092168252519081900360200190f35b61026a600480360360208110156104a257600080fd5b50356116a7565b6102a2600480360360208110156104bf57600080fd5b5035611701565b61026a600480360360208110156104dc57600080fd5b50356001600160a01b031661187e565b61026a6118c4565b6104706004803603602081101561050a57600080fd5b50356001600160a01b03166118ca565b61026a6118f5565b61026a600480360360a081101561053857600080fd5b5080359060208101359060408101359060608101359060800135611919565b6104706004803603602081101561056d57600080fd5b50356001600160a01b031661197e565b6102a26004803603602081101561059357600080fd5b50356001600160a01b0316611999565b61026a611c3b565b6105dd600480360360408110156105c157600080fd5b5080356001600160a01b0316906020013563ffffffff16611c5f565b6040805163ffffffff90931683526001600160601b0390911660208301528051918290030190f35b6102a26004803603602081101561061b57600080fd5b50356001600160a01b0316611c94565b610470611d9e565b60036020526000908152604090205460ff808216916101008104909116906001600160601b03620100008204811691600160701b90041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106996126f4565b50336000908152600360209081526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811693820193909352600160701b90910490911660608201526106fe6126f4565b506001600160a01b0382166000908152600360209081526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811682850152600160701b90920490911660608083019190915283015191830151835191929115156001146107b15760405162461bcd60e51b815260040180806020018281038252602a8152602001806129da602a913960400191505060405180910390fd5b8251156107ef5760405162461bcd60e51b815260040180806020018281038252602f815260200180612733602f913960400191505060405180910390fd5b6020830151156108305760405162461bcd60e51b8152600401808060200182810382526033815260200180612c036033913960400191505060405180910390fd5b604051806080016040528060001515815260200160011515815260200160006001600160601b0316815260200160006001600160601b031681525060036000336001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a8154816001600160601b0302191690836001600160601b03160217905550606082015181600001600e6101000a8154816001600160601b0302191690836001600160601b031602179055509050506040518060800160405280600115158152602001600015158152602001826001600160601b03168152602001836001600160601b031681525060036000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a8154816001600160601b0302191690836001600160601b03160217905550606082015181600001600e6101000a8154816001600160601b0302191690836001600160601b03160217905550905050600060066000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b031690506000610a89436040518060600160405280602f8152602001612a8e602f9139611e23565b604080518082018252600080825260208083018281526001600160a01b03808e16845260048352858420848052909252939091209151825493516001600160601b0316600160201b02640100000000600160801b031963ffffffff9290921663ffffffff1990951694909417169290921790559091508216610bd1576000610b32876040015188606001516040518060600160405280602c8152602001612792602c9139611ebd565b9050610b3e3382611f2a565b60408051808201825263ffffffff80851682526001600160601b0393841660208084019182526001600160a01b038d16600081815260048352868120600182528352868120955186549451909816600160201b02640100000000600160801b03199890951663ffffffff199485161797909716939093179093559084526005909152912080549091166002179055610bf8565b6001600160a01b0387166000908152600560205260409020805463ffffffff191660011790555b3360008181526006602052604080822080546001600160a01b038c811685529284208054939091166001600160a01b0319938416179055929091528154169055610c406126f4565b506001600160a01b038088166000818152600360209081526040918290208251608081018452905460ff808216151583526101008204161515828401526001600160601b03620100008204811683860152600160701b909104811660608084019190915284518a83168152918b1693820193909352948716858401529151919333927f89880baf02655bce35a9ff5e1df9c8e582f6311e4889ca26667c1e3f889fc0fe929181900390910190a36000610d0582604001516001600160601b03166113f5565b9050610d12898383611fd1565b505050505050505050565b60015481565b6001600160a01b0381166000908152600360205260408120805460ff16610d4e576000915050610db8565b6001548154610db49186917f0000000000000000000000000000000000000000000000000000000000000000916001600160601b037f0000000000000000000000000000000000000000000000000000000000000000811692600160701b900416611919565b9150505b92915050565b60025442101590565b7f000000000000000000000000000000000000000000000000000000000000000042101590565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000042101590565b7f000000000000000000000000000000000000000000000000000000000000000042101590565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610eb06126f4565b506001600160a01b0381166000908152600360209081526040918290208251608081018452905460ff808216151580845261010083049091161515938301939093526001600160601b03620100008204811694830194909452600160701b90049092166060830152600114610f565760405162461bcd60e51b8152600401808060200182810382526024815260200180612bdf6024913960400191505060405180910390fd5b6000610f6e82604001516001600160601b03166113f5565b9050600254421115610fb15760405162461bcd60e51b815260040180806020018281038252602b81526020018061289e602b913960400191505060405180910390fd5b60008111610ff05760405162461bcd60e51b8152600401808060200182810382526025815260200180612b8d6025913960400191505060405180910390fd5b610ffb838383611fd1565b505050565b6001600160a01b0381166000908152600360205260408120805460ff1661102b576000915050611049565b8054611045906201000090046001600160601b03166113f5565b9150505b919050565b60056020526000908152604090205463ffffffff1681565b61106e612256565b6000546001600160a01b039081169116146110d0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600043821061115a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612984602a913960400191505060405180910390fd5b6001600160a01b03831660009081526005602090815260408083205460039092529091205463ffffffff9091169060ff16611199576000915050610db8565b6002544211156111ad576000915050610db8565b63ffffffff811615806111e857506001600160a01b038416600090815260046020908152604080832083805290915290205463ffffffff1683105b156111f7576000915050610db8565b6001600160a01b038416600090815260046020908152604080832063ffffffff600019860181168552925290912054168310611273576001600160a01b03841660009081526004602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610db8565b600060001982015b8163ffffffff168163ffffffff16111561133657600282820363ffffffff160481036112a561271b565b506001600160a01b038716600090815260046020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561131157602001519450610db89350505050565b805163ffffffff168711156113285781935061132f565b6001820392505b505061127b565b506001600160a01b038516600090815260046020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b6001600160a01b03811660009081526005602052604081205463ffffffff16806113a65760006113e5565b6001600160a01b0383166000908152600460209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b6001600160601b03169392505050565b600060025442111561140957506000611049565b610db8427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160601b03167f000000000000000000000000000000000000000000000000000000000000000086611919565b6114876126f4565b50336000908152600360209081526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811693820193909352600160701b90910490911660608201526001600160a01b0382166115295760405162461bcd60e51b81526004018080602001828103825260338152602001806128f66033913960400191505060405180910390fd5b8051151560011461156b5760405162461bcd60e51b815260040180806020018281038252602d8152602001806127be602d913960400191505060405180910390fd5b6000611576336118ca565b9050806001600160a01b0316836001600160a01b031614156115c95760405162461bcd60e51b81526004018080602001828103825260398152602001806128116039913960400191505060405180910390fd5b33600090815260066020908152604080832080546001600160a01b0319166001600160a01b038816179055848101516060808701518351918201909352602c80825261161e9492939261279290830139611ebd565b905061162a8282611f2a565b611634848261225a565b816001600160a01b0316846001600160a01b0316336001600160a01b03167fb62a174a641bf478889ef54cf579217791f8ef54d7cfacc0924700208519651c8460405180826001600160601b0316815260200191505060405180910390a450505050565b6000546001600160a01b031690565b6000610db8427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160601b031660015486611919565b611709612256565b6000546001600160a01b0390811691161461176b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60015481116117ab5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b39602e913960400191505060405180910390fd5b62ed4e006001548203106117f05760405162461bcd60e51b815260040180806020018281038252602c8152602001806129ae602c913960400191505060405180910390fd5b60018054600254918390559060006118287f000000000000000000000000000000000000000000000000000000000000000085611dc2565b600281905560408051858152602081018590528082018790526060810183905290519192507f5a6734ec95556a026d02eb57f42144a068a58a7fd3d700549bd22ba371d1a920919081900360800190a150505050565b6001600160a01b0381166000908152600360205260408120805460ff166118a9576000915050611049565b805461104590600160701b90046001600160601b03166116a7565b60025481565b6001600160a01b0380821660009081526006602052604081205490911680610db85782915050611049565b7f000000000000000000000000000000000000000000000000000000000000000081565b600084861161192a57506000611975565b60006119368685611dc2565b905060008188116119475787611949565b815b905060006119638661195d8a85038a6122ec565b90612345565b905061196f8186612387565b93505050505b95945050505050565b6006602052600090815260409020546001600160a01b031681565b6119a16126f4565b50336000908152600360209081526040918290208251608081018452905460ff808216151580845261010083049091161515938301939093526001600160601b03620100008204811694830194909452600160701b90049092166060830152600114611a3e5760405162461bcd60e51b8152600401808060200182810382526025815260200180612ade6025913960400191505060405180910390fd5b6000611a5682606001516001600160601b03166116a7565b905060008111611a975760405162461bcd60e51b8152600401808060200182810382526026815260200180612b676026913960400191505060405180910390fd5b6000611abb82604051806060016040528060258152602001612a04602591396123c9565b90506000611ae68460600151836040518060600160405280603081526020016127626030913961241e565b3360009081526003602052604080822080546001600160601b03808616600160701b026bffffffffffffffffffffffff60701b1990921691909117909155908701519293509091611b3791166113f5565b90506002544211611b4d57611b4d338683611fd1565b604080516001600160601b0380861682528416602082015280820183905290516001600160a01b0388169133917fe3a16c28e67957e6b807157ed70c0f99a5a5df25995ebc04ec990ecfe9017dea9181900360600190a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb87866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c1b57600080fd5b505af1158015611c2f573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600460209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b611c9c612256565b6000546001600160a01b03908116911614611cfe576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611d435760405162461bcd60e51b81526004018080602001828103825260268152602001806127eb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082820183811015611e1c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600081600160201b8410611eb55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e7a578181015183820152602001611e62565b50505050905090810190601f168015611ea75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836001600160601b0316836001600160601b031611158290611f225760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b505050900390565b6001600160a01b03821660009081526005602052604081205463ffffffff169081611f56576000611f95565b6001600160a01b0384166000908152600460209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611fbc82856040518060600160405280602e8152602001612956602e9139611ebd565b9050611fca85848484612488565b5050505050565b6000811561206c576000611ffd8360405180606001604052806025815260200161284a602591396123c9565b90506120268460400151826040518060600160405280602f815260200161286f602f913961241e565b6001600160a01b038616600090815260036020526040902080546dffffffffffffffffffffffff00001916620100006001600160601b0384160217905591506120739050565b5060408201515b60006120a084604001518560600151604051806060016040528060368152602001612b0360369139611ebd565b905060006121028360036000896001600160a01b03166001600160a01b03168152602001908152602001600020600001600e9054906101000a90046001600160601b03166040518060600160405280602d8152602001612bb2602d9139611ebd565b9050600061210f876118ca565b90506000836001600160601b0316836001600160601b031611156121615761215083856040518060600160405280602d8152602001612929602d9139611ebd565b905061215c828261225a565b6121aa565b826001600160601b0316846001600160601b031611156121aa5761219e84846040518060600160405280602d81526020016128c9602d9139611ebd565b90506121aa8282611f2a565b6040808801516060808a01516001600160a01b038c8116600081815260036020908152908790205487516001600160601b03978816815294871691850191909152858c1684880152600160701b9004851693830193909352888416608083015287841660a083015292851660c082015292519185169290917fa5f76077cbbfd3516304bdaf271d57fc3b3a07a9c7e457d1d71a608ff08f88579181900360e00190a35050505050505050565b3390565b6001600160a01b03821660009081526005602052604081205463ffffffff1690816122865760006122c5565b6001600160a01b0384166000908152600460209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611fbc82856040518060600160405280602e8152602001612a29602e913961241e565b6000826122fb57506000610db8565b8282028284828161230857fe5b0414611e1c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612abd6021913960400191505060405180910390fd5b6000611e1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061263d565b6000611e1c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126a2565b600081600160601b8410611eb55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b6000838301826001600160601b03808716908316101561247f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b50949350505050565b60006124ac43604051806060016040528060378152602001612a5760379139611e23565b905060008463ffffffff161180156124f557506001600160a01b038516600090815260046020908152604080832063ffffffff6000198901811685529252909120548282169116145b1561254f576001600160a01b0385166000908152600460209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b038516021790556125e9565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600483528781208c871682528352878120965187549451909516600160201b02640100000000600160801b031995871663ffffffff19958616179590951694909417909555938252600590935292909220805460018801909316929091169190911790555b604080516001600160601b0380861682528416602082015281516001600160a01b038816927ff6ab64320c70b20a37e43daa63d22b9c5ac61b4967b2faed4e705aafde54baaa928290030190a25050505050565b6000818361268c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b50600083858161269857fe5b0495945050505050565b60008184841115611f225760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60408051808201909152600080825260208201529056fe56657374696e673a3a7472616e736665723a20546f206164647265737320697320616c72656164792061637469766556657374696e673a3a636c61696d546f6b656e733a204e6577416c7265616479436c61696d6564206f766572666c6f7756657374696e673a3a636c61696d566f7465733a2041646a7573746564566f74657320756e646572666c6f7756657374696e673a3a64656c6567617465566f7465733a206d73672e73656e646572206e6f74206163746976654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737356657374696e673a3a64656c6567617465566f7465733a20416c72656164792064656c65676174656420746f2074686973206164647265737356657374696e673a3a5f636c61696d566f7465733a20416d6f756e74206f766572666c6f7756657374696e673a3a636c61696d566f7465733a206e6577416c7265616479436c61696d6564206f766572666c6f7756657374696e673a3a636c61696d566f7465733a20566f74652076657374696e672068617320656e64656456657374696e673a3a5f636c61696d566f7465733a204e65676174697665206469666620756e646572666c6f7756657374696e673a3a64656c6567617465566f7465733a2043616e27742064656c656761746520746f2030206164647265737356657374696e673a3a5f636c61696d566f7465733a20506f736974697665206469666620756e646572666c6f7756657374696e673a3a5f6361636865556e636c61696d65643a2053756220616d6f756e74206f766572666c6f777356657374696e673a3a6765745072696f72566f7465733a204e6f74207965742064657465726d696e656456657374696e673a3a696e6372656173654475726174696f6e543a20546f6f20626967206475726174696f6e56657374696e673a3a7472616e736665723a2046726f6d206d656d62657220697320696e61637469766556657374696e673a3a636c61696d546f6b656e733a20416d6f756e74206f766572666c6f7756657374696e673a3a5f6361636865556e636c61696d65643a2041646420616d6f756e74206f766572666c6f777356657374696e673a3a5f7772697465436865636b706f696e743a20426c6f636b206e756d6265722065786365656473203332206269747356657374696e673a3a7472616e736665723a20426c6f636b206e756d62657220657863656564732033322062697473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7756657374696e673a3a636c61696d546f6b656e733a2055736572206e6f742061637469766556657374696e673a3a5f636c61696d566f7465733a206c6173744d656d62657241646a7573746564566f746573206f766572666c6f7756657374696e673a3a696e6372656173654475726174696f6e543a20546f6f20736d616c6c206475726174696f6e56657374696e673a3a636c61696d546f6b656e733a204e6f7468696e6720746f20636c61696d56657374696e673a3a636c61696d566f7465733a204e6f7468696e6720746f20636c61696d56657374696e673a3a5f636c61696d566f7465733a2061646a7573746564566f74657320756e646572666c6f7756657374696e673a3a636c61696d566f7465733a2055736572206e6f742061637469766556657374696e673a3a7472616e736665723a20546f206164647265737320686173206265656e20616c72656164792075736564a26469706673582212208564899f18b0c00481eb32d4b3bfa5755672ec619b6f12bb9ce3f9345da125ea64736f6c634300060c003356657374696e673a20496e76616c696420616d6f756e7420706572206d656d62657256657374696e673a20526571756972657320737461727456203c2073746172745456657374696e673a204d697373696e6720737570706c79206f662074686520746f6b656e00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1000000000000000000000000000000000000000000000000000000005f7519840000000000000000000000000000000000000000000000000000000001e19140000000000000000000000000000000000000000000000000000000006065e2240000000000000000000000000000000000000000000000000000000002d259e000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000a968163f0a57b40000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000001bf8567543fa87c5107b690452dbf3f754654a2e0000000000000000000000000c7141667eb3ebc0f742784d58833b4aec1fba220000000000000000000000004e080cd5eae0eb7ac45cb20137e73ebd8335281a000000000000000000000000c00f898f3794e38cb35d7c16c051b229c5f8a8490000000000000000000000009969658c7e29ffab87516f128bee4165f8dc156100000000000000000000000001d76cd388fc76d8adc9235317d7f5ea23268e16000000000000000000000000009170c4a4b300b3b0606eeafe3fb25ae3938fb500000000000000000000000017038c92006857ccf1514bd51d067ec019f22e74000000000000000000000000906d06191c3ad2722ca74675588f1885df9e690b0000000000000000000000001bbe9fe79d6d660ea108a2da3d4e89e58477a8d6000000000000000000000000aa7a9d80971e58641442774c373c94aafee87d6600000000000000000000000006d85218d0bf4f7be9515f7af1b597b84ad21c2b000000000000000000000000725f87a90deff5e0bfdbd0c3cd9178a4563ab0cf0000000000000000000000008c03a859be9b4a5a2e54c1ab9c6b1dd79e8aa3d9000000000000000000000000b6c6230ff314f0b870cd4a05f107221c222e5997000000000000000000000000caaef1dd3c71f2ad1616c42946d88d9afe12c86b0000000000000000000000005636f2f5bc07adb7104f929b4c8bb45acb5dd9f90000000000000000000000002e8f0ca8a7f50c5e4fed15beb621f4ab396faa69000000000000000000000000a0995532092514913e5a4ddc0f588cf031d2cc72000000000000000000000000e43e081b55b7520954564818c65798b66d6af3c800000000000000000000000025112ed9705dd13d99dbdb0f79b89fdff308584f000000000000000000000000119d18911944f5b1b610fe00537d40d120802955000000000000000000000000df4b2550185d8cb0e9825ae7aca99a1ad3ad10ea000000000000000000000000c2af82d35ad66a9b4e8bd574c03ae087af0b23140000000000000000000000001bccbcda9b4d9a1a98b4c280116dd6a437f51f9200000000000000000000000056f5c0f88002670aeccde5adbad35e72f383ed180000000000000000000000008c9fa9e231856b89d271933e046447246a3ca7c600000000000000000000000028aee5f009a1413d9db29e5202ca25ebb26daf4e0000000000000000000000000684add5141f6b8d3de1179671d8dfea00b95449000000000000000000000000cc2c6d82e00e14f81ffc8e4f6a26c4522ada5a340000000000000000000000006c492bfe6117610042ef50b6d4a6d92803e82c0e000000000000000000000000899d89d7a96a1b45d60600343dcc1ec1120e42f90000000000000000000000003c87e00da8551c73032496aa60d9bd980510cbaf0000000000000000000000006c7655a0557a43348aecd75ceae12c46cd14da35000000000000000000000000040f655c0e7060d8fa9a9152301252d2e63f4f190000000000000000000000001237819df68e9808dd65d66470b6a0e5a09f125e000000000000000000000000f6d9e0a7c16c6c38e771cfd149eed85dfbe613010000000000000000000000009af2da23860914f3209e7813a3e41b5c4e12bd1a0000000000000000000000001357aeb37a7231d738ee71442290ac61a8639cc20000000000000000000000008cb38dd8b59119974804f888e373c1e8a41e671b000000000000000000000000c6ee5b29e22c6ad95041e316081689b47052dfe4000000000000000000000000505ad51cc7a26acf2123b0bde1e5fe6a315b3f3100000000000000000000000046601d5e5167c124b4d23ecdfdc79f82a3f5c7bd000000000000000000000000018a3833ccc9d365195441c32e2202f2cc9e5f16000000000000000000000000326d442be95eec5af140301631a47de7cb52c1ea00000000000000000000000031088e286046e6b2bfc436656733cb29c347bfbb000000000000000000000000674bdd830b885edf2d744cc5d167abbcb494c4c30000000000000000000000000e8b04494898be2e95f0f567ebd727bbb4acfd3f000000000000000000000000f5d0a18720692c1f9d7b8e5fcae49aca155253cf000000000000000000000000971c6b1323fbb695a57ee6694bdc2674f597b46b000000000000000000000000a081f72ef209c55420033e5e50fcff7d929e317000000000000000000000000023f0a89cfb61799e85a45172359f9be320a49b22000000000000000000000000e86b195406deb3a226696fe07d427d39ca132faf00000000000000000000000042c8680edd9575dc7c237c8ddea2b0b62a93828f00000000000000000000000019cb2bc841c97fc31cc6d6fc8df58d774519e539000000000000000000000000ac84c832617209fdc894d767371f3002cdaf8f8a00000000000000000000000088d065bf93df032c342a64cdaf84ef629f3b0277000000000000000000000000a806064443e243683852889193e1679e7faea29b0000000000000000000000000df70e1463f108e71bfc1b6d26e2de5613537a95000000000000000000000000483ae5758563afad072b92f1b935adf513ad0506000000000000000000000000007f30ff2e8bcae0b455d3b4ec92ab8add67feaf0000000000000000000000000b19cbee3c4dceff21946f0b18ac0ed2709d6fb500000000000000000000000073e8de3f2f913ecbdec97524430746acf65578a2000000000000000000000000aaeb6ca7fdf98c1284592749e9161a3c885f59bd0000000000000000000000000d4ddea3849c54e16c85cb4354943dc876e05552000000000000000000000000a40a9f6620b144135764b9922f73005f2f103b170000000000000000000000003926f74bbaa0f0a2bbaa664ac01ecd6a4534be0500000000000000000000000000326e37cef76788f6b0cf643c94481d60bd3d5800000000000000000000000084a2c92a77106ece8f1b03ee7b88c71babffb453000000000000000000000000279a8aedcca46f435b7aec6c6240421042462eec000000000000000000000000d61c606cf0ca54554cc86ee41ed895aa109ab038000000000000000000000000ef59c1500e3299dcec6af5fe39b01674318425da000000000000000000000000f6340ae60be2430c873703e57112482c3237f655000000000000000000000000ad5471c3b31d174cb4dad3b7d048b7fbe347d7b1000000000000000000000000b0325dbe7fa891436e83a094f9f12848c78e449b000000000000000000000000bc8d9fd142eb75fbf93b395723893af9c9f8580f000000000000000000000000b7376a7f8cacaaa994ccb8f78c542782cbadd89e0000000000000000000000002da8273c586c9488096a0a7f117efe95f9905ed7000000000000000000000000c11f1010c6b75cda68776528a94618579ef21c12000000000000000000000000ff1489a5c9c86eb00adfbd8ef67f84f6c01c6246000000000000000000000000f1c1cdf8a84a5e042eb2213623adaec37fe21eb600000000000000000000000068a37c633c22464917fd0d50532be0811617123b0000000000000000000000001464d46abd192baec1d4cb7b60415b02d346dfde0000000000000000000000005cb1d4b99f972ccdeccefcfec638d72f9629b5d0000000000000000000000000225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d000000000000000000000000fb38d870055bed6f98a7994bb9d29714a0e3558400000000000000000000000062a94a3bf2dfc247f5dc861387336eb17a2e1141000000000000000000000000d3ac70f86a4dd8051876e847e1059eb6eb5586ed0000000000000000000000002a2bb3320614955fc1f6da98e3572c6bf9d9d1c9000000000000000000000000a4dd0533008e17b65b55c916d947a937783b57b1000000000000000000000000738a9aa93974c7f82d97adfbe2bc80046b347b1100000000000000000000000084740f97aea62c5dc36756dfd9f749412534220e000000000000000000000000a834e439a41f1f72ac2af9edb8ad825d9830e2c00000000000000000000000009694c964e2ce3624ff4d1f91e8d1f177c18dac6f000000000000000000000000695f498407f96c0185709acafa01c3a00771c896000000000000000000000000170c5cadb50dc163db0dd786c96d7ecb5e24a379000000000000000000000000f3e3793fda3c8f836f3a6d778c23cb5c04d1909a000000000000000000000000691118f93b549cbb3678bfe7c957546cbfc594de0000000000000000000000002a8763577f8ab360bade50ab326b9d18d1d509d0000000000000000000000000d61aae0a148ec5e6005143734f9841ebdcbb2f1b000000000000000000000000b6d52aa63532a0d1c50b3bb782e6b511bd9736450000000000000000000000007ac8481402ee760d46201ebab4b44388d1834a4d0000000000000000000000008517d50cdd95aba21b94968a98d526b743174497000000000000000000000000edfbe70e9c10b23b955988df06488b8dfd543ddd0000000000000000000000003e1d23be803c31d2c44efe84fb96659d12c49fd50000000000000000000000005e0a086b8ea7bd6ac3098b61005ae55b1381154a000000000000000000000000d4b6ca3f34fdf880646247c8ca1b458c3d295422000000000000000000000000c16ab72a9dce2e458f5d33211f1c6844dbb2ce4e000000000000000000000000481e012260715b57e162bad30423ab639781421a000000000000000000000000dcd38bc4f5aef76a1e1b12b1774410a6e175c44e000000000000000000000000331c12bbe5111763cfe5cdc6f93876b206adf99b000000000000000000000000f3b1b6e83be4d55695f1d30ac3d307d9d5ca98ff0000000000000000000000000a1908b732884449b819e146f257fb6018d00ab100000000000000000000000043732b04bf1b2a42c9925f5c1d9f3535c6ea82ed000000000000000000000000e921906a819eaec8df8d1ea395bed1add27605f600000000000000000000000012e3567224bf39a567b00197b208423998a24da30000000000000000000000004295f78bba333352965b5ed08dc5b4c6833baf7d000000000000000000000000f190463c5e63f68995e1d1e06b22f16b90172ea9000000000000000000000000fcac0c65c2e9ec6c4f5c05d6e5c6e06b5c0261ca0000000000000000000000001df2bca072b7bf8a214ff9e6ee5bca9d60098974000000000000000000000000f519c842210abb71c6ed4cc26d3aabee9853beff000000000000000000000000a7bb2a00f6a23fbc89c34eec95ddb071683af92700000000000000000000000014e9e9f0a8d9bac4cad8c1ce339826f42924e5420000000000000000000000000b858e239ccf09d4411703b383db9f7c737cb082000000000000000000000000737d3c588da96328c20327bc5d04e6beb73b453d000000000000000000000000779e9717c7040eca7ce5a4749cf960c0441aa1510000000000000000000000006a69c12128493446ab782d9276c27fb511395a6e0000000000000000000000006c3e8b4dc0ccaa9a3ae535465b0893e3b029bb00000000000000000000000000866d9eb467b5ebd8c6464cceccc367d95ccfd31c000000000000000000000000658357017948986a7ee7c714fa37138b7fe1317d000000000000000000000000b4dc010733ea4f3b42f71244c4b2357129d971c80000000000000000000000007f18176ef0bc3beda3246e0153e76b4b4786037d000000000000000000000000d800fc90efa8532c77ed14102f8280e904c965980000000000000000000000001e70710718e6df8a486dff4ce6c8cb4487b4fc300000000000000000000000009b733a14c4acb7e255f1af4b268ad9b330e8b8f4000000000000000000000000f9342660f2ba86270c6854c7f59773a20a8f5def00000000000000000000000088fb3d509fc49b515bfeb04e23f53ba3395639810000000000000000000000009516c6ac7bc8be957148f94f894973028378b36c00000000000000000000000089ab8578326ff2e0dc5a2c0617f74ccb41532e410000000000000000000000006fc868df4b7328eb54f92b5993f45cf732842679000000000000000000000000867db38c83f4287a71ffd0cdfba6ffae93150ff7000000000000000000000000de7a82fe90eab3f5235552f2137402a69d53fb9400000000000000000000000031de3ad9fbfaeb90348d5cb8a101fbb68f28ceff000000000000000000000000f800b41ea9db0dff446d2a25cc8ff7ae0164281800000000000000000000000097116fc08e002e79736f641efb164114942c0732000000000000000000000000554976402a8aa7020814602c49f8a6e3bea2a78300000000000000000000000004a15d06c0c420a4e568cc40ccd80f71f6df69f0000000000000000000000000975b77dbc27a0eed46b44a09323af252f27158f800000000000000000000000040a9066ebb98950ff64481cc8d1bcf5fd0c28737000000000000000000000000fb17199bb361daed5b8df4e0d263f2f6cb990c500000000000000000000000003b0e6b8e5f72df429e58c0885806f2da874aa1de000000000000000000000000424182a114b5bd42638791b6a6f11fc1d6027e030000000000000000000000007111cbd16ae9ecc1910bb478c73cd9881821773400000000000000000000000052e1e58db9151d8a0f1dcd8cb3b00948df114b8e0000000000000000000000006a52f086844cd1a19f538de2dc8f84a886e313a800000000000000000000000061751bc401f4eabe10a238661b4a60ba84910059000000000000000000000000be7ae9e43d4373bce5b2d9195bbe31f6a7a0db6f000000000000000000000000052684c9ff39bbf50e8eff902fdff1adc64145f5000000000000000000000000c939e0238be5182f3a1c1db5f53fa38178e360f00000000000000000000000002569448fef8b66f86fae809cdce53b5151b3d0c5000000000000000000000000c20d543f892dbb1900255f2e42167a0b49ad0543000000000000000000000000c71a8ff766b5ea918c33df155a9f77b949fa7c2d00000000000000000000000066fe8f934b0ad44d6234d896fe4dbbf25a9294a100000000000000000000000010ff2d60924eb9e759904a4c960766dbac212ebd0000000000000000000000000d9626b3a4f6eefc91f7ae1e2ead163701aaae3c000000000000000000000000d560e115d8a55f24448c5887b5c05a6c4ab44753000000000000000000000000e854f8b14262f64e10dab03f9ba5fc37c8eb2a72000000000000000000000000474d4cfc8c28b5d902abbf8efb24743291220090000000000000000000000000cde638127345ba1b50810f4e499f3b9c1edecbd6000000000000000000000000c5ad46f49645aee062e0639b860b2919f8f2fe10000000000000000000000000fbe24b3b2dbff7a48d77b146623dfc621309f4cc0000000000000000000000004bf24d2ccdb772f344ad0eec6d3716e5ef5a84b7000000000000000000000000e58b8eb30fe6e5cef1825b98cf533b17408da8bd000000000000000000000000a16252eb09608b91c4c6fcdc1fc19809c5c55c350000000000000000000000002c4723e2f00a0bcf229553c466630bcda04bbe41000000000000000000000000f11ffaf3dd2c39df6f2ad661d5ffe60daa0fc9fd000000000000000000000000d3cd153156e97638b7fe71a8dd4a9a5c3a59a0200000000000000000000000007fb2eb7bcd35c48248789884ae803095fb3e93380000000000000000000000006cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09000000000000000000000000375afe51c5d9313ff20504aa3094844400be34090000000000000000000000004916efbf56bcaea1130b2a631f6f093095f614a20000000000000000000000001fabdc9da117d1392aab80c69ec141e4d579341c0000000000000000000000006be2e15d6749f3bf984e7ae3efce46a4d6292f540000000000000000000000009fb753be58cf3354fc4684b0d59aba4edf1a90a9000000000000000000000000ace1ae1a4db3adec22b3e1173afe852a5a6fe40a000000000000000000000000d6a5ade2b16ac1d72a1e2833b573ccda6fedece50000000000000000000000002cb490343ae7166357180ac75a9958f9c1c267b0000000000000000000000000b4ab322fb2af74d84be16c70adc5402f402c9af500000000000000000000000058fa2617627a677bd29d5ab11880d066111b8d0e00000000000000000000000048b2a8795f2ca538d63e9ff465c4e39d2b6b3a54000000000000000000000000e92ed178b584e54a4148d85bd00ddb2b3ff099fe0000000000000000000000000282807be542b828e840da354b32cc777444ec07

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063855910871161011a578063a94f0b83116100ad578063df8de3e71161007c578063df8de3e71461057d578063e6c2e94d146105a3578063f1127ed8146105ab578063f2fde38b14610605578063fc0c546a1461062b57610206565b8063a94f0b83146104f4578063ac1f80691461051a578063ad93b23b14610522578063ca28f0d01461055757610206565b80639187cb03116100e95780639187cb031461048c578063924d8cd2146104a9578063991007dc146104c6578063a8b7d824146104ec57610206565b806385591087146103ff57806388e6c659146104255780638c5fcdda146104425780638da5cb5b1461046857610206565b8063544c7f1f1161019d5780636947d7901161016c5780636947d790146103405780636e4558f0146103665780636fcfff451461038c578063715018a6146103cb578063782d6fe1146103d357610206565b8063544c7f1f1461030457806356cb9c061461030c5780635cfa7d02146103145780635e6a1dd81461031c57610206565b806331f5ee7b116101d957806331f5ee7b146102ac578063380b8e4a146102d85780633c1d2f5e146102f457806351771f40146102fc57610206565b806308ae4b0c1461020b57806311aee380146102625780631a6952301461027c578063286f89f5146102a4575b600080fd5b6102316004803603602081101561022157600080fd5b50356001600160a01b0316610633565b60408051941515855292151560208501526001600160601b0391821684840152166060830152519081900360800190f35b61026a61066d565b60408051918252519081900360200190f35b6102a26004803603602081101561029257600080fd5b50356001600160a01b0316610691565b005b61026a610d1d565b61026a600480360360408110156102c257600080fd5b50803590602001356001600160a01b0316610d23565b6102e0610dbe565b604080519115158252519081900360200190f35b6102e0610dc7565b61026a610dee565b6102e0610e12565b6102e0610e39565b61026a610e60565b610324610e84565b604080516001600160601b039092168252519081900360200190f35b6102a26004803603602081101561035657600080fd5b50356001600160a01b0316610ea8565b61026a6004803603602081101561037c57600080fd5b50356001600160a01b0316611000565b6103b2600480360360208110156103a257600080fd5b50356001600160a01b031661104e565b6040805163ffffffff9092168252519081900360200190f35b6102a2611066565b610324600480360360408110156103e957600080fd5b506001600160a01b03813516906020013561111a565b61026a6004803603602081101561041557600080fd5b50356001600160a01b031661137b565b61026a6004803603602081101561043b57600080fd5b50356113f5565b6102a26004803603602081101561045857600080fd5b50356001600160a01b031661147f565b610470611698565b604080516001600160a01b039092168252519081900360200190f35b61026a600480360360208110156104a257600080fd5b50356116a7565b6102a2600480360360208110156104bf57600080fd5b5035611701565b61026a600480360360208110156104dc57600080fd5b50356001600160a01b031661187e565b61026a6118c4565b6104706004803603602081101561050a57600080fd5b50356001600160a01b03166118ca565b61026a6118f5565b61026a600480360360a081101561053857600080fd5b5080359060208101359060408101359060608101359060800135611919565b6104706004803603602081101561056d57600080fd5b50356001600160a01b031661197e565b6102a26004803603602081101561059357600080fd5b50356001600160a01b0316611999565b61026a611c3b565b6105dd600480360360408110156105c157600080fd5b5080356001600160a01b0316906020013563ffffffff16611c5f565b6040805163ffffffff90931683526001600160601b0390911660208301528051918290030190f35b6102a26004803603602081101561061b57600080fd5b50356001600160a01b0316611c94565b610470611d9e565b60036020526000908152604090205460ff808216916101008104909116906001600160601b03620100008204811691600160701b90041684565b7f00000000000000000000000000000000000000000000000000000000000000c081565b6106996126f4565b50336000908152600360209081526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811693820193909352600160701b90910490911660608201526106fe6126f4565b506001600160a01b0382166000908152600360209081526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811682850152600160701b90920490911660608083019190915283015191830151835191929115156001146107b15760405162461bcd60e51b815260040180806020018281038252602a8152602001806129da602a913960400191505060405180910390fd5b8251156107ef5760405162461bcd60e51b815260040180806020018281038252602f815260200180612733602f913960400191505060405180910390fd5b6020830151156108305760405162461bcd60e51b8152600401808060200182810382526033815260200180612c036033913960400191505060405180910390fd5b604051806080016040528060001515815260200160011515815260200160006001600160601b0316815260200160006001600160601b031681525060036000336001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a8154816001600160601b0302191690836001600160601b03160217905550606082015181600001600e6101000a8154816001600160601b0302191690836001600160601b031602179055509050506040518060800160405280600115158152602001600015158152602001826001600160601b03168152602001836001600160601b031681525060036000876001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a8154816001600160601b0302191690836001600160601b03160217905550606082015181600001600e6101000a8154816001600160601b0302191690836001600160601b03160217905550905050600060066000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b031690506000610a89436040518060600160405280602f8152602001612a8e602f9139611e23565b604080518082018252600080825260208083018281526001600160a01b03808e16845260048352858420848052909252939091209151825493516001600160601b0316600160201b02640100000000600160801b031963ffffffff9290921663ffffffff1990951694909417169290921790559091508216610bd1576000610b32876040015188606001516040518060600160405280602c8152602001612792602c9139611ebd565b9050610b3e3382611f2a565b60408051808201825263ffffffff80851682526001600160601b0393841660208084019182526001600160a01b038d16600081815260048352868120600182528352868120955186549451909816600160201b02640100000000600160801b03199890951663ffffffff199485161797909716939093179093559084526005909152912080549091166002179055610bf8565b6001600160a01b0387166000908152600560205260409020805463ffffffff191660011790555b3360008181526006602052604080822080546001600160a01b038c811685529284208054939091166001600160a01b0319938416179055929091528154169055610c406126f4565b506001600160a01b038088166000818152600360209081526040918290208251608081018452905460ff808216151583526101008204161515828401526001600160601b03620100008204811683860152600160701b909104811660608084019190915284518a83168152918b1693820193909352948716858401529151919333927f89880baf02655bce35a9ff5e1df9c8e582f6311e4889ca26667c1e3f889fc0fe929181900390910190a36000610d0582604001516001600160601b03166113f5565b9050610d12898383611fd1565b505050505050505050565b60015481565b6001600160a01b0381166000908152600360205260408120805460ff16610d4e576000915050610db8565b6001548154610db49186917f000000000000000000000000000000000000000000000000000000006065e224916001600160601b037f000000000000000000000000000000000000000000000a968163f0a57b400000811692600160701b900416611919565b9150505b92915050565b60025442101590565b7f000000000000000000000000000000000000000000000000000000005f75198442101590565b7f0000000000000000000000000000000000000000000000000000000001e1914081565b7f000000000000000000000000000000000000000000000000000000006065e22442101590565b7f000000000000000000000000000000000000000000000000000000006156aac442101590565b7f000000000000000000000000000000000000000000000000000000005f75198481565b7f000000000000000000000000000000000000000000000a968163f0a57b40000081565b610eb06126f4565b506001600160a01b0381166000908152600360209081526040918290208251608081018452905460ff808216151580845261010083049091161515938301939093526001600160601b03620100008204811694830194909452600160701b90049092166060830152600114610f565760405162461bcd60e51b8152600401808060200182810382526024815260200180612bdf6024913960400191505060405180910390fd5b6000610f6e82604001516001600160601b03166113f5565b9050600254421115610fb15760405162461bcd60e51b815260040180806020018281038252602b81526020018061289e602b913960400191505060405180910390fd5b60008111610ff05760405162461bcd60e51b8152600401808060200182810382526025815260200180612b8d6025913960400191505060405180910390fd5b610ffb838383611fd1565b505050565b6001600160a01b0381166000908152600360205260408120805460ff1661102b576000915050611049565b8054611045906201000090046001600160601b03166113f5565b9150505b919050565b60056020526000908152604090205463ffffffff1681565b61106e612256565b6000546001600160a01b039081169116146110d0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600043821061115a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612984602a913960400191505060405180910390fd5b6001600160a01b03831660009081526005602090815260408083205460039092529091205463ffffffff9091169060ff16611199576000915050610db8565b6002544211156111ad576000915050610db8565b63ffffffff811615806111e857506001600160a01b038416600090815260046020908152604080832083805290915290205463ffffffff1683105b156111f7576000915050610db8565b6001600160a01b038416600090815260046020908152604080832063ffffffff600019860181168552925290912054168310611273576001600160a01b03841660009081526004602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610db8565b600060001982015b8163ffffffff168163ffffffff16111561133657600282820363ffffffff160481036112a561271b565b506001600160a01b038716600090815260046020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561131157602001519450610db89350505050565b805163ffffffff168711156113285781935061132f565b6001820392505b505061127b565b506001600160a01b038516600090815260046020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b6001600160a01b03811660009081526005602052604081205463ffffffff16806113a65760006113e5565b6001600160a01b0383166000908152600460209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b6001600160601b03169392505050565b600060025442111561140957506000611049565b610db8427f000000000000000000000000000000000000000000000000000000005f7519847f000000000000000000000000000000000000000000000a968163f0a57b4000006001600160601b03167f0000000000000000000000000000000000000000000000000000000001e1914086611919565b6114876126f4565b50336000908152600360209081526040918290208251608081018452905460ff808216151583526101008204161515928201929092526001600160601b03620100008304811693820193909352600160701b90910490911660608201526001600160a01b0382166115295760405162461bcd60e51b81526004018080602001828103825260338152602001806128f66033913960400191505060405180910390fd5b8051151560011461156b5760405162461bcd60e51b815260040180806020018281038252602d8152602001806127be602d913960400191505060405180910390fd5b6000611576336118ca565b9050806001600160a01b0316836001600160a01b031614156115c95760405162461bcd60e51b81526004018080602001828103825260398152602001806128116039913960400191505060405180910390fd5b33600090815260066020908152604080832080546001600160a01b0319166001600160a01b038816179055848101516060808701518351918201909352602c80825261161e9492939261279290830139611ebd565b905061162a8282611f2a565b611634848261225a565b816001600160a01b0316846001600160a01b0316336001600160a01b03167fb62a174a641bf478889ef54cf579217791f8ef54d7cfacc0924700208519651c8460405180826001600160601b0316815260200191505060405180910390a450505050565b6000546001600160a01b031690565b6000610db8427f000000000000000000000000000000000000000000000000000000006065e2247f000000000000000000000000000000000000000000000a968163f0a57b4000006001600160601b031660015486611919565b611709612256565b6000546001600160a01b0390811691161461176b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60015481116117ab5760405162461bcd60e51b815260040180806020018281038252602e815260200180612b39602e913960400191505060405180910390fd5b62ed4e006001548203106117f05760405162461bcd60e51b815260040180806020018281038252602c8152602001806129ae602c913960400191505060405180910390fd5b60018054600254918390559060006118287f000000000000000000000000000000000000000000000000000000006065e22485611dc2565b600281905560408051858152602081018590528082018790526060810183905290519192507f5a6734ec95556a026d02eb57f42144a068a58a7fd3d700549bd22ba371d1a920919081900360800190a150505050565b6001600160a01b0381166000908152600360205260408120805460ff166118a9576000915050611049565b805461104590600160701b90046001600160601b03166116a7565b60025481565b6001600160a01b0380821660009081526006602052604081205490911680610db85782915050611049565b7f000000000000000000000000000000000000000000000000000000006065e22481565b600084861161192a57506000611975565b60006119368685611dc2565b905060008188116119475787611949565b815b905060006119638661195d8a85038a6122ec565b90612345565b905061196f8186612387565b93505050505b95945050505050565b6006602052600090815260409020546001600160a01b031681565b6119a16126f4565b50336000908152600360209081526040918290208251608081018452905460ff808216151580845261010083049091161515938301939093526001600160601b03620100008204811694830194909452600160701b90049092166060830152600114611a3e5760405162461bcd60e51b8152600401808060200182810382526025815260200180612ade6025913960400191505060405180910390fd5b6000611a5682606001516001600160601b03166116a7565b905060008111611a975760405162461bcd60e51b8152600401808060200182810382526026815260200180612b676026913960400191505060405180910390fd5b6000611abb82604051806060016040528060258152602001612a04602591396123c9565b90506000611ae68460600151836040518060600160405280603081526020016127626030913961241e565b3360009081526003602052604080822080546001600160601b03808616600160701b026bffffffffffffffffffffffff60701b1990921691909117909155908701519293509091611b3791166113f5565b90506002544211611b4d57611b4d338683611fd1565b604080516001600160601b0380861682528416602082015280820183905290516001600160a01b0388169133917fe3a16c28e67957e6b807157ed70c0f99a5a5df25995ebc04ec990ecfe9017dea9181900360600190a37f00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca16001600160a01b031663a9059cbb87866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c1b57600080fd5b505af1158015611c2f573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000006156aac481565b600460209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b611c9c612256565b6000546001600160a01b03908116911614611cfe576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611d435760405162461bcd60e51b81526004018080602001828103825260268152602001806127eb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca181565b600082820183811015611e1c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600081600160201b8410611eb55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e7a578181015183820152602001611e62565b50505050905090810190601f168015611ea75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836001600160601b0316836001600160601b031611158290611f225760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b505050900390565b6001600160a01b03821660009081526005602052604081205463ffffffff169081611f56576000611f95565b6001600160a01b0384166000908152600460209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611fbc82856040518060600160405280602e8152602001612956602e9139611ebd565b9050611fca85848484612488565b5050505050565b6000811561206c576000611ffd8360405180606001604052806025815260200161284a602591396123c9565b90506120268460400151826040518060600160405280602f815260200161286f602f913961241e565b6001600160a01b038616600090815260036020526040902080546dffffffffffffffffffffffff00001916620100006001600160601b0384160217905591506120739050565b5060408201515b60006120a084604001518560600151604051806060016040528060368152602001612b0360369139611ebd565b905060006121028360036000896001600160a01b03166001600160a01b03168152602001908152602001600020600001600e9054906101000a90046001600160601b03166040518060600160405280602d8152602001612bb2602d9139611ebd565b9050600061210f876118ca565b90506000836001600160601b0316836001600160601b031611156121615761215083856040518060600160405280602d8152602001612929602d9139611ebd565b905061215c828261225a565b6121aa565b826001600160601b0316846001600160601b031611156121aa5761219e84846040518060600160405280602d81526020016128c9602d9139611ebd565b90506121aa8282611f2a565b6040808801516060808a01516001600160a01b038c8116600081815260036020908152908790205487516001600160601b03978816815294871691850191909152858c1684880152600160701b9004851693830193909352888416608083015287841660a083015292851660c082015292519185169290917fa5f76077cbbfd3516304bdaf271d57fc3b3a07a9c7e457d1d71a608ff08f88579181900360e00190a35050505050505050565b3390565b6001600160a01b03821660009081526005602052604081205463ffffffff1690816122865760006122c5565b6001600160a01b0384166000908152600460209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611fbc82856040518060600160405280602e8152602001612a29602e913961241e565b6000826122fb57506000610db8565b8282028284828161230857fe5b0414611e1c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612abd6021913960400191505060405180910390fd5b6000611e1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061263d565b6000611e1c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126a2565b600081600160601b8410611eb55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b6000838301826001600160601b03808716908316101561247f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b50949350505050565b60006124ac43604051806060016040528060378152602001612a5760379139611e23565b905060008463ffffffff161180156124f557506001600160a01b038516600090815260046020908152604080832063ffffffff6000198901811685529252909120548282169116145b1561254f576001600160a01b0385166000908152600460209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b038516021790556125e9565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600483528781208c871682528352878120965187549451909516600160201b02640100000000600160801b031995871663ffffffff19958616179590951694909417909555938252600590935292909220805460018801909316929091169190911790555b604080516001600160601b0380861682528416602082015281516001600160a01b038816927ff6ab64320c70b20a37e43daa63d22b9c5ac61b4967b2faed4e705aafde54baaa928290030190a25050505050565b6000818361268c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b50600083858161269857fe5b0495945050505050565b60008184841115611f225760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e7a578181015183820152602001611e62565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60408051808201909152600080825260208201529056fe56657374696e673a3a7472616e736665723a20546f206164647265737320697320616c72656164792061637469766556657374696e673a3a636c61696d546f6b656e733a204e6577416c7265616479436c61696d6564206f766572666c6f7756657374696e673a3a636c61696d566f7465733a2041646a7573746564566f74657320756e646572666c6f7756657374696e673a3a64656c6567617465566f7465733a206d73672e73656e646572206e6f74206163746976654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737356657374696e673a3a64656c6567617465566f7465733a20416c72656164792064656c65676174656420746f2074686973206164647265737356657374696e673a3a5f636c61696d566f7465733a20416d6f756e74206f766572666c6f7756657374696e673a3a636c61696d566f7465733a206e6577416c7265616479436c61696d6564206f766572666c6f7756657374696e673a3a636c61696d566f7465733a20566f74652076657374696e672068617320656e64656456657374696e673a3a5f636c61696d566f7465733a204e65676174697665206469666620756e646572666c6f7756657374696e673a3a64656c6567617465566f7465733a2043616e27742064656c656761746520746f2030206164647265737356657374696e673a3a5f636c61696d566f7465733a20506f736974697665206469666620756e646572666c6f7756657374696e673a3a5f6361636865556e636c61696d65643a2053756220616d6f756e74206f766572666c6f777356657374696e673a3a6765745072696f72566f7465733a204e6f74207965742064657465726d696e656456657374696e673a3a696e6372656173654475726174696f6e543a20546f6f20626967206475726174696f6e56657374696e673a3a7472616e736665723a2046726f6d206d656d62657220697320696e61637469766556657374696e673a3a636c61696d546f6b656e733a20416d6f756e74206f766572666c6f7756657374696e673a3a5f6361636865556e636c61696d65643a2041646420616d6f756e74206f766572666c6f777356657374696e673a3a5f7772697465436865636b706f696e743a20426c6f636b206e756d6265722065786365656473203332206269747356657374696e673a3a7472616e736665723a20426c6f636b206e756d62657220657863656564732033322062697473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7756657374696e673a3a636c61696d546f6b656e733a2055736572206e6f742061637469766556657374696e673a3a5f636c61696d566f7465733a206c6173744d656d62657241646a7573746564566f746573206f766572666c6f7756657374696e673a3a696e6372656173654475726174696f6e543a20546f6f20736d616c6c206475726174696f6e56657374696e673a3a636c61696d546f6b656e733a204e6f7468696e6720746f20636c61696d56657374696e673a3a636c61696d566f7465733a204e6f7468696e6720746f20636c61696d56657374696e673a3a5f636c61696d566f7465733a2061646a7573746564566f74657320756e646572666c6f7756657374696e673a3a636c61696d566f7465733a2055736572206e6f742061637469766556657374696e673a3a7472616e736665723a20546f206164647265737320686173206265656e20616c72656164792075736564a26469706673582212208564899f18b0c00481eb32d4b3bfa5755672ec619b6f12bb9ce3f9345da125ea64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1000000000000000000000000000000000000000000000000000000005f7519840000000000000000000000000000000000000000000000000000000001e19140000000000000000000000000000000000000000000000000000000006065e2240000000000000000000000000000000000000000000000000000000002d259e000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000a968163f0a57b40000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000001bf8567543fa87c5107b690452dbf3f754654a2e0000000000000000000000000c7141667eb3ebc0f742784d58833b4aec1fba220000000000000000000000004e080cd5eae0eb7ac45cb20137e73ebd8335281a000000000000000000000000c00f898f3794e38cb35d7c16c051b229c5f8a8490000000000000000000000009969658c7e29ffab87516f128bee4165f8dc156100000000000000000000000001d76cd388fc76d8adc9235317d7f5ea23268e16000000000000000000000000009170c4a4b300b3b0606eeafe3fb25ae3938fb500000000000000000000000017038c92006857ccf1514bd51d067ec019f22e74000000000000000000000000906d06191c3ad2722ca74675588f1885df9e690b0000000000000000000000001bbe9fe79d6d660ea108a2da3d4e89e58477a8d6000000000000000000000000aa7a9d80971e58641442774c373c94aafee87d6600000000000000000000000006d85218d0bf4f7be9515f7af1b597b84ad21c2b000000000000000000000000725f87a90deff5e0bfdbd0c3cd9178a4563ab0cf0000000000000000000000008c03a859be9b4a5a2e54c1ab9c6b1dd79e8aa3d9000000000000000000000000b6c6230ff314f0b870cd4a05f107221c222e5997000000000000000000000000caaef1dd3c71f2ad1616c42946d88d9afe12c86b0000000000000000000000005636f2f5bc07adb7104f929b4c8bb45acb5dd9f90000000000000000000000002e8f0ca8a7f50c5e4fed15beb621f4ab396faa69000000000000000000000000a0995532092514913e5a4ddc0f588cf031d2cc72000000000000000000000000e43e081b55b7520954564818c65798b66d6af3c800000000000000000000000025112ed9705dd13d99dbdb0f79b89fdff308584f000000000000000000000000119d18911944f5b1b610fe00537d40d120802955000000000000000000000000df4b2550185d8cb0e9825ae7aca99a1ad3ad10ea000000000000000000000000c2af82d35ad66a9b4e8bd574c03ae087af0b23140000000000000000000000001bccbcda9b4d9a1a98b4c280116dd6a437f51f9200000000000000000000000056f5c0f88002670aeccde5adbad35e72f383ed180000000000000000000000008c9fa9e231856b89d271933e046447246a3ca7c600000000000000000000000028aee5f009a1413d9db29e5202ca25ebb26daf4e0000000000000000000000000684add5141f6b8d3de1179671d8dfea00b95449000000000000000000000000cc2c6d82e00e14f81ffc8e4f6a26c4522ada5a340000000000000000000000006c492bfe6117610042ef50b6d4a6d92803e82c0e000000000000000000000000899d89d7a96a1b45d60600343dcc1ec1120e42f90000000000000000000000003c87e00da8551c73032496aa60d9bd980510cbaf0000000000000000000000006c7655a0557a43348aecd75ceae12c46cd14da35000000000000000000000000040f655c0e7060d8fa9a9152301252d2e63f4f190000000000000000000000001237819df68e9808dd65d66470b6a0e5a09f125e000000000000000000000000f6d9e0a7c16c6c38e771cfd149eed85dfbe613010000000000000000000000009af2da23860914f3209e7813a3e41b5c4e12bd1a0000000000000000000000001357aeb37a7231d738ee71442290ac61a8639cc20000000000000000000000008cb38dd8b59119974804f888e373c1e8a41e671b000000000000000000000000c6ee5b29e22c6ad95041e316081689b47052dfe4000000000000000000000000505ad51cc7a26acf2123b0bde1e5fe6a315b3f3100000000000000000000000046601d5e5167c124b4d23ecdfdc79f82a3f5c7bd000000000000000000000000018a3833ccc9d365195441c32e2202f2cc9e5f16000000000000000000000000326d442be95eec5af140301631a47de7cb52c1ea00000000000000000000000031088e286046e6b2bfc436656733cb29c347bfbb000000000000000000000000674bdd830b885edf2d744cc5d167abbcb494c4c30000000000000000000000000e8b04494898be2e95f0f567ebd727bbb4acfd3f000000000000000000000000f5d0a18720692c1f9d7b8e5fcae49aca155253cf000000000000000000000000971c6b1323fbb695a57ee6694bdc2674f597b46b000000000000000000000000a081f72ef209c55420033e5e50fcff7d929e317000000000000000000000000023f0a89cfb61799e85a45172359f9be320a49b22000000000000000000000000e86b195406deb3a226696fe07d427d39ca132faf00000000000000000000000042c8680edd9575dc7c237c8ddea2b0b62a93828f00000000000000000000000019cb2bc841c97fc31cc6d6fc8df58d774519e539000000000000000000000000ac84c832617209fdc894d767371f3002cdaf8f8a00000000000000000000000088d065bf93df032c342a64cdaf84ef629f3b0277000000000000000000000000a806064443e243683852889193e1679e7faea29b0000000000000000000000000df70e1463f108e71bfc1b6d26e2de5613537a95000000000000000000000000483ae5758563afad072b92f1b935adf513ad0506000000000000000000000000007f30ff2e8bcae0b455d3b4ec92ab8add67feaf0000000000000000000000000b19cbee3c4dceff21946f0b18ac0ed2709d6fb500000000000000000000000073e8de3f2f913ecbdec97524430746acf65578a2000000000000000000000000aaeb6ca7fdf98c1284592749e9161a3c885f59bd0000000000000000000000000d4ddea3849c54e16c85cb4354943dc876e05552000000000000000000000000a40a9f6620b144135764b9922f73005f2f103b170000000000000000000000003926f74bbaa0f0a2bbaa664ac01ecd6a4534be0500000000000000000000000000326e37cef76788f6b0cf643c94481d60bd3d5800000000000000000000000084a2c92a77106ece8f1b03ee7b88c71babffb453000000000000000000000000279a8aedcca46f435b7aec6c6240421042462eec000000000000000000000000d61c606cf0ca54554cc86ee41ed895aa109ab038000000000000000000000000ef59c1500e3299dcec6af5fe39b01674318425da000000000000000000000000f6340ae60be2430c873703e57112482c3237f655000000000000000000000000ad5471c3b31d174cb4dad3b7d048b7fbe347d7b1000000000000000000000000b0325dbe7fa891436e83a094f9f12848c78e449b000000000000000000000000bc8d9fd142eb75fbf93b395723893af9c9f8580f000000000000000000000000b7376a7f8cacaaa994ccb8f78c542782cbadd89e0000000000000000000000002da8273c586c9488096a0a7f117efe95f9905ed7000000000000000000000000c11f1010c6b75cda68776528a94618579ef21c12000000000000000000000000ff1489a5c9c86eb00adfbd8ef67f84f6c01c6246000000000000000000000000f1c1cdf8a84a5e042eb2213623adaec37fe21eb600000000000000000000000068a37c633c22464917fd0d50532be0811617123b0000000000000000000000001464d46abd192baec1d4cb7b60415b02d346dfde0000000000000000000000005cb1d4b99f972ccdeccefcfec638d72f9629b5d0000000000000000000000000225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d000000000000000000000000fb38d870055bed6f98a7994bb9d29714a0e3558400000000000000000000000062a94a3bf2dfc247f5dc861387336eb17a2e1141000000000000000000000000d3ac70f86a4dd8051876e847e1059eb6eb5586ed0000000000000000000000002a2bb3320614955fc1f6da98e3572c6bf9d9d1c9000000000000000000000000a4dd0533008e17b65b55c916d947a937783b57b1000000000000000000000000738a9aa93974c7f82d97adfbe2bc80046b347b1100000000000000000000000084740f97aea62c5dc36756dfd9f749412534220e000000000000000000000000a834e439a41f1f72ac2af9edb8ad825d9830e2c00000000000000000000000009694c964e2ce3624ff4d1f91e8d1f177c18dac6f000000000000000000000000695f498407f96c0185709acafa01c3a00771c896000000000000000000000000170c5cadb50dc163db0dd786c96d7ecb5e24a379000000000000000000000000f3e3793fda3c8f836f3a6d778c23cb5c04d1909a000000000000000000000000691118f93b549cbb3678bfe7c957546cbfc594de0000000000000000000000002a8763577f8ab360bade50ab326b9d18d1d509d0000000000000000000000000d61aae0a148ec5e6005143734f9841ebdcbb2f1b000000000000000000000000b6d52aa63532a0d1c50b3bb782e6b511bd9736450000000000000000000000007ac8481402ee760d46201ebab4b44388d1834a4d0000000000000000000000008517d50cdd95aba21b94968a98d526b743174497000000000000000000000000edfbe70e9c10b23b955988df06488b8dfd543ddd0000000000000000000000003e1d23be803c31d2c44efe84fb96659d12c49fd50000000000000000000000005e0a086b8ea7bd6ac3098b61005ae55b1381154a000000000000000000000000d4b6ca3f34fdf880646247c8ca1b458c3d295422000000000000000000000000c16ab72a9dce2e458f5d33211f1c6844dbb2ce4e000000000000000000000000481e012260715b57e162bad30423ab639781421a000000000000000000000000dcd38bc4f5aef76a1e1b12b1774410a6e175c44e000000000000000000000000331c12bbe5111763cfe5cdc6f93876b206adf99b000000000000000000000000f3b1b6e83be4d55695f1d30ac3d307d9d5ca98ff0000000000000000000000000a1908b732884449b819e146f257fb6018d00ab100000000000000000000000043732b04bf1b2a42c9925f5c1d9f3535c6ea82ed000000000000000000000000e921906a819eaec8df8d1ea395bed1add27605f600000000000000000000000012e3567224bf39a567b00197b208423998a24da30000000000000000000000004295f78bba333352965b5ed08dc5b4c6833baf7d000000000000000000000000f190463c5e63f68995e1d1e06b22f16b90172ea9000000000000000000000000fcac0c65c2e9ec6c4f5c05d6e5c6e06b5c0261ca0000000000000000000000001df2bca072b7bf8a214ff9e6ee5bca9d60098974000000000000000000000000f519c842210abb71c6ed4cc26d3aabee9853beff000000000000000000000000a7bb2a00f6a23fbc89c34eec95ddb071683af92700000000000000000000000014e9e9f0a8d9bac4cad8c1ce339826f42924e5420000000000000000000000000b858e239ccf09d4411703b383db9f7c737cb082000000000000000000000000737d3c588da96328c20327bc5d04e6beb73b453d000000000000000000000000779e9717c7040eca7ce5a4749cf960c0441aa1510000000000000000000000006a69c12128493446ab782d9276c27fb511395a6e0000000000000000000000006c3e8b4dc0ccaa9a3ae535465b0893e3b029bb00000000000000000000000000866d9eb467b5ebd8c6464cceccc367d95ccfd31c000000000000000000000000658357017948986a7ee7c714fa37138b7fe1317d000000000000000000000000b4dc010733ea4f3b42f71244c4b2357129d971c80000000000000000000000007f18176ef0bc3beda3246e0153e76b4b4786037d000000000000000000000000d800fc90efa8532c77ed14102f8280e904c965980000000000000000000000001e70710718e6df8a486dff4ce6c8cb4487b4fc300000000000000000000000009b733a14c4acb7e255f1af4b268ad9b330e8b8f4000000000000000000000000f9342660f2ba86270c6854c7f59773a20a8f5def00000000000000000000000088fb3d509fc49b515bfeb04e23f53ba3395639810000000000000000000000009516c6ac7bc8be957148f94f894973028378b36c00000000000000000000000089ab8578326ff2e0dc5a2c0617f74ccb41532e410000000000000000000000006fc868df4b7328eb54f92b5993f45cf732842679000000000000000000000000867db38c83f4287a71ffd0cdfba6ffae93150ff7000000000000000000000000de7a82fe90eab3f5235552f2137402a69d53fb9400000000000000000000000031de3ad9fbfaeb90348d5cb8a101fbb68f28ceff000000000000000000000000f800b41ea9db0dff446d2a25cc8ff7ae0164281800000000000000000000000097116fc08e002e79736f641efb164114942c0732000000000000000000000000554976402a8aa7020814602c49f8a6e3bea2a78300000000000000000000000004a15d06c0c420a4e568cc40ccd80f71f6df69f0000000000000000000000000975b77dbc27a0eed46b44a09323af252f27158f800000000000000000000000040a9066ebb98950ff64481cc8d1bcf5fd0c28737000000000000000000000000fb17199bb361daed5b8df4e0d263f2f6cb990c500000000000000000000000003b0e6b8e5f72df429e58c0885806f2da874aa1de000000000000000000000000424182a114b5bd42638791b6a6f11fc1d6027e030000000000000000000000007111cbd16ae9ecc1910bb478c73cd9881821773400000000000000000000000052e1e58db9151d8a0f1dcd8cb3b00948df114b8e0000000000000000000000006a52f086844cd1a19f538de2dc8f84a886e313a800000000000000000000000061751bc401f4eabe10a238661b4a60ba84910059000000000000000000000000be7ae9e43d4373bce5b2d9195bbe31f6a7a0db6f000000000000000000000000052684c9ff39bbf50e8eff902fdff1adc64145f5000000000000000000000000c939e0238be5182f3a1c1db5f53fa38178e360f00000000000000000000000002569448fef8b66f86fae809cdce53b5151b3d0c5000000000000000000000000c20d543f892dbb1900255f2e42167a0b49ad0543000000000000000000000000c71a8ff766b5ea918c33df155a9f77b949fa7c2d00000000000000000000000066fe8f934b0ad44d6234d896fe4dbbf25a9294a100000000000000000000000010ff2d60924eb9e759904a4c960766dbac212ebd0000000000000000000000000d9626b3a4f6eefc91f7ae1e2ead163701aaae3c000000000000000000000000d560e115d8a55f24448c5887b5c05a6c4ab44753000000000000000000000000e854f8b14262f64e10dab03f9ba5fc37c8eb2a72000000000000000000000000474d4cfc8c28b5d902abbf8efb24743291220090000000000000000000000000cde638127345ba1b50810f4e499f3b9c1edecbd6000000000000000000000000c5ad46f49645aee062e0639b860b2919f8f2fe10000000000000000000000000fbe24b3b2dbff7a48d77b146623dfc621309f4cc0000000000000000000000004bf24d2ccdb772f344ad0eec6d3716e5ef5a84b7000000000000000000000000e58b8eb30fe6e5cef1825b98cf533b17408da8bd000000000000000000000000a16252eb09608b91c4c6fcdc1fc19809c5c55c350000000000000000000000002c4723e2f00a0bcf229553c466630bcda04bbe41000000000000000000000000f11ffaf3dd2c39df6f2ad661d5ffe60daa0fc9fd000000000000000000000000d3cd153156e97638b7fe71a8dd4a9a5c3a59a0200000000000000000000000007fb2eb7bcd35c48248789884ae803095fb3e93380000000000000000000000006cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09000000000000000000000000375afe51c5d9313ff20504aa3094844400be34090000000000000000000000004916efbf56bcaea1130b2a631f6f093095f614a20000000000000000000000001fabdc9da117d1392aab80c69ec141e4d579341c0000000000000000000000006be2e15d6749f3bf984e7ae3efce46a4d6292f540000000000000000000000009fb753be58cf3354fc4684b0d59aba4edf1a90a9000000000000000000000000ace1ae1a4db3adec22b3e1173afe852a5a6fe40a000000000000000000000000d6a5ade2b16ac1d72a1e2833b573ccda6fedece50000000000000000000000002cb490343ae7166357180ac75a9958f9c1c267b0000000000000000000000000b4ab322fb2af74d84be16c70adc5402f402c9af500000000000000000000000058fa2617627a677bd29d5ab11880d066111b8d0e00000000000000000000000048b2a8795f2ca538d63e9ff465c4e39d2b6b3a54000000000000000000000000e92ed178b584e54a4148d85bd00ddb2b3ff099fe0000000000000000000000000282807be542b828e840da354b32cc777444ec07

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x38e4adB44ef08F22F5B5b76A8f0c2d0dCbE7DcA1
Arg [1] : _startV (uint256): 1601509764
Arg [2] : _durationV (uint256): 31560000
Arg [3] : _startT (uint256): 1617289764
Arg [4] : _durationT (uint256): 47340000
Arg [5] : _memberList (address[]): 0x1Bf8567543Fa87C5107b690452dBF3f754654a2E,0x0c7141667Eb3EBC0F742784d58833b4AeC1FbA22,0x4E080Cd5eAe0Eb7aC45cB20137e73eBd8335281A,0xC00F898f3794e38Cb35d7c16C051b229c5F8A849,0x9969658C7E29ffaB87516f128Bee4165f8dc1561,0x01d76cD388fC76D8aDC9235317D7f5EA23268E16,0x009170c4a4b300b3b0606eEafE3fB25Ae3938FB5,0x17038c92006857ccF1514Bd51d067ec019f22E74,0x906D06191c3ad2722ca74675588f1885DF9e690B,0x1bBE9fE79D6d660EA108a2dA3d4E89E58477A8D6,0xAA7A9d80971E58641442774C373C94AaFee87d66,0x06D85218d0bF4F7Be9515f7af1B597B84ad21c2b,0x725F87a90deff5e0BFdbD0c3cd9178a4563Ab0cf,0x8C03A859BE9b4a5a2E54c1AB9C6b1dD79E8Aa3d9,0xb6c6230Ff314f0B870Cd4A05F107221c222E5997,0xCaaEF1dd3c71f2ad1616C42946d88d9afE12C86B,0x5636f2f5bC07adB7104f929B4C8BB45acB5DD9F9,0x2E8f0Ca8a7F50c5E4FeD15beb621f4ab396FAA69,0xA0995532092514913E5a4dDc0f588cf031D2cc72,0xE43e081b55B7520954564818C65798b66d6af3c8,0x25112ED9705Dd13d99DBdb0F79b89FdfF308584f,0x119d18911944f5B1b610fe00537D40d120802955,0xDF4B2550185d8Cb0e9825Ae7acA99A1aD3ad10eA,0xc2aF82D35AD66A9B4E8Bd574C03aE087AF0b2314,0x1bCcbCDA9b4D9A1a98b4c280116dD6A437f51f92,0x56F5c0F88002670AEcCde5AdbaD35e72F383ed18,0x8C9fA9e231856B89D271933e046447246A3Ca7c6,0x28AEE5F009a1413d9db29e5202CA25ebB26daF4e,0x0684aDD5141F6b8d3de1179671D8DfEA00b95449,0xcc2c6D82e00E14f81FFc8e4F6A26c4522adA5a34,0x6C492bFe6117610042ef50b6d4A6D92803E82c0E,0x899d89D7A96a1B45d60600343Dcc1ec1120e42F9,0x3c87E00da8551C73032496Aa60D9BD980510CBAF,0x6C7655a0557a43348aecd75ceaE12C46cD14da35,0x040f655C0e7060d8FA9A9152301252D2e63F4F19,0x1237819df68E9808dd65d66470B6A0E5a09f125e,0xf6d9E0A7C16C6c38E771cFd149EED85dFBe61301,0x9af2DA23860914f3209e7813A3E41B5c4E12bd1A,0x1357AeB37a7231D738Ee71442290AC61A8639cC2,0x8Cb38dD8B59119974804F888e373C1E8A41E671b,0xc6eE5B29e22c6aD95041E316081689B47052DFE4,0x505Ad51CC7a26Acf2123B0BdE1E5Fe6a315b3f31,0x46601D5E5167C124b4d23ecDFDC79F82a3F5C7bd,0x018A3833CCC9d365195441C32e2202f2CC9e5F16,0x326D442bE95eec5af140301631A47DE7cB52C1ea,0x31088e286046E6B2bfc436656733CB29C347BFbB,0x674BDd830B885Edf2d744cC5D167AbBCB494C4c3,0x0E8B04494898bE2e95F0f567Ebd727BbB4acFD3F,0xf5d0A18720692C1f9D7B8E5FCaE49Aca155253cf,0x971C6b1323FBB695A57EE6694bdC2674f597b46b,0xa081F72eF209c55420033E5e50FcFf7D929e3170,0x23f0A89CfB61799e85a45172359F9bE320A49b22,0xE86b195406DeB3A226696FE07D427d39CA132faf,0x42C8680EdD9575DC7c237C8dDeA2b0b62A93828f,0x19cb2BC841c97fC31cC6d6FC8DF58D774519E539,0xac84C832617209FDC894d767371f3002cDaF8F8A,0x88d065BF93df032C342a64CDaF84eF629F3B0277,0xa806064443E243683852889193E1679E7FAEA29b,0x0df70e1463F108e71bFc1B6D26E2dE5613537A95,0x483AE5758563AfAd072b92F1B935aDF513Ad0506,0x007f30fF2E8BCae0B455D3B4Ec92AB8AdD67fEaf,0x0B19CBEe3C4DCeff21946f0B18Ac0Ed2709D6FB5,0x73e8De3f2f913EcbdeC97524430746Acf65578a2,0xaAEB6cA7FDf98c1284592749E9161a3c885F59Bd,0x0d4DDeA3849C54E16C85cB4354943dC876e05552,0xA40a9f6620b144135764b9922F73005f2F103b17,0x3926F74bBaA0F0a2bBAA664AC01Ecd6A4534BE05,0x00326E37CEf76788F6b0cF643c94481D60BD3D58,0x84A2C92a77106EcE8F1B03ee7B88C71bABfFB453,0x279A8AEdCCA46f435B7aEC6c6240421042462EEC,0xD61C606CF0ca54554cC86eE41ED895AA109aB038,0xeF59c1500e3299dcEc6Af5Fe39b01674318425dA,0xF6340aE60BE2430C873703E57112482C3237F655,0xAd5471C3B31D174cb4DaD3b7d048B7fbE347D7B1,0xb0325DbE7fA891436E83A094f9F12848c78e449b,0xbC8d9fD142Eb75Fbf93B395723893Af9C9f8580F,0xB7376A7f8cacaaA994Ccb8f78C542782CbaDD89E,0x2Da8273C586c9488096A0a7f117EfE95f9905eD7,0xC11f1010C6b75Cda68776528A94618579eF21C12,0xfF1489A5c9C86eb00AdFBd8Ef67f84F6C01C6246,0xf1c1cDF8a84A5e042eb2213623ADaEc37FE21EB6,0x68a37C633C22464917fd0d50532Be0811617123b,0x1464d46aBD192baeC1D4CB7B60415B02d346DFde,0x5cb1D4B99F972cCdecCEFcfeC638d72f9629B5d0,0x225c4cfc17d5ee7BF3E682396B12C0F6A7709d7d,0xfB38d870055bED6F98A7994Bb9d29714A0E35584,0x62A94a3bF2dFC247f5dc861387336Eb17A2E1141,0xD3Ac70f86A4dd8051876e847e1059EB6eb5586ed,0x2a2bB3320614955Fc1F6da98E3572c6BF9d9D1C9,0xa4dD0533008e17b65b55C916d947A937783B57b1,0x738a9AA93974C7f82D97adfBe2BC80046b347B11,0x84740F97Aea62C5dC36756DFD9F749412534220E,0xa834e439A41f1F72AC2af9EDb8aD825D9830e2c0,0x9694c964e2cE3624FF4d1f91E8D1f177c18daC6f,0x695F498407f96c0185709AcAFa01C3A00771C896,0x170c5cADb50dc163db0DD786C96D7ecb5E24a379,0xF3e3793fDA3c8f836f3A6D778c23cb5c04d1909A,0x691118F93B549cBB3678bfE7C957546CBFC594DE,0x2a8763577F8ab360bade50Ab326B9d18d1D509d0,0xd61AaE0a148Ec5E6005143734f9841EBDcbB2f1b,0xb6d52aA63532A0d1c50B3Bb782e6B511bd973645,0x7Ac8481402EE760D46201EBAb4B44388D1834a4d,0x8517D50Cdd95abA21B94968A98d526B743174497,0xedFbe70e9C10B23b955988df06488B8DFd543Ddd,0x3e1D23BE803C31D2c44EFe84fB96659D12C49fD5,0x5E0A086B8eA7Bd6aC3098B61005aE55b1381154a,0xD4B6Ca3F34fDF880646247C8Ca1b458C3D295422,0xC16AB72a9dce2E458F5d33211f1C6844DBb2CE4e,0x481e012260715b57e162bad30423ab639781421a,0xDcd38bC4f5aEf76a1E1b12B1774410A6E175c44e,0x331c12bBe5111763CFe5CDC6F93876B206AdF99B,0xf3B1B6e83Be4d55695f1D30ac3D307D9D5CA98ff,0x0a1908B732884449b819e146F257fB6018d00Ab1,0x43732b04Bf1B2A42c9925F5C1d9f3535c6EA82eD,0xe921906A819Eaec8DF8d1EA395BeD1Add27605F6,0x12e3567224BF39A567B00197b208423998a24DA3,0x4295F78bba333352965B5ed08DC5b4c6833bAF7d,0xf190463c5e63F68995e1D1E06B22F16B90172EA9,0xfcac0c65C2E9eC6C4f5c05d6E5C6e06B5c0261ca,0x1df2bcA072B7bF8A214fF9e6ee5Bca9D60098974,0xf519C842210Abb71c6ED4Cc26d3aAbee9853befF,0xA7bb2A00F6A23FBc89c34eEC95DDB071683af927,0x14e9e9F0A8D9bAc4CaD8c1CE339826f42924E542,0x0B858E239CCF09D4411703b383DB9f7c737cb082,0x737d3c588DA96328C20327BC5D04e6BeB73B453d,0x779e9717C7040ECa7CE5a4749cF960c0441Aa151,0x6a69C12128493446AB782d9276c27FB511395a6e,0x6C3E8b4Dc0cCaA9a3Ae535465b0893E3B029bb00,0x866D9eB467b5ebd8c6464cCEcCC367d95CcfD31c,0x658357017948986A7Ee7c714fa37138B7Fe1317d,0xB4dC010733Ea4F3B42F71244C4B2357129d971C8,0x7f18176EF0bc3BEdA3246e0153E76b4B4786037D,0xd800FC90eFA8532c77eD14102F8280E904c96598,0x1e70710718e6dF8a486dFF4ce6C8CB4487B4fC30,0x9b733A14C4Acb7e255f1aF4b268AD9B330E8B8f4,0xF9342660f2ba86270C6854c7f59773A20A8F5dEF,0x88FB3D509fC49B515BFEb04e23f53ba339563981,0x9516c6ac7Bc8BE957148f94F894973028378b36C,0x89Ab8578326fF2E0dc5a2C0617F74cCB41532e41,0x6fc868DF4B7328Eb54F92B5993f45cF732842679,0x867db38C83F4287A71ffd0Cdfba6fFAE93150Ff7,0xdE7a82Fe90EaB3F5235552F2137402a69d53FB94,0x31de3aD9fbfAeb90348d5cb8a101FBB68f28cEfF,0xF800B41ea9Db0DFf446D2a25cc8Ff7AE01642818,0x97116fC08e002e79736f641Efb164114942c0732,0x554976402a8aa7020814602C49F8A6e3bea2A783,0x04a15d06C0c420A4e568Cc40cCd80F71f6df69F0,0x975B77DBc27a0eed46b44a09323AF252f27158F8,0x40a9066eBB98950fF64481cc8d1bCF5Fd0C28737,0xfb17199BB361dAED5B8dF4E0d263f2f6CB990C50,0x3b0e6b8E5f72df429E58C0885806F2dA874AA1De,0x424182a114B5bd42638791B6a6f11Fc1D6027e03,0x7111cBd16AE9ECc1910BB478c73cD98818217734,0x52e1e58DB9151d8A0f1dCd8Cb3b00948df114b8E,0x6a52F086844cD1a19F538de2dC8f84a886e313a8,0x61751BC401f4EABe10A238661B4A60ba84910059,0xbE7aE9e43d4373BCe5b2d9195bbe31f6A7a0DB6f,0x052684C9ff39BBf50e8EFF902fdFF1aDC64145f5,0xc939e0238be5182F3A1C1DB5f53fa38178e360f0,0x2569448fEf8B66f86FaE809cDCE53B5151b3d0C5,0xc20D543F892dbb1900255f2e42167A0B49ad0543,0xc71A8Ff766B5Ea918c33dF155a9f77b949fA7C2d,0x66Fe8F934b0ad44d6234d896fE4dBbF25a9294a1,0x10fF2D60924Eb9E759904A4C960766DbAC212eBd,0x0D9626b3a4F6EEfC91f7ae1E2EAd163701AAae3C,0xd560E115D8a55f24448C5887B5C05A6c4AB44753,0xe854F8b14262f64E10dab03f9BA5fc37C8Eb2a72,0x474d4cfC8c28B5D902ABbF8EFb24743291220090,0xCde638127345ba1B50810f4e499F3b9c1EdEcBd6,0xC5AD46F49645Aee062e0639b860B2919F8F2fE10,0xfBe24b3b2DBFf7A48d77b146623DFc621309f4cC,0x4bf24d2ccdB772f344ad0EEc6d3716e5EF5A84B7,0xE58B8eb30FE6e5CEF1825b98CF533b17408DA8bD,0xA16252eB09608b91C4c6fCDc1fC19809c5c55C35,0x2c4723E2f00a0BcF229553c466630BcDA04BBE41,0xf11Ffaf3dD2c39dF6f2ad661D5FFE60daa0fC9Fd,0xD3Cd153156E97638b7Fe71a8dd4A9a5c3a59A020,0x7fB2eb7BCD35c48248789884AE803095fB3e9338,0x6Cc52e11cF88C0b2DDDec1E5E7cFe9c5913b4d09,0x375Afe51C5d9313FF20504aa3094844400be3409,0x4916EFbF56BCAeA1130b2a631f6f093095f614a2,0x1fAbDC9da117d1392Aab80c69eC141e4D579341C,0x6be2e15D6749f3BF984E7aE3efCe46A4d6292F54,0x9fB753bE58cf3354Fc4684b0D59aba4edf1A90A9,0xACE1ae1a4dB3adEc22B3e1173aFe852a5A6fe40a,0xd6A5adE2b16AC1d72A1E2833b573cCda6FedecE5,0x2Cb490343aE7166357180AC75A9958f9C1c267B0,0xB4Ab322Fb2aF74D84BE16C70adC5402F402C9AF5,0x58FA2617627a677Bd29d5ab11880D066111B8d0e,0x48b2a8795F2ca538D63E9Ff465c4e39D2b6b3A54,0xe92Ed178B584E54A4148d85BD00ddb2B3FF099Fe,0x0282807BE542b828e840da354b32CC777444eC07
Arg [6] : _amountPerMember (uint96): 50000000000000000000000

-----Encoded View---------------
200 Constructor Arguments found :
Arg [0] : 00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1
Arg [1] : 000000000000000000000000000000000000000000000000000000005f751984
Arg [2] : 0000000000000000000000000000000000000000000000000000000001e19140
Arg [3] : 000000000000000000000000000000000000000000000000000000006065e224
Arg [4] : 0000000000000000000000000000000000000000000000000000000002d259e0
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [6] : 000000000000000000000000000000000000000000000a968163f0a57b400000
Arg [7] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [8] : 0000000000000000000000001bf8567543fa87c5107b690452dbf3f754654a2e
Arg [9] : 0000000000000000000000000c7141667eb3ebc0f742784d58833b4aec1fba22
Arg [10] : 0000000000000000000000004e080cd5eae0eb7ac45cb20137e73ebd8335281a
Arg [11] : 000000000000000000000000c00f898f3794e38cb35d7c16c051b229c5f8a849
Arg [12] : 0000000000000000000000009969658c7e29ffab87516f128bee4165f8dc1561
Arg [13] : 00000000000000000000000001d76cd388fc76d8adc9235317d7f5ea23268e16
Arg [14] : 000000000000000000000000009170c4a4b300b3b0606eeafe3fb25ae3938fb5
Arg [15] : 00000000000000000000000017038c92006857ccf1514bd51d067ec019f22e74
Arg [16] : 000000000000000000000000906d06191c3ad2722ca74675588f1885df9e690b
Arg [17] : 0000000000000000000000001bbe9fe79d6d660ea108a2da3d4e89e58477a8d6
Arg [18] : 000000000000000000000000aa7a9d80971e58641442774c373c94aafee87d66
Arg [19] : 00000000000000000000000006d85218d0bf4f7be9515f7af1b597b84ad21c2b
Arg [20] : 000000000000000000000000725f87a90deff5e0bfdbd0c3cd9178a4563ab0cf
Arg [21] : 0000000000000000000000008c03a859be9b4a5a2e54c1ab9c6b1dd79e8aa3d9
Arg [22] : 000000000000000000000000b6c6230ff314f0b870cd4a05f107221c222e5997
Arg [23] : 000000000000000000000000caaef1dd3c71f2ad1616c42946d88d9afe12c86b
Arg [24] : 0000000000000000000000005636f2f5bc07adb7104f929b4c8bb45acb5dd9f9
Arg [25] : 0000000000000000000000002e8f0ca8a7f50c5e4fed15beb621f4ab396faa69
Arg [26] : 000000000000000000000000a0995532092514913e5a4ddc0f588cf031d2cc72
Arg [27] : 000000000000000000000000e43e081b55b7520954564818c65798b66d6af3c8
Arg [28] : 00000000000000000000000025112ed9705dd13d99dbdb0f79b89fdff308584f
Arg [29] : 000000000000000000000000119d18911944f5b1b610fe00537d40d120802955
Arg [30] : 000000000000000000000000df4b2550185d8cb0e9825ae7aca99a1ad3ad10ea
Arg [31] : 000000000000000000000000c2af82d35ad66a9b4e8bd574c03ae087af0b2314
Arg [32] : 0000000000000000000000001bccbcda9b4d9a1a98b4c280116dd6a437f51f92
Arg [33] : 00000000000000000000000056f5c0f88002670aeccde5adbad35e72f383ed18
Arg [34] : 0000000000000000000000008c9fa9e231856b89d271933e046447246a3ca7c6
Arg [35] : 00000000000000000000000028aee5f009a1413d9db29e5202ca25ebb26daf4e
Arg [36] : 0000000000000000000000000684add5141f6b8d3de1179671d8dfea00b95449
Arg [37] : 000000000000000000000000cc2c6d82e00e14f81ffc8e4f6a26c4522ada5a34
Arg [38] : 0000000000000000000000006c492bfe6117610042ef50b6d4a6d92803e82c0e
Arg [39] : 000000000000000000000000899d89d7a96a1b45d60600343dcc1ec1120e42f9
Arg [40] : 0000000000000000000000003c87e00da8551c73032496aa60d9bd980510cbaf
Arg [41] : 0000000000000000000000006c7655a0557a43348aecd75ceae12c46cd14da35
Arg [42] : 000000000000000000000000040f655c0e7060d8fa9a9152301252d2e63f4f19
Arg [43] : 0000000000000000000000001237819df68e9808dd65d66470b6a0e5a09f125e
Arg [44] : 000000000000000000000000f6d9e0a7c16c6c38e771cfd149eed85dfbe61301
Arg [45] : 0000000000000000000000009af2da23860914f3209e7813a3e41b5c4e12bd1a
Arg [46] : 0000000000000000000000001357aeb37a7231d738ee71442290ac61a8639cc2
Arg [47] : 0000000000000000000000008cb38dd8b59119974804f888e373c1e8a41e671b
Arg [48] : 000000000000000000000000c6ee5b29e22c6ad95041e316081689b47052dfe4
Arg [49] : 000000000000000000000000505ad51cc7a26acf2123b0bde1e5fe6a315b3f31
Arg [50] : 00000000000000000000000046601d5e5167c124b4d23ecdfdc79f82a3f5c7bd
Arg [51] : 000000000000000000000000018a3833ccc9d365195441c32e2202f2cc9e5f16
Arg [52] : 000000000000000000000000326d442be95eec5af140301631a47de7cb52c1ea
Arg [53] : 00000000000000000000000031088e286046e6b2bfc436656733cb29c347bfbb
Arg [54] : 000000000000000000000000674bdd830b885edf2d744cc5d167abbcb494c4c3
Arg [55] : 0000000000000000000000000e8b04494898be2e95f0f567ebd727bbb4acfd3f
Arg [56] : 000000000000000000000000f5d0a18720692c1f9d7b8e5fcae49aca155253cf
Arg [57] : 000000000000000000000000971c6b1323fbb695a57ee6694bdc2674f597b46b
Arg [58] : 000000000000000000000000a081f72ef209c55420033e5e50fcff7d929e3170
Arg [59] : 00000000000000000000000023f0a89cfb61799e85a45172359f9be320a49b22
Arg [60] : 000000000000000000000000e86b195406deb3a226696fe07d427d39ca132faf
Arg [61] : 00000000000000000000000042c8680edd9575dc7c237c8ddea2b0b62a93828f
Arg [62] : 00000000000000000000000019cb2bc841c97fc31cc6d6fc8df58d774519e539
Arg [63] : 000000000000000000000000ac84c832617209fdc894d767371f3002cdaf8f8a
Arg [64] : 00000000000000000000000088d065bf93df032c342a64cdaf84ef629f3b0277
Arg [65] : 000000000000000000000000a806064443e243683852889193e1679e7faea29b
Arg [66] : 0000000000000000000000000df70e1463f108e71bfc1b6d26e2de5613537a95
Arg [67] : 000000000000000000000000483ae5758563afad072b92f1b935adf513ad0506
Arg [68] : 000000000000000000000000007f30ff2e8bcae0b455d3b4ec92ab8add67feaf
Arg [69] : 0000000000000000000000000b19cbee3c4dceff21946f0b18ac0ed2709d6fb5
Arg [70] : 00000000000000000000000073e8de3f2f913ecbdec97524430746acf65578a2
Arg [71] : 000000000000000000000000aaeb6ca7fdf98c1284592749e9161a3c885f59bd
Arg [72] : 0000000000000000000000000d4ddea3849c54e16c85cb4354943dc876e05552
Arg [73] : 000000000000000000000000a40a9f6620b144135764b9922f73005f2f103b17
Arg [74] : 0000000000000000000000003926f74bbaa0f0a2bbaa664ac01ecd6a4534be05
Arg [75] : 00000000000000000000000000326e37cef76788f6b0cf643c94481d60bd3d58
Arg [76] : 00000000000000000000000084a2c92a77106ece8f1b03ee7b88c71babffb453
Arg [77] : 000000000000000000000000279a8aedcca46f435b7aec6c6240421042462eec
Arg [78] : 000000000000000000000000d61c606cf0ca54554cc86ee41ed895aa109ab038
Arg [79] : 000000000000000000000000ef59c1500e3299dcec6af5fe39b01674318425da
Arg [80] : 000000000000000000000000f6340ae60be2430c873703e57112482c3237f655
Arg [81] : 000000000000000000000000ad5471c3b31d174cb4dad3b7d048b7fbe347d7b1
Arg [82] : 000000000000000000000000b0325dbe7fa891436e83a094f9f12848c78e449b
Arg [83] : 000000000000000000000000bc8d9fd142eb75fbf93b395723893af9c9f8580f
Arg [84] : 000000000000000000000000b7376a7f8cacaaa994ccb8f78c542782cbadd89e
Arg [85] : 0000000000000000000000002da8273c586c9488096a0a7f117efe95f9905ed7
Arg [86] : 000000000000000000000000c11f1010c6b75cda68776528a94618579ef21c12
Arg [87] : 000000000000000000000000ff1489a5c9c86eb00adfbd8ef67f84f6c01c6246
Arg [88] : 000000000000000000000000f1c1cdf8a84a5e042eb2213623adaec37fe21eb6
Arg [89] : 00000000000000000000000068a37c633c22464917fd0d50532be0811617123b
Arg [90] : 0000000000000000000000001464d46abd192baec1d4cb7b60415b02d346dfde
Arg [91] : 0000000000000000000000005cb1d4b99f972ccdeccefcfec638d72f9629b5d0
Arg [92] : 000000000000000000000000225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d
Arg [93] : 000000000000000000000000fb38d870055bed6f98a7994bb9d29714a0e35584
Arg [94] : 00000000000000000000000062a94a3bf2dfc247f5dc861387336eb17a2e1141
Arg [95] : 000000000000000000000000d3ac70f86a4dd8051876e847e1059eb6eb5586ed
Arg [96] : 0000000000000000000000002a2bb3320614955fc1f6da98e3572c6bf9d9d1c9
Arg [97] : 000000000000000000000000a4dd0533008e17b65b55c916d947a937783b57b1
Arg [98] : 000000000000000000000000738a9aa93974c7f82d97adfbe2bc80046b347b11
Arg [99] : 00000000000000000000000084740f97aea62c5dc36756dfd9f749412534220e
Arg [100] : 000000000000000000000000a834e439a41f1f72ac2af9edb8ad825d9830e2c0
Arg [101] : 0000000000000000000000009694c964e2ce3624ff4d1f91e8d1f177c18dac6f
Arg [102] : 000000000000000000000000695f498407f96c0185709acafa01c3a00771c896
Arg [103] : 000000000000000000000000170c5cadb50dc163db0dd786c96d7ecb5e24a379
Arg [104] : 000000000000000000000000f3e3793fda3c8f836f3a6d778c23cb5c04d1909a
Arg [105] : 000000000000000000000000691118f93b549cbb3678bfe7c957546cbfc594de
Arg [106] : 0000000000000000000000002a8763577f8ab360bade50ab326b9d18d1d509d0
Arg [107] : 000000000000000000000000d61aae0a148ec5e6005143734f9841ebdcbb2f1b
Arg [108] : 000000000000000000000000b6d52aa63532a0d1c50b3bb782e6b511bd973645
Arg [109] : 0000000000000000000000007ac8481402ee760d46201ebab4b44388d1834a4d
Arg [110] : 0000000000000000000000008517d50cdd95aba21b94968a98d526b743174497
Arg [111] : 000000000000000000000000edfbe70e9c10b23b955988df06488b8dfd543ddd
Arg [112] : 0000000000000000000000003e1d23be803c31d2c44efe84fb96659d12c49fd5
Arg [113] : 0000000000000000000000005e0a086b8ea7bd6ac3098b61005ae55b1381154a
Arg [114] : 000000000000000000000000d4b6ca3f34fdf880646247c8ca1b458c3d295422
Arg [115] : 000000000000000000000000c16ab72a9dce2e458f5d33211f1c6844dbb2ce4e
Arg [116] : 000000000000000000000000481e012260715b57e162bad30423ab639781421a
Arg [117] : 000000000000000000000000dcd38bc4f5aef76a1e1b12b1774410a6e175c44e
Arg [118] : 000000000000000000000000331c12bbe5111763cfe5cdc6f93876b206adf99b
Arg [119] : 000000000000000000000000f3b1b6e83be4d55695f1d30ac3d307d9d5ca98ff
Arg [120] : 0000000000000000000000000a1908b732884449b819e146f257fb6018d00ab1
Arg [121] : 00000000000000000000000043732b04bf1b2a42c9925f5c1d9f3535c6ea82ed
Arg [122] : 000000000000000000000000e921906a819eaec8df8d1ea395bed1add27605f6
Arg [123] : 00000000000000000000000012e3567224bf39a567b00197b208423998a24da3
Arg [124] : 0000000000000000000000004295f78bba333352965b5ed08dc5b4c6833baf7d
Arg [125] : 000000000000000000000000f190463c5e63f68995e1d1e06b22f16b90172ea9
Arg [126] : 000000000000000000000000fcac0c65c2e9ec6c4f5c05d6e5c6e06b5c0261ca
Arg [127] : 0000000000000000000000001df2bca072b7bf8a214ff9e6ee5bca9d60098974
Arg [128] : 000000000000000000000000f519c842210abb71c6ed4cc26d3aabee9853beff
Arg [129] : 000000000000000000000000a7bb2a00f6a23fbc89c34eec95ddb071683af927
Arg [130] : 00000000000000000000000014e9e9f0a8d9bac4cad8c1ce339826f42924e542
Arg [131] : 0000000000000000000000000b858e239ccf09d4411703b383db9f7c737cb082
Arg [132] : 000000000000000000000000737d3c588da96328c20327bc5d04e6beb73b453d
Arg [133] : 000000000000000000000000779e9717c7040eca7ce5a4749cf960c0441aa151
Arg [134] : 0000000000000000000000006a69c12128493446ab782d9276c27fb511395a6e
Arg [135] : 0000000000000000000000006c3e8b4dc0ccaa9a3ae535465b0893e3b029bb00
Arg [136] : 000000000000000000000000866d9eb467b5ebd8c6464cceccc367d95ccfd31c
Arg [137] : 000000000000000000000000658357017948986a7ee7c714fa37138b7fe1317d
Arg [138] : 000000000000000000000000b4dc010733ea4f3b42f71244c4b2357129d971c8
Arg [139] : 0000000000000000000000007f18176ef0bc3beda3246e0153e76b4b4786037d
Arg [140] : 000000000000000000000000d800fc90efa8532c77ed14102f8280e904c96598
Arg [141] : 0000000000000000000000001e70710718e6df8a486dff4ce6c8cb4487b4fc30
Arg [142] : 0000000000000000000000009b733a14c4acb7e255f1af4b268ad9b330e8b8f4
Arg [143] : 000000000000000000000000f9342660f2ba86270c6854c7f59773a20a8f5def
Arg [144] : 00000000000000000000000088fb3d509fc49b515bfeb04e23f53ba339563981
Arg [145] : 0000000000000000000000009516c6ac7bc8be957148f94f894973028378b36c
Arg [146] : 00000000000000000000000089ab8578326ff2e0dc5a2c0617f74ccb41532e41
Arg [147] : 0000000000000000000000006fc868df4b7328eb54f92b5993f45cf732842679
Arg [148] : 000000000000000000000000867db38c83f4287a71ffd0cdfba6ffae93150ff7
Arg [149] : 000000000000000000000000de7a82fe90eab3f5235552f2137402a69d53fb94
Arg [150] : 00000000000000000000000031de3ad9fbfaeb90348d5cb8a101fbb68f28ceff
Arg [151] : 000000000000000000000000f800b41ea9db0dff446d2a25cc8ff7ae01642818
Arg [152] : 00000000000000000000000097116fc08e002e79736f641efb164114942c0732
Arg [153] : 000000000000000000000000554976402a8aa7020814602c49f8a6e3bea2a783
Arg [154] : 00000000000000000000000004a15d06c0c420a4e568cc40ccd80f71f6df69f0
Arg [155] : 000000000000000000000000975b77dbc27a0eed46b44a09323af252f27158f8
Arg [156] : 00000000000000000000000040a9066ebb98950ff64481cc8d1bcf5fd0c28737
Arg [157] : 000000000000000000000000fb17199bb361daed5b8df4e0d263f2f6cb990c50
Arg [158] : 0000000000000000000000003b0e6b8e5f72df429e58c0885806f2da874aa1de
Arg [159] : 000000000000000000000000424182a114b5bd42638791b6a6f11fc1d6027e03
Arg [160] : 0000000000000000000000007111cbd16ae9ecc1910bb478c73cd98818217734
Arg [161] : 00000000000000000000000052e1e58db9151d8a0f1dcd8cb3b00948df114b8e
Arg [162] : 0000000000000000000000006a52f086844cd1a19f538de2dc8f84a886e313a8
Arg [163] : 00000000000000000000000061751bc401f4eabe10a238661b4a60ba84910059
Arg [164] : 000000000000000000000000be7ae9e43d4373bce5b2d9195bbe31f6a7a0db6f
Arg [165] : 000000000000000000000000052684c9ff39bbf50e8eff902fdff1adc64145f5
Arg [166] : 000000000000000000000000c939e0238be5182f3a1c1db5f53fa38178e360f0
Arg [167] : 0000000000000000000000002569448fef8b66f86fae809cdce53b5151b3d0c5
Arg [168] : 000000000000000000000000c20d543f892dbb1900255f2e42167a0b49ad0543
Arg [169] : 000000000000000000000000c71a8ff766b5ea918c33df155a9f77b949fa7c2d
Arg [170] : 00000000000000000000000066fe8f934b0ad44d6234d896fe4dbbf25a9294a1
Arg [171] : 00000000000000000000000010ff2d60924eb9e759904a4c960766dbac212ebd
Arg [172] : 0000000000000000000000000d9626b3a4f6eefc91f7ae1e2ead163701aaae3c
Arg [173] : 000000000000000000000000d560e115d8a55f24448c5887b5c05a6c4ab44753
Arg [174] : 000000000000000000000000e854f8b14262f64e10dab03f9ba5fc37c8eb2a72
Arg [175] : 000000000000000000000000474d4cfc8c28b5d902abbf8efb24743291220090
Arg [176] : 000000000000000000000000cde638127345ba1b50810f4e499f3b9c1edecbd6
Arg [177] : 000000000000000000000000c5ad46f49645aee062e0639b860b2919f8f2fe10
Arg [178] : 000000000000000000000000fbe24b3b2dbff7a48d77b146623dfc621309f4cc
Arg [179] : 0000000000000000000000004bf24d2ccdb772f344ad0eec6d3716e5ef5a84b7
Arg [180] : 000000000000000000000000e58b8eb30fe6e5cef1825b98cf533b17408da8bd
Arg [181] : 000000000000000000000000a16252eb09608b91c4c6fcdc1fc19809c5c55c35
Arg [182] : 0000000000000000000000002c4723e2f00a0bcf229553c466630bcda04bbe41
Arg [183] : 000000000000000000000000f11ffaf3dd2c39df6f2ad661d5ffe60daa0fc9fd
Arg [184] : 000000000000000000000000d3cd153156e97638b7fe71a8dd4a9a5c3a59a020
Arg [185] : 0000000000000000000000007fb2eb7bcd35c48248789884ae803095fb3e9338
Arg [186] : 0000000000000000000000006cc52e11cf88c0b2dddec1e5e7cfe9c5913b4d09
Arg [187] : 000000000000000000000000375afe51c5d9313ff20504aa3094844400be3409
Arg [188] : 0000000000000000000000004916efbf56bcaea1130b2a631f6f093095f614a2
Arg [189] : 0000000000000000000000001fabdc9da117d1392aab80c69ec141e4d579341c
Arg [190] : 0000000000000000000000006be2e15d6749f3bf984e7ae3efce46a4d6292f54
Arg [191] : 0000000000000000000000009fb753be58cf3354fc4684b0d59aba4edf1a90a9
Arg [192] : 000000000000000000000000ace1ae1a4db3adec22b3e1173afe852a5a6fe40a
Arg [193] : 000000000000000000000000d6a5ade2b16ac1d72a1e2833b573ccda6fedece5
Arg [194] : 0000000000000000000000002cb490343ae7166357180ac75a9958f9c1c267b0
Arg [195] : 000000000000000000000000b4ab322fb2af74d84be16c70adc5402f402c9af5
Arg [196] : 00000000000000000000000058fa2617627a677bd29d5ab11880d066111b8d0e
Arg [197] : 00000000000000000000000048b2a8795f2ca538d63e9ff465c4e39d2b6b3a54
Arg [198] : 000000000000000000000000e92ed178b584e54a4148d85bd00ddb2b3ff099fe
Arg [199] : 0000000000000000000000000282807be542b828e840da354b32cc777444ec07


Deployed Bytecode Sourcemap

9844:23495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12711:41;;;;;;;;;;;;;;;;-1:-1:-1;12711:41:0;-1:-1:-1;;;;;12711:41:0;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12711:41:0;;;;;;;;;;;;;;;;;;;;;12330:36;;;:::i;:::-;;;;;;;;;;;;;;;;29155:1817;;;;;;;;;;;;;;;;-1:-1:-1;29155:1817:0;-1:-1:-1;;;;;29155:1817:0;;:::i;:::-;;12553:24;;;:::i;19509:329::-;;;;;;;;;;;;;;;;-1:-1:-1;19509:329:0;;;;;;-1:-1:-1;;;;;19509:329:0;;:::i;16019:104::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;15255:107;;;:::i;12038:34::-;;;:::i;15763:108::-;;;:::i;15508:103::-;;;:::i;11945:31::-;;;:::i;12451:39::-;;;:::i;:::-;;;;-1:-1:-1;;;;;12451:39:0;;;;;;;;;;;;;;24116:431;;;;;;;;;;;;;;;;-1:-1:-1;24116:431:0;-1:-1:-1;;;;;24116:431:0;;:::i;20702:258::-;;;;;;;;;;;;;;;;-1:-1:-1;20702:258:0;-1:-1:-1;;;;;20702:258:0;;:::i;12961:48::-;;;;;;;;;;;;;;;;-1:-1:-1;12961:48:0;-1:-1:-1;;;;;12961:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;8874:148;;;:::i;17772:1389::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17772:1389:0;;;;;;;;:::i;16928:207::-;;;;;;;;;;;;;;;;-1:-1:-1;16928:207:0;-1:-1:-1;;;;;16928:207:0;;:::i;21838:243::-;;;;;;;;;;;;;;;;-1:-1:-1;21838:243:0;;:::i;28084:810::-;;;;;;;;;;;;;;;;-1:-1:-1;28084:810:0;-1:-1:-1;;;;;28084:810:0;;:::i;8232:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;8232:79:0;;;;;;;;;;;;;;21308:185;;;;;;;;;;;;;;;;-1:-1:-1;21308:185:0;;:::i;23338:525::-;;;;;;;;;;;;;;;;-1:-1:-1;23338:525:0;;:::i;20149:261::-;;;;;;;;;;;;;;;;-1:-1:-1;20149:261:0;-1:-1:-1;;;;;20149:261:0;;:::i;12638:19::-;;;:::i;16318:244::-;;;;;;;;;;;;;;;;-1:-1:-1;16318:244:0;-1:-1:-1;;;;;16318:244:0;;:::i;12219:31::-;;;:::i;22658:645::-;;;;;;;;;;;;;;;;-1:-1:-1;22658:645:0;;;;;;;;;;;;;;;;;;;;;;:::i;13048:50::-;;;;;;;;;;;;;;;;-1:-1:-1;13048:50:0;-1:-1:-1;;;;;13048:50:0;;:::i;27011:933::-;;;;;;;;;;;;;;;;-1:-1:-1;27011:933:0;-1:-1:-1;;;;;27011:933:0;;:::i;12121:29::-;;;:::i;12829:68::-;;;;;;;;;;;;;;;;-1:-1:-1;12829:68:0;;-1:-1:-1;;;;;12829:68:0;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;12829:68:0;;;;;;;;;;;;;;;;9177:244;;;;;;;;;;;;;;;;-1:-1:-1;9177:244:0;-1:-1:-1;;;;;9177:244:0;;:::i;11847:30::-;;;:::i;12711:41::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12711:41:0;;;;;;-1:-1:-1;;;12711:41:0;;;;:::o;12330:36::-;;;:::o;29155:1817::-;29202:18;;:::i;:::-;-1:-1:-1;29231:10:0;29223:19;;;;:7;:19;;;;;;;;;29202:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29202:40:0;;;;;;;;;;;;-1:-1:-1;;;29202:40:0;;;;;;;;;;29249:16;;:::i;:::-;-1:-1:-1;;;;;;29268:12:0;;;;;;:7;:12;;;;;;;;;29249:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29249:31:0;;;;;;;;;-1:-1:-1;;;29249:31:0;;;;;;;;;;;;;;29319:25;;;29380:24;;;;29421:11;;29249:31;;29319:25;29421:19;;29249:31;29421:19;29413:74;;;;-1:-1:-1;;;29413:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29502:9;;:18;29494:78;;;;-1:-1:-1;;;29494:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29587:14;;;;:23;29579:87;;;;-1:-1:-1;;;29579:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29697:93;;;;;;;;29714:5;29697:93;;;;;;29734:4;29697:93;;;;;;29761:1;-1:-1:-1;;;;;29697:93:0;;;;;29786:1;-1:-1:-1;;;;;29697:93:0;;;;29675:7;:19;29683:10;-1:-1:-1;;;;;29675:19:0;-1:-1:-1;;;;;29675:19:0;;;;;;;;;;;;:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29675:115:0;;;;;-1:-1:-1;;;;;29675:115:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29675:115:0;;;;;-1:-1:-1;;;;;29675:115:0;;;;;;;;;29812:163;;;;;;;;29836:4;29812:163;;;;;;29862:5;29812:163;;;;;;29897:19;-1:-1:-1;;;;;29812:163:0;;;;;29947:20;-1:-1:-1;;;;;29812:163:0;;;;29797:7;:12;29805:3;-1:-1:-1;;;;;29797:12:0;-1:-1:-1;;;;;29797:12:0;;;;;;;;;;;;:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29797:178:0;;;;;-1:-1:-1;;;;;29797:178:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29797:178:0;;;;;-1:-1:-1;;;;;29797:178:0;;;;;;;;;29984:23;30010:15;:27;30026:10;-1:-1:-1;;;;;30010:27:0;-1:-1:-1;;;;;30010:27:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30010:27:0;29984:53;;30046:25;30074:71;30081:12;30074:71;;;;;;;;;;;;;;;;;:6;:71::i;:::-;30176:24;;;;;;;;-1:-1:-1;30176:24:0;;;;;;;;;;-1:-1:-1;;;;;30154:16:0;;;;;:11;:16;;;;;:19;;;;;;;;;;:46;;;;;;-1:-1:-1;;;;;30154:46:0;-1:-1:-1;;;30154:46:0;-1:-1:-1;;;;;;30176:24:0;30154:46;;;;-1:-1:-1;;30154:46:0;;;;;;;;;;;;;;30046:99;;-1:-1:-1;30211:29:0;;30207:403;;30251:20;30283:106;30289:4;:24;;;30315:4;:25;;;30283:106;;;;;;;;;;;;;;;;;:5;:106::i;:::-;30251:138;;30398:50;30422:10;30434:13;30398:23;:50::i;:::-;30479:45;;;;;;;;;;;;;;-1:-1:-1;;;;;30479:45:0;;;;;;;;;;-1:-1:-1;;;;;30457:16:0;;-1:-1:-1;30457:16:0;;;:11;:16;;;;;30474:1;30457:19;;;;;;;:67;;;;;;;;;-1:-1:-1;;;30457:67:0;-1:-1:-1;;;;;;30457:67:0;;;;-1:-1:-1;;30457:67:0;;;;;;;;;;;;;;;30533:19;;;:14;:19;;;;;:23;;;;;30555:1;30533:23;;;30207:403;;;-1:-1:-1;;;;;30579:19:0;;;;;;:14;:19;;;;;:23;;-1:-1:-1;;30579:23:0;30601:1;30579:23;;;30207:403;30657:10;30641:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;30618:20:0;;;;;;;;:50;;30641:27;;;;-1:-1:-1;;;;;;30618:50:0;;;;;;30682:27;;;;30675:34;;;;;30718:22;;:::i;:::-;-1:-1:-1;;;;;;30743:12:0;;;;;;;:7;:12;;;;;;;;;30718:37;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30718:37:0;;;;;;;;;-1:-1:-1;;;30718:37:0;;;;;;;;;;;;;30769:85;;;;;;;;;;;;;;;;;;;;;;;;;;30718:37;;30778:10;;30769:85;;;;;;;;;;;30863:13;30879:47;30897:8;:28;;;-1:-1:-1;;;;;30879:47:0;:17;:47::i;:::-;30863:63;;30933:33;30945:3;30950:8;30960:5;30933:11;:33::i;:::-;29155:1817;;;;;;;;;:::o;12553:24::-;;;;:::o;19509:329::-;-1:-1:-1;;;;;19650:16:0;;19610:7;19650:16;;;:7;:16;;;;;19677:13;;;;19673:53;;19717:1;19710:8;;;;;19673:53;19793:9;;19804:27;;19741:91;;19754:12;;19768:6;;-1:-1:-1;;;;;19776:15:0;19741:91;;;-1:-1:-1;;;19804:27:0;;;19741:12;:91::i;:::-;19734:98;;;19509:329;;;;;:::o;16019:104::-;16113:4;;16094:15;:23;;16019:104;:::o;15255:107::-;15350:6;15331:15;:25;;15255:107;:::o;12038:34::-;;;:::o;15763:108::-;15859:6;15840:15;:25;;15763:108;:::o;15508:103::-;15601:4;15582:15;:23;;15508:103;:::o;11945:31::-;;;:::o;12451:39::-;;;:::o;24116:431::-;24165:20;;:::i;:::-;-1:-1:-1;;;;;;24188:12:0;;;;;;:7;:12;;;;;;;;;24165:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24165:35:0;;;;;;;;;;;;-1:-1:-1;;;24165:35:0;;;;;;;;;;24215:21;24207:70;;;;-1:-1:-1;;;24207:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24286:13;24302:45;24320:6;:26;;;-1:-1:-1;;;;;24302:45:0;:17;:45::i;:::-;24286:61;;24383:4;;24364:15;:23;;24356:79;;;;-1:-1:-1;;;24356:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24458:1;24450:5;:9;24442:59;;;;-1:-1:-1;;;24442:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24510:31;24522:3;24527:6;24535:5;24510:11;:31::i;:::-;24116:431;;;:::o;20702:258::-;-1:-1:-1;;;;;20818:16:0;;20778:7;20818:16;;;:7;:16;;;;;20845:13;;;;20841:53;;20885:1;20878:8;;;;;20841:53;20927:26;;20909:45;;20927:26;;;-1:-1:-1;;;;;20927:26:0;20909:17;:45::i;:::-;20902:52;;;20702:258;;;;:::o;12961:48::-;;;;;;;;;;;;;;;:::o;8874:148::-;8454:12;:10;:12::i;:::-;8444:6;;-1:-1:-1;;;;;8444:6:0;;;:22;;;8436:67;;;;;-1:-1:-1;;;8436:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8981:1:::1;8965:6:::0;;8944:40:::1;::::0;-1:-1:-1;;;;;8965:6:0;;::::1;::::0;8944:40:::1;::::0;8981:1;;8944:40:::1;9012:1;8995:19:::0;;-1:-1:-1;;;;;;8995:19:0::1;::::0;;8874:148::o;17772:1389::-;17863:6;17900:12;17886:11;:26;17878:81;;;;-1:-1:-1;;;17878:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17990:23:0;;17968:19;17990:23;;;:14;:23;;;;;;;;;18047:7;:16;;;;;;:23;17990;;;;;18047;;18043:63;;18097:1;18090:8;;;;;18043:63;18245:4;;18227:15;:22;18223:53;;;18267:1;18260:8;;;;;18223:53;18390:17;;;;;:68;;-1:-1:-1;;;;;;18411:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;18390:68:0;18386:99;;;18476:1;18469:8;;;;;18386:99;-1:-1:-1;;;;;18536:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;18557:16:0;;18536:38;;;;;;;;;:48;;:63;-1:-1:-1;18532:137:0;;-1:-1:-1;;;;;18617:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;18638:16:0;;;;18617:38;;;;;;;;:44;-1:-1:-1;;;18617:44:0;;-1:-1:-1;;;;;18617:44:0;;-1:-1:-1;18610:51:0;;18532:137;18677:12;-1:-1:-1;;18715:16:0;;18738:371;18753:5;18745:13;;:5;:13;;;18738:371;;;18811:1;18794:13;;;18793:19;;;18785:27;;18855:20;;:::i;:::-;-1:-1:-1;;;;;;18878:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;18855:51;;;;;;;;;;;;;;;-1:-1:-1;;;18855:51:0;;;-1:-1:-1;;;;;18855:51:0;;;;;;;;;18919:27;;18915:187;;;18966:8;;;;-1:-1:-1;18959:15:0;;-1:-1:-1;;;;18959:15:0;18915:187;18994:12;;:26;;;-1:-1:-1;18990:112:0;;;19041:6;19033:14;;18990:112;;;19091:1;19082:6;:10;19074:18;;18990:112;18738:371;;;;;-1:-1:-1;;;;;;19122:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;-1:-1:-1;;;;;;;;19122:33:0;;;;;-1:-1:-1;;17772:1389:0;;;;:::o;16928:207::-;-1:-1:-1;;;;;17031:23:0;;16996:7;17031:23;;;:14;:23;;;;;;;;17068:13;:61;;17128:1;17068:61;;;-1:-1:-1;;;;;17084:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;17105:13:0;;17084:35;;;;;;;;;:41;-1:-1:-1;;;17084:41:0;;-1:-1:-1;;;;;17084:41:0;17068:61;-1:-1:-1;;;;;17061:68:0;;16928:207;-1:-1:-1;;;16928:207:0:o;21838:243::-;21911:7;21949:4;;21931:15;:22;21927:53;;;-1:-1:-1;21971:1:0;21964:8;;21927:53;21993:82;22006:15;22023:6;22031:15;-1:-1:-1;;;;;21993:82:0;22048:9;22059:15;21993:12;:82::i;28084:810::-;28136:20;;:::i;:::-;-1:-1:-1;28167:10:0;28159:19;;;;:7;:19;;;;;;;;;28136:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28136:42:0;;;;;;;;;;;;-1:-1:-1;;;28136:42:0;;;;;;;;;;-1:-1:-1;;;;;28193:17:0;;28185:81;;;;-1:-1:-1;;;28185:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28281:13;;:21;;28298:4;28281:21;28273:79;;;;-1:-1:-1;;;28273:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28361:23;28387;28399:10;28387:11;:23::i;:::-;28361:49;;28432:15;-1:-1:-1;;;;;28425:22:0;:3;-1:-1:-1;;;;;28425:22:0;;;28417:92;;;;-1:-1:-1;;;28417:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28534:10;28518:27;;;;:15;:27;;;;;;;;:33;;-1:-1:-1;;;;;;28518:33:0;-1:-1:-1;;;;;28518:33:0;;;;;28594:26;;;;28622:27;;;;;28588:110;;;;;;;;;;;;;;28594:26;;28622:27;28588:110;;;;;:5;:110::i;:::-;28558:140;;28707:55;28731:15;28748:13;28707:23;:55::i;:::-;28769:43;28793:3;28798:13;28769:23;:43::i;:::-;28857:15;-1:-1:-1;;;;;28826:62:0;28852:3;-1:-1:-1;;;;;28826:62:0;28840:10;-1:-1:-1;;;;;28826:62:0;;28874:13;28826:62;;;;-1:-1:-1;;;;;28826:62:0;;;;;;;;;;;;;;;28084:810;;;;:::o;8232:79::-;8270:7;8297:6;-1:-1:-1;;;;;8297:6:0;8232:79;:::o;21308:185::-;21382:7;21405:82;21418:15;21435:6;21443:15;-1:-1:-1;;;;;21405:82:0;21460:9;;21471:15;21405:12;:82::i;23338:525::-;8454:12;:10;:12::i;:::-;8444:6;;-1:-1:-1;;;;;8444:6:0;;;:22;;;8436:67;;;;;-1:-1:-1;;;8436:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23438:9:::1;;23422:13;:25;23414:84;;;;-1:-1:-1::0;;;23414:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23543:8;23530:9;;23514:13;:25;23513:38;23505:95;;;;-1:-1:-1::0;;;23505:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23633:9;::::0;;23668:4:::1;::::0;23681:25;;;;23633:9;23609:21:::1;23731:25;:6;23693:13:::0;23731:10:::1;:25::i;:::-;23763:4;:14:::0;;;23791:66:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;23713:43;;-1:-1:-1;23791:66:0::1;::::0;;;;;;;;::::1;8514:1;;;23338:525:::0;:::o;20149:261::-;-1:-1:-1;;;;;20266:16:0;;20226:7;20266:16;;;:7;:16;;;;;20293:13;;;;20289:53;;20333:1;20326:8;;;;;20289:53;20376:27;;20357:47;;-1:-1:-1;;;20376:27:0;;-1:-1:-1;;;;;20376:27:0;20357:18;:47::i;12638:19::-;;;;:::o;16318:244::-;-1:-1:-1;;;;;16423:28:0;;;16381:7;16423:28;;;:15;:28;;;;;;16381:7;;16423:28;16462:29;16458:70;;16509:11;16502:18;;;;;12219:31;;;:::o;22658:645::-;22831:7;22859:6;22851:4;:14;22847:45;;-1:-1:-1;22883:1:0;22876:8;;22847:45;22952:21;22976;:6;22987:9;22976:10;:21::i;:::-;22952:45;;23004:10;23024:13;23017:4;:20;:43;;23056:4;23017:43;;;23040:13;23017:43;23004:56;-1:-1:-1;23141:15:0;23160:50;23200:9;23160:35;23161:11;;;23178:16;23160:17;:35::i;:::-;:39;;:50::i;:::-;23141:70;-1:-1:-1;23269:28:0;23141:70;23281:15;23269:11;:28::i;:::-;23262:35;;;;;22658:645;;;;;;;;:::o;13048:50::-;;;;;;;;;;;;-1:-1:-1;;;;;13048:50:0;;:::o;27011:933::-;27061:20;;:::i;:::-;-1:-1:-1;27092:10:0;27084:19;;;;:7;:19;;;;;;;;;27061:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27061:42:0;;;;;;;;;;;;-1:-1:-1;;;27061:42:0;;;;;;;;;;27118:21;27110:71;;;;-1:-1:-1;;;27110:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27190:17;27210:47;27229:6;:27;;;-1:-1:-1;;;;;27210:47:0;:18;:47::i;:::-;27190:67;;27284:1;27272:9;:13;27264:64;;;;-1:-1:-1;;;27264:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27335:13;27351:58;27358:9;27351:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;27335:74;;27458:24;27492:94;27498:6;:27;;;27527:6;27492:94;;;;;;;;;;;;;;;;;:5;:94::i;:::-;27601:10;27593:19;;;;:7;:19;;;;;;:60;;-1:-1:-1;;;;;27593:60:0;;;-1:-1:-1;;;27593:60:0;-1:-1:-1;;;;27593:60:0;;;;;;;;;;27696:26;;;;27458:128;;-1:-1:-1;27593:19:0;;27678:45;;;:17;:45::i;:::-;27662:61;;27755:4;;27736:15;:23;27732:84;;27770:38;27782:10;27794:6;27802:5;27770:11;:38::i;:::-;27829:62;;;-1:-1:-1;;;;;27829:62:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27829:62:0;;;27841:10;;27829:62;;;;;;;;;27907:5;-1:-1:-1;;;;;27900:22:0;;27923:3;27928:9;27900:38;;;;;;;;;;;;;-1:-1:-1;;;;;27900:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27011:933;;;;;;:::o;12121:29::-;;;:::o;12829:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12829:68:0;;-1:-1:-1;;;;;12829:68:0;;:::o;9177:244::-;8454:12;:10;:12::i;:::-;8444:6;;-1:-1:-1;;;;;8444:6:0;;;:22;;;8436:67;;;;;-1:-1:-1;;;8436:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9266:22:0;::::1;9258:73;;;;-1:-1:-1::0;;;9258:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9368:6;::::0;;9347:38:::1;::::0;-1:-1:-1;;;;;9347:38:0;;::::1;::::0;9368:6;::::1;::::0;9347:38:::1;::::0;::::1;9396:6;:17:::0;;-1:-1:-1;;;;;;9396:17:0::1;-1:-1:-1::0;;;;;9396:17:0;;;::::1;::::0;;;::::1;::::0;;9177:244::o;11847:30::-;;;:::o;1681:181::-;1739:7;1771:5;;;1795:6;;;;1787:46;;;;;-1:-1:-1;;;1787:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:1;1681:181;-1:-1:-1;;;1681:181:0:o;32515:154::-;32593:6;32627:12;-1:-1:-1;;;32616:9:0;;32608:32;;;;-1:-1:-1;;;32608:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32661:1:0;;32515:154;-1:-1:-1;;32515:154:0:o;32919:175::-;33025:6;33053:1;-1:-1:-1;;;;;33048:6:0;:1;-1:-1:-1;;;;;33048:6:0;;;33056:12;33040:29;;;;;-1:-1:-1;;;33040:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33083:5:0;;;32919:175::o;30978:389::-;-1:-1:-1;;;;;31082:23:0;;31063:16;31082:23;;;:14;:23;;;;;;;;;31131:13;:61;;31191:1;31131:61;;;-1:-1:-1;;;;;31147:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;31168:13:0;;31147:35;;;;;;;;;:41;-1:-1:-1;;;31147:41:0;;-1:-1:-1;;;;;31147:41:0;31131:61;31112:80;;31199:16;31218:78;31224:9;31235:10;31218:78;;;;;;;;;;;;;;;;;:5;:78::i;:::-;31199:97;;31303:58;31320:7;31329:9;31340;31351;31303:16;:58::i;:::-;30978:389;;;;;:::o;24553:2313::-;24682:29;24724:19;;24720:481;;24754:13;24770:64;24777:15;24770:64;;;;;;;;;;;;;;;;;:6;:64::i;:::-;24754:80;;24912:129;24928:7;:27;;;24966:6;24912:129;;;;;;;;;;;;;;;;;:5;:129::i;:::-;-1:-1:-1;;;;;25050:23:0;;;;;;:7;:23;;;;;:68;;-1:-1:-1;;25050:68:0;;-1:-1:-1;;;;;25050:68:0;;;;;;;-1:-1:-1;24720:481:0;;-1:-1:-1;24720:481:0;;-1:-1:-1;25166:27:0;;;;24720:481;25333:30;25373:158;25389:7;:27;;;25427:7;:28;;;25373:158;;;;;;;;;;;;;;;;;:5;:158::i;:::-;25333:198;;25796:20;25826:160;25842:22;25875:7;:23;25883:14;-1:-1:-1;;;;;25875:23:0;-1:-1:-1;;;;;25875:23:0;;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;;;;;25875:44:0;25826:160;;;;;;;;;;;;;;;;;:5;:160::i;:::-;25796:190;;25995:16;26014:27;26026:14;26014:11;:27::i;:::-;25995:46;;26048:11;26158:23;-1:-1:-1;;;;;26142:39:0;:13;-1:-1:-1;;;;;26142:39:0;;26138:428;;;26199:94;26205:13;26220:23;26199:94;;;;;;;;;;;;;;;;;:5;:94::i;:::-;26192:101;;26302:39;26326:8;26336:4;26302:23;:39::i;:::-;26138:428;;;26385:13;-1:-1:-1;;;;;26359:39:0;:23;-1:-1:-1;;;;;26359:39:0;;26355:211;;;26416:94;26422:23;26447:13;26416:94;;;;;;;;;;;;;;;;;:5;:94::i;:::-;26409:101;;26519:39;26543:8;26553:4;26519:23;:39::i;:::-;26638:27;;;;;26674:28;;;;;-1:-1:-1;;;;;26579:281:0;;;26742:23;;;;:7;:23;;;;;;;;:44;26579:281;;-1:-1:-1;;;;;26579:281:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26742:44:0;;;;26579:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24553:2313;;;;;;;;:::o;6771:106::-;6859:10;6771:106;:::o;31373:389::-;-1:-1:-1;;;;;31477:23:0;;31458:16;31477:23;;;:14;:23;;;;;;;;;31526:13;:61;;31586:1;31526:61;;;-1:-1:-1;;;;;31542:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;31563:13:0;;31542:35;;;;;;;;;:41;-1:-1:-1;;;31542:41:0;;-1:-1:-1;;;;;31542:41:0;31526:61;31507:80;;31594:16;31613:78;31619:9;31630:10;31613:78;;;;;;;;;;;;;;;;;:5;:78::i;3035:471::-;3093:7;3338:6;3334:47;;-1:-1:-1;3368:1:0;3361:8;;3334:47;3405:5;;;3409:1;3405;:5;:1;3429:5;;;;;:10;3421:56;;;;-1:-1:-1;;;3421:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3982:132;4040:7;4067:39;4071:1;4074;4067:39;;;;;;;;;;;;;;;;;:3;:39::i;2145:136::-;2203:7;2230:43;2234:1;2237;2230:43;;;;;;;;;;;;;;;;;:3;:43::i;32717:154::-;32795:6;32829:12;-1:-1:-1;;;32818:9:0;;32810:32;;;;-1:-1:-1;;;32810:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33142:194;33248:6;33274:5;;;33302:12;-1:-1:-1;;;;;33294:6:0;;;;;;;;33286:29;;;;-1:-1:-1;;;33286:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33329:1:0;33142:194;-1:-1:-1;;;;33142:194:0:o;31831:636::-;31972:18;31993:79;32000:12;31993:79;;;;;;;;;;;;;;;;;:6;:79::i;:::-;31972:100;;32100:1;32085:12;:16;;;:85;;;;-1:-1:-1;;;;;;32105:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;32128:16:0;;32105:40;;;;;;;;;:50;:65;;;:50;;:65;32085:85;32081:313;;;-1:-1:-1;;;;;32181:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;32204:16:0;;32181:40;;;;;;;;;:57;;-1:-1:-1;;;;;;32181:57:0;-1:-1:-1;;;;;;;;32181:57:0;;;;;;32081:313;;;32300:33;;;;;;;;;;;;;;-1:-1:-1;;;;;32300:33:0;;;;;;;;;;-1:-1:-1;;;;;32261:22:0;;-1:-1:-1;32261:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;-1:-1:-1;;;32261:72:0;-1:-1:-1;;;;;;32261:72:0;;;-1:-1:-1;;32261:72:0;;;;;;;;;;;;;;;32342:25;;;:14;:25;;;;;;;:44;;32261:72;32370:16;;32342:44;;;;;;;;;;;;;32081:313;32407:54;;;-1:-1:-1;;;;;32407:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;32407:54:0;;;;;;;;;;;31831:636;;;;;:::o;4610:278::-;4696:7;4731:12;4724:5;4716:28;;;;-1:-1:-1;;;4716:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4755:9;4771:1;4767;:5;;;;;;;4610:278;-1:-1:-1;;;;;4610:278:0:o;2584:192::-;2670:7;2706:12;2698:6;;;;2690:29;;;;-1:-1:-1;;;2690:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://8564899f18b0c00481eb32d4b3bfa5755672ec619b6f12bb9ce3f9345da125ea

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.