ETH Price: $3,383.80 (+1.15%)

Token

Nimbus Governance Token (GNBU)
 

Overview

Max Total Supply

100,000,000 GNBU

Holders

14,673

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16.6582 GNBU

Value
$0.00
0x56210bccd7c41a1c8da2475b2fb5c5a831e44698
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GNBU

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-10
*/

pragma solidity =0.8.0;

// ----------------------------------------------------------------------------
// GNBU token main contract (2021)
//
// Symbol       : GNBU
// Name         : Nimbus Governance Token
// Total supply : 100.000.000 (burnable)
// Decimals     : 18
// ----------------------------------------------------------------------------
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address tokenOwner) external view returns (uint balance);
    function allowance(address tokenOwner, address spender) external view returns (uint remaining);
    function transfer(address to, uint tokens) external returns (bool success);
    function approve(address spender, uint tokens) external returns (bool success);
    function transferFrom(address from, address to, uint tokens) external returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

contract Ownable {
    address public owner;
    address public newOwner;

    event OwnershipTransferred(address indexed from, address indexed to);

    constructor() {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), owner);
    }

    modifier onlyOwner {
        require(msg.sender == owner, "Ownable: Caller is not the owner");
        _;
    }

    function transferOwnership(address transferOwner) public onlyOwner {
        require(transferOwner != newOwner);
        newOwner = transferOwner;
    }

    function acceptOwnership() virtual public {
        require(msg.sender == newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;


    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused() {
        require(paused);
        _;
    }

    function pause() onlyOwner whenNotPaused public {
        paused = true;
        Pause();
    }

    function unpause() onlyOwner whenPaused public {
        paused = false;
        Unpause();
    }
}

contract GNBU is Ownable, Pausable {
    string public constant name = "Nimbus Governance Token";
    string public constant symbol = "GNBU";
    uint8 public constant decimals = 18;
    uint96 public totalSupply = 100_000_000e18; // 100 million GNBU
    mapping (address => mapping (address => uint96)) internal allowances;

    mapping (address => uint96) private _unfrozenBalances;
    mapping (address => uint32) private _vestingNonces;
    mapping (address => mapping (uint32 => uint96)) private _vestingAmounts;
    mapping (address => mapping (uint32 => uint96)) private _unvestedAmounts;
    mapping (address => mapping (uint32 => uint)) private _vestingReleaseStartDates;
    mapping (address => bool) public vesters;

    uint96 private vestingFirstPeriod = 60 days;
    uint96 private vestingSecondPeriod = 152 days;

    address[] public supportUnits;
    uint public supportUnitsCnt;

    mapping (address => address) public delegates;
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;
    mapping (address => uint32) public numCheckpoints;

    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    mapping (address => uint) public nonces;
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);
    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event Unvest(address user, uint amount);

    constructor() {
        _unfrozenBalances[owner] = uint96(totalSupply);
        emit Transfer(address(0), owner, totalSupply);
    }

    function freeCirculation() external view returns (uint) {
        uint96 systemAmount = _unfrozenBalances[owner];
        for (uint i; i < supportUnits.length; i++) {
            systemAmount = add96(systemAmount, _unfrozenBalances[supportUnits[i]], "GNBU::freeCirculation: adding overflow");
        }
        return sub96(totalSupply, systemAmount, "GNBU::freeCirculation: amount exceed totalSupply");
    }
    
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    function approve(address spender, uint rawAmount) external whenNotPaused returns (bool) {
        uint96 amount;
        if (rawAmount == uint(2 ** 256 - 1)) {
            amount = uint96(2 ** 96 - 1);
        } else {
            amount = safe96(rawAmount, "GNBU::approve: amount exceeds 96 bits");
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }
    
    function permit(address owner, address spender, uint rawAmount, uint deadline, uint8 v, bytes32 r, bytes32 s) external whenNotPaused {
        uint96 amount;
        if (rawAmount == uint(2 ** 256 - 1)) {
            amount = uint96(2 ** 96 - 1);
        } else {
            amount = safe96(rawAmount, "GNBU::permit: amount exceeds 96 bits");
        }

        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, rawAmount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "GNBU::permit: invalid signature");
        require(signatory == owner, "GNBU::permit: unauthorized");
        require(block.timestamp <= deadline, "GNBU::permit: signature expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }
       
    function balanceOf(address account) public view returns (uint) {
        uint96 amount = _unfrozenBalances[account];
        if (_vestingNonces[account] == 0) return amount;
        for (uint32 i = 1; i <= _vestingNonces[account]; i++) {
            uint96 unvested = sub96(_vestingAmounts[account][i], _unvestedAmounts[account][i], "GNBU::balanceOf: unvested exceed vested amount");
            amount = add96(amount, unvested, "GNBU::balanceOf: overflow");
        }
        return amount;
    }

    function availableForUnvesting(address user) external view returns (uint unvestAmount) {
        if (_vestingNonces[user] == 0) return 0;
        for (uint32 i = 1; i <= _vestingNonces[user]; i++) {
            if (_vestingAmounts[user][i] == _unvestedAmounts[user][i]) continue;
            if (_vestingReleaseStartDates[user][i] > block.timestamp) break;
            uint toUnvest = mul96((block.timestamp - _vestingReleaseStartDates[user][i]), (_vestingAmounts[user][i])) / vestingSecondPeriod;
            if (toUnvest > _vestingAmounts[user][i]) {
                toUnvest = _vestingAmounts[user][i];
            } 
            toUnvest -= _unvestedAmounts[user][i];
            unvestAmount += toUnvest;
        }
    }

    function availableForTransfer(address account) external view returns (uint) {
        return _unfrozenBalances[account];
    }

    function vestingInfo(address user, uint32 nonce) external view returns (uint vestingAmount, uint unvestedAmount, uint vestingReleaseStartDate) {
        vestingAmount = _vestingAmounts[user][nonce];
        unvestedAmount = _unvestedAmounts[user][nonce];
        vestingReleaseStartDate = _vestingReleaseStartDates[user][nonce];
    }

    function vestingNonces(address user) external view returns (uint lastNonce) {
        return _vestingNonces[user];
    }
    
    function transfer(address dst, uint rawAmount) external whenNotPaused returns (bool) {
        uint96 amount = safe96(rawAmount, "GNBU::transfer: amount exceeds 96 bits");
        _transferTokens(msg.sender, dst, amount);
        return true;
    }
    
    function transferFrom(address src, address dst, uint rawAmount) external whenNotPaused returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "GNBU::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(2 ** 96 - 1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "GNBU::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }
    
    function delegate(address delegatee) public whenNotPaused {
        return _delegate(msg.sender, delegatee);
    }
    
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public whenNotPaused {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "GNBU::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "GNBU::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "GNBU::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    function unvest() external whenNotPaused returns (uint96 unvested) {
        require (_vestingNonces[msg.sender] > 0, "GNBU::unvest:No vested amount");
        for (uint32 i = 1; i <= _vestingNonces[msg.sender]; i++) {
            if (_vestingAmounts[msg.sender][i] == _unvestedAmounts[msg.sender][i]) continue;
            if (_vestingReleaseStartDates[msg.sender][i] > block.timestamp) break;
            uint96 toUnvest = mul96((block.timestamp - _vestingReleaseStartDates[msg.sender][i]), _vestingAmounts[msg.sender][i]) / vestingSecondPeriod;
            if (toUnvest > _vestingAmounts[msg.sender][i]) {
                toUnvest = _vestingAmounts[msg.sender][i];
            } 
            uint96 totalUnvestedForNonce = toUnvest;
            toUnvest = sub96(toUnvest, _unvestedAmounts[msg.sender][i], "GNBU::unvest: already unvested amount exceeds toUnvest");
            unvested = add96(unvested, toUnvest, "GNBU::unvest: adding overflow");
            _unvestedAmounts[msg.sender][i] = totalUnvestedForNonce;
        }
        _unfrozenBalances[msg.sender] = add96(_unfrozenBalances[msg.sender], unvested, "GNBU::unvest: adding overflow");
        emit Unvest(msg.sender, unvested);
    }
    
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }
    
    function getPriorVotes(address account, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "GNBU::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

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

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        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;
    }
    
    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = _unfrozenBalances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "GNBU::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "GNBU::_transferTokens: cannot transfer to the zero address");

        _unfrozenBalances[src] = sub96(_unfrozenBalances[src], amount, "GNBU::_transferTokens: transfer amount exceeds balance");
        _unfrozenBalances[dst] = add96(_unfrozenBalances[dst], amount, "GNBU::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

        _moveDelegates(delegates[src], delegates[dst], amount);
    }
    
    function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint96 srcRepNew = sub96(srcRepOld, amount, "GNBU::_moveVotes: vote amount underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint96 dstRepNew = add96(dstRepOld, amount, "GNBU::_moveVotes: vote amount overflows");
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }
    
    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "GNBU::_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 DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function _vest(address user, uint96 amount) private {
        uint32 nonce = ++_vestingNonces[user];
        _vestingAmounts[user][nonce] = amount;
        _vestingReleaseStartDates[user][nonce] = block.timestamp + vestingFirstPeriod;
        _unfrozenBalances[owner] = sub96(_unfrozenBalances[owner], amount, "GNBU::_vest: exceeds owner balance");
        emit Transfer(owner, user, amount);
    }


    
    function burnTokens(uint rawAmount) public onlyOwner returns (bool success) {
        uint96 amount = safe96(rawAmount, "GNBU::burnTokens: amount exceeds 96 bits");
        require(amount <= _unfrozenBalances[owner]);
        _unfrozenBalances[owner] = sub96(_unfrozenBalances[owner], amount, "GNBU::burnTokens: transfer amount exceeds balance");
        totalSupply = sub96(totalSupply, amount, "GNBU::burnTokens: transfer amount exceeds total supply");
        emit Transfer(owner, address(0), amount);
        return true;
    }

    function vest(address user, uint rawAmount) external {
        require (vesters[msg.sender], "GNBU::vest: not vester");
        uint96 amount = safe96(rawAmount, "GNBU::vest: amount exceeds 96 bits");
        _vest(user, amount);
    }
    
   
    function multisend(address[] memory to, uint[] memory values) public onlyOwner returns (uint) {
        require(to.length == values.length);
        require(to.length < 100);
        uint sum;
        for (uint j; j < values.length; j++) {
            sum += values[j];
        }
        uint96 _sum = safe96(sum, "GNBU::transfer: amount exceeds 96 bits");
        _unfrozenBalances[owner] = sub96(_unfrozenBalances[owner], _sum, "GNBU::_transferTokens: transfer amount exceeds balance");
        for (uint i; i < to.length; i++) {
            _unfrozenBalances[to[i]] = add96(_unfrozenBalances[to[i]], uint96(values[i]), "GNBU::_transferTokens: transfer amount exceeds balance");
            emit Transfer(owner, to[i], values[i]);
        }
        return(to.length);
    }

    function multivest(address[] memory to, uint[] memory values) external onlyOwner returns (uint) {
        require(to.length == values.length);
        require(to.length < 100);
        uint sum;
        for (uint j; j < values.length; j++) {
            sum += values[j];
        }
        uint96 _sum = safe96(sum, "GNBU::multivest: amount exceeds 96 bits");
        _unfrozenBalances[owner] = sub96(_unfrozenBalances[owner], _sum, "GNBU::multivest: transfer amount exceeds balance");
        for (uint i; i < to.length; i++) {
            uint32 nonce = ++_vestingNonces[to[i]];
            _vestingAmounts[to[i]][nonce] = uint96(values[i]);
            _vestingReleaseStartDates[to[i]][nonce] = block.timestamp + vestingFirstPeriod;
            emit Transfer(owner, to[i], values[i]);
        }
        return(to.length);
    }
    
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        return IERC20(tokenAddress).transfer(owner, tokens);
    }

    function updateVesters(address vester, bool isActive) external onlyOwner { 
        vesters[vester] = isActive;
    }

    function acceptOwnership() public override {
        require(msg.sender == newOwner);
        uint96 amount = _unfrozenBalances[owner];
        _transferTokens(owner, newOwner, amount);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }

    function updateSupportUnitAdd(address newSupportUnit) external onlyOwner {
        for (uint i; i < supportUnits.length; i++) {
            require (supportUnits[i] != newSupportUnit, "GNBU::updateSupportUnitAdd: support unit exists");
        }
        supportUnits.push(newSupportUnit);
        supportUnitsCnt++;
    }

    function updateSupportUnitRemove(uint supportUnitIndex) external onlyOwner {
        supportUnits[supportUnitIndex] = supportUnits[supportUnits.length - 1];
        supportUnits.pop();
        supportUnitsCnt--;
    }
    



    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function getChainId() internal view returns (uint) {
        return block.chainid;
    }

        
    function mul96(uint96 a, uint96 b) internal pure returns (uint96) {
        if (a == 0) {
            return 0;
        }
        uint96 c = a * b;
        require(c / a == b, "GNBU:mul96: multiplication overflow");
        return c;
    }

    function mul96(uint256 a, uint96 b) internal pure returns (uint96) {
        uint96 _a = safe96(a, "GNBU:mul96: amount exceeds uint96");
        if (_a == 0) {
            return 0;
        }
        uint96 c = _a * b;
        require(c / _a == b, "GNBU:mul96: multiplication overflow");
        return c;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unvest","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"availableForTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"availableForUnvesting","outputs":[{"internalType":"uint256","name":"unvestAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"burnTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeCirculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"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":"to","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"multisend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"multivest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supportUnits","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportUnitsCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"transferOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unvest","outputs":[{"internalType":"uint96","name":"unvested","type":"uint96"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSupportUnit","type":"address"}],"name":"updateSupportUnitAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supportUnitIndex","type":"uint256"}],"name":"updateSupportUnitRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vester","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"updateVesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"vest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint32","name":"nonce","type":"uint32"}],"name":"vestingInfo","outputs":[{"internalType":"uint256","name":"vestingAmount","type":"uint256"},{"internalType":"uint256","name":"unvestedAmount","type":"uint256"},{"internalType":"uint256","name":"vestingReleaseStartDate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"vestingNonces","outputs":[{"internalType":"uint256","name":"lastNonce","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526001805460ff60a01b19169055600280546a52b7d2dcc80cd2e40000006001600160601b031991821617909155600a8054624f1a00921691909117600160601b600160c01b0319166ec864000000000000000000000000001790553480156200006c57600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360028054600080546001600160a01b0390811682526004602052604080832080546001600160601b0319166001600160601b03958616179055825494549051949091169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926200012d92909116906200013b565b60405180910390a36200014f565b6001600160601b0391909116815260200190565b615384806200015f6000396000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c80638456cb591161019c578063c3cda520116100ee578063dc39d06d11610097578063f1127ed811610071578063f1127ed8146105e7578063f1b5c88e14610608578063f2fde38b1461061b576102ff565b8063dc39d06d146105b9578063dd62ed3e146105cc578063e7a324dc146105df576102ff565b8063d505accf116100c8578063d505accf14610571578063d84a139d14610584578063dc25ca51146105a6576102ff565b8063c3cda52014610543578063c3ef298714610556578063d4ee1d9014610569576102ff565b8063a9059cbb11610150578063b24d53101161012a578063b24d53101461050a578063b4b5ea571461051d578063bdfb5b9014610530576102ff565b8063a9059cbb146104dc578063aad41a41146104ef578063aff00e7514610502576102ff565b806395d89b411161018157806395d89b41146104b9578063985d5449146104c1578063a6237aa2146104c9576102ff565b80638456cb59146104a95780638da5cb5b146104b1576102ff565b80633f4ba83a116102555780636fcfff4511610209578063782d6fe1116101e3578063782d6fe11461047b57806379ba50971461048e5780637ecebe0014610496576102ff565b80636fcfff451461043557806370a082311461045557806371ad963414610468576102ff565b80635c19a95c1161023a5780635c19a95c146104075780635c975abb1461041a5780636d1b229d14610422576102ff565b80633f4ba83a146103df578063587cde1e146103e7576102ff565b806320606b70116102b75780632797c6c8116102915780632797c6c8146103ad57806330adf81f146103c2578063313ce567146103ca576102ff565b806320606b701461037f57806323b872dd1461038757806324d6239e1461039a576102ff565b80631501ea1c116102e85780631501ea1c1461034257806318160ddd146103555780631dcd5c5d1461036a576102ff565b806306fdde0314610304578063095ea7b314610322575b600080fd5b61030c61062e565b60405161031991906147c9565b60405180910390f35b61033561033036600461449e565b610667565b60405161031991906146f4565b610335610350366004614378565b6107a2565b61035d6107b7565b6040516103199190614cc3565b6103726107cb565b60405161031991906146ff565b6103726107d1565b6103356103953660046143c4565b6107f5565b6103726103a8366004614378565b6109c0565b6103c06103bb36600461449e565b6109fa565b005b610372610a81565b6103d2610aa5565b6040516103199190614cb5565b6103c0610aaa565b6103fa6103f5366004614378565b610b75565b6040516103199190614679565b6103c0610415366004614378565b610b9d565b610335610bd2565b61033561043036600461462b565b610bf3565b610448610443366004614378565b610e33565b6040516103199190614c80565b610372610463366004614378565b610e4b565b610372610476366004614378565b610fd5565b61035d61048936600461449e565b611003565b6103c06112c4565b6103726104a4366004614378565b6113ca565b6103c06113dc565b6103fa6114bf565b61030c6114db565b61035d611514565b6103c06104d7366004614468565b611921565b6103356104ea36600461449e565b6119c8565b6103726104fd366004614551565b611a2e565b610372611ec3565b6103c061051836600461462b565b612003565b61035d61052b366004614378565b6121ec565b6103fa61053e36600461462b565b61228a565b6103c06105513660046144c7565b6122c1565b610372610564366004614551565b612591565b6103fa612ad7565b6103c061057f3660046143ff565b612af3565b61059761059236600461451e565b612f7e565b60405161031993929190614c6a565b6103c06105b4366004614378565b612ff9565b6103356105c736600461449e565b613192565b6103726105da366004614392565b613290565b6103726132d6565b6105fa6105f536600461451e565b6132fa565b604051610319929190614c91565b610372610616366004614378565b613335565b6103c0610629366004614378565b61361e565b6040518060400160405280601781526020017f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561069257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156106cf57506bffffffffffffffffffffffff6106f4565b6106f1836040518060600160405280602581526020016151ce602591396136de565b90505b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061078e908590614cc3565b60405180910390a360019150505b92915050565b60096020526000908152604090205460ff1681565b6002546bffffffffffffffffffffffff1681565b600c5481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60015460009074010000000000000000000000000000000000000000900460ff161561082057600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203380855290835281842054825160608101909352602580845291946bffffffffffffffffffffffff9091169390926108889288926151ce908301396136de565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108d457506bffffffffffffffffffffffff82811614155b156109a85760006108fe83836040518060600160405280603d8152602001614feb603d9139613730565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600360209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099e908590614cc3565b60405180910390a3505b6109b387878361379e565b5060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020546bffffffffffffffffffffffff165b919050565b3360009081526009602052604090205460ff16610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614903565b60405180910390fd5b6000610a708260405180606001604052806022815260200161532d602291396136de565b9050610a7c8382613a05565b505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60005473ffffffffffffffffffffffffffffffffffffffff163314610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff16610b2257600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600d6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615610bc557600080fd5b610bcf3382613bff565b50565b60015474010000000000000000000000000000000000000000900460ff1681565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000610c69836040518060600160405280602881526020016150f9602891396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260409020549091506bffffffffffffffffffffffff9081169082161115610cb057600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526031808452610d0d936bffffffffffffffffffffffff909216928592919061519d90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9485161790556002548251606081019093526036808452610d98949190911692859290919061527990830139613730565b600280547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790556000805460405173ffffffffffffffffffffffffffffffffffffffff909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e22908590614cc3565b60405180910390a350600192915050565b600f6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602090815260408083205460059092528220546bffffffffffffffffffffffff9091169063ffffffff16610eac576bffffffffffffffffffffffff1690506109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602052604090205463ffffffff90811690821611610fc05773ffffffffffffffffffffffffffffffffffffffff8416600081815260066020908152604080832063ffffffff86168085529083528184205494845260078352818420908452825280832054815160608101909252602e8083529394610f68946bffffffffffffffffffffffff918216949290911692916150cb90830139613730565b9050610faa83826040518060400160405280601981526020017f474e42553a3a62616c616e63654f663a206f766572666c6f7700000000000000815250613cb3565b9250508080610fb890614ef5565b915050610eaf565b506bffffffffffffffffffffffff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205463ffffffff1690565b600043821061103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061483a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205463ffffffff168061107957600091505061079c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812084916110ab600185614e3d565b63ffffffff908116825260208201929092526040016000205416116111315773ffffffffffffffffffffffffffffffffffffffff84166000908152600e60205260408120906110fb600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff16915061079c9050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020908152604080832083805290915290205463ffffffff1683101561117957600091505061079c565b600080611187600184614e3d565b90505b8163ffffffff168163ffffffff16111561126c57600060026111ac8484614e3d565b6111b69190614db0565b6111c09083614e3d565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600e6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff16918101919091529192508714156112405760200151945061079c9350505050565b805163ffffffff1687111561125757819350611265565b611262600183614e3d565b92505b505061118a565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112e857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff90811680835260046020526040909220546001546bffffffffffffffffffffffff90911692611333929091168361379e565b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35060018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60106020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff161561145557600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f474e42550000000000000000000000000000000000000000000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561153f57600080fd5b3360009081526005602052604090205463ffffffff1661158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614ae5565b60015b3360009081526005602052604090205463ffffffff908116908216116118355733600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561160157611823565b33600090815260086020908152604080832063ffffffff8516845290915290205442101561162e57611835565b600a5433600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff16906116b5906116819042614e26565b33600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b6116bf9190614dd3565b33600090815260066020908152604080832063ffffffff871684529091529020549091506bffffffffffffffffffffffff908116908216111561172d575033600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b33600090815260076020908152604080832063ffffffff8616845282529182902054825160608101909352603680845284936117819385936bffffffffffffffffffffffff169290614fb590830139613730565b91506117c384836040518060400160405280601d81526020017f474e42553a3a756e766573743a20616464696e67206f766572666c6f77000000815250613cb3565b33600090815260076020908152604080832063ffffffff88168452909152902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091559250505b8061182d81614ef5565b91505061158e565b5033600090815260046020908152604091829020548251808401909352601d83527f474e42553a3a756e766573743a20616464696e67206f766572666c6f770000009183019190915261189a916bffffffffffffffffffffffff909116908390613cb3565b336000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff949094169390931790925590517ffa5db7be915522c6b65b302ca1c4bfbfd4f0d898d50af75e513796dc44aee52b916119169184906146c0565b60405180910390a190565b60005473ffffffffffffffffffffffffffffffffffffffff163314611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015460009074010000000000000000000000000000000000000000900460ff16156119f357600080fd5b6000611a1783604051806060016040528060268152602001615121602691396136de565b9050611a2433858361379e565b5060019392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b8151835114611a8e57600080fd5b6064835110611a9c57600080fd5b6000805b8351811015611b0957838181518110611ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182611af59190614d49565b915080611b0181614ebc565b915050611aa0565b506000611b2e82604051806060016040528060268152602001615121602691396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526036808452939450611b8f936bffffffffffffffffffffffff9091169285929091906152af90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb857611cf460046000888481518110611c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16868381518110611cce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518060600160405280603681526020016152af60369139613cb3565b60046000888481518110611d31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550858181518110611dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110611e89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611e9e91906146ff565b60405180910390a380611eb081614ebc565b915050611bf1565b505092519392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260408120546bffffffffffffffffffffffff16815b600b54811015611fb957611fa58260046000600b8581548110611f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282810193909352604091820190205481516060810190925260268083526bffffffffffffffffffffffff909116926151f390830139613cb3565b915080611fb181614ebc565b915050611ef9565b5060025460408051606081019091526030808252611fef926bffffffffffffffffffffffff169184916150286020830139613730565b6bffffffffffffffffffffffff1691505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314612054576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b600b805461206490600190614e26565b8154811061209b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106120fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b80548061217b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155600c8054916121e483614e87565b919050555050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f602052604081205463ffffffff1680612224576000612283565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e6020526040812090612255600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b600b818154811061229a57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60015474010000000000000000000000000000000000000000900460ff16156122e957600080fd5b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c61236a613dd4565b3060405160200161237e949392919061477a565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016123cf9493929190614749565b604051602081830303815290604052805190602001209050600082826040516020016123fc929190614643565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161243994939291906147ab565b6020604051602081039080840390855afa15801561245b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166124d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614bd6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260106020526040812080549161250483614ebc565b919050558914612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b79565b8742111561257a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614a51565b612584818b613bff565b505050505b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146125e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b81518351146125f157600080fd5b60648351106125ff57600080fd5b6000805b835181101561266c57838181518110612645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826126589190614d49565b91508061266481614ebc565b915050612603565b50600061269182604051806060016040528060278152602001615058602791396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460209081526040918290205482516060810190935260308084529394506126f2936bffffffffffffffffffffffff90911692859290919061521990830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb85760006005600088848151811061279c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900463ffffffff166127fa90614ef5565b91906101000a81548163ffffffff021916908363ffffffff16021790559050858281518110612852577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000898581518110612897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040908101600090812063ffffffff86168252909252902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff928316179055600a5461291f911642614d49565b6008600089858151811061295c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff168152602001908152602001600020819055508682815181106129f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef888581518110612aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051612abc91906146ff565b60405180910390a35080612acf81614ebc565b915050612754565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615612b1b57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415612b5857506bffffffffffffffffffffffff612b7d565b612b7a866040518060600160405280602481526020016150a7602491396136de565b90505b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c612bfe613dd4565b30604051602001612c12949392919061477a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8c166000908152601090935290822080549193507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c9186612ca383614ebc565b919050558b604051602001612cbd96959493929190614708565b60405160208183030381529060405280519060200120905060008282604051602001612cea929190614643565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051612d2794939291906147ab565b6020604051602081039080840390855afa158015612d49573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614aae565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906148cc565b88421115612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614c33565b84600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051612f689190614cc3565b60405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff909116600081815260066020908152604080832063ffffffff909516808452948252808320548484526007835281842086855283528184205494845260088352818420958452949091529020546bffffffffffffffffffffffff92831693919092169190565b60005473ffffffffffffffffffffffffffffffffffffffff16331461304a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60005b600b54811015613114578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106130a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415613102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061493a565b8061310c81614ebc565b91505061304d565b50600b805460018101825560009182527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c8054916121e483614ebc565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146131e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581169263a9059cbb9261323e9290911690869060040161469a565b602060405180830381600087803b15801561325857600080fd5b505af115801561326c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612283919061460f565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526003602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600e60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205463ffffffff1661336d575060006109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205463ffffffff908116908216116136185773ffffffffffffffffffffffffffffffffffffffff8316600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561340f57613606565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832063ffffffff8516845290915290205442101561345257613618565b600a5473ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff1690613505906134bb9042614e26565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b61350f9190614dd3565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260066020908152604080832063ffffffff871684529091529020546bffffffffffffffffffffffff9182169250168111156135a7575073ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832063ffffffff861684529091529020546135f6906bffffffffffffffffffffffff1682614e26565b90506136028184614d49565b9250505b8061361081614ef5565b915050613370565b50919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461366f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015473ffffffffffffffffffffffffffffffffffffffff8281169116141561369757600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000816c010000000000000000000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff161115829061378b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b506137968385614e62565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166137eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906149f4565b73ffffffffffffffffffffffffffffffffffffffff8216613838576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614997565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020908152604091829020548251606081019093526036808452613895936bffffffffffffffffffffffff90921692859291906152af90830139613730565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452613927949190911692859290919061524990830139613cb3565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906139be908590614cc3565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff8084166000908152600d6020526040808220548584168352912054610a7c92918216911683613dd8565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548290613a3d9063ffffffff16614ef5565b825463ffffffff8083166101009490940a8481029102199091161790925573ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083209383529290522080546bffffffffffffffffffffffff8086167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921691909117909155600a54919250613ad8911642614d49565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260086020908152604080832063ffffffff871684528252808320949094558154909216815260048252829020548251606081019093526022808452613b55936bffffffffffffffffffffffff909216928692919061514790830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff90811682526004602052604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559054915185821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613bf2908690614cc3565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600d6020818152604080842080546004845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4613cad828483613dd8565b50505050565b600080613cc08486614d89565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390613d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b50949350505050565b600080613d49846040518060600160405280602181526020016152e5602191396136de565b90506bffffffffffffffffffffffff8116613d6857600091505061079c565b6000613d748483614df2565b90506bffffffffffffffffffffffff8416613d8f8383614dd3565b6bffffffffffffffffffffffff1614613796576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b1c565b4690565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613e2257506000816bffffffffffffffffffffffff16115b15610a7c5773ffffffffffffffffffffffffffffffffffffffff831615613f145773ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205463ffffffff169081613e7c576000613edb565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812090613ead600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613f02828560405180606001604052806028815260200161507f60289139613730565b9050613f1086848484613ff9565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610a7c5773ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604081205463ffffffff169081613f69576000613fc8565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812090613f9a600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613fef828560405180606001604052806027815260200161530660279139613cb3565b9050612589858484845b600061401d4360405180606001604052806034815260200161516960349139614295565b905060008463ffffffff16118015614084575073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812063ffffffff831691614068600188614e3d565b63ffffffff908116825260208201929092526040016000205416145b1561411a5773ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812083916140bb600188614e3d565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff90921691909117905561423e565b60408051808201825263ffffffff83811682526bffffffffffffffffffffffff858116602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600e82528681208b86168252909152949094209251835494517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009095169216919091177fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff1664010000000093909116929092029190911790556141e5846001614d61565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051614286929190614cdc565b60405180910390a25050505050565b6000816401000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b803573ffffffffffffffffffffffffffffffffffffffff811681146109f557600080fd5b600082601f83011261430b578081fd5b8135602061432061431b83614d25565b614cfb565b828152818101908583018385028701840188101561433c578586fd5b855b8581101561435a5781358452928401929084019060010161433e565b5090979650505050505050565b803560ff811681146109f557600080fd5b600060208284031215614389578081fd5b612283826142d7565b600080604083850312156143a4578081fd5b6143ad836142d7565b91506143bb602084016142d7565b90509250929050565b6000806000606084860312156143d8578081fd5b6143e1846142d7565b92506143ef602085016142d7565b9150604084013590509250925092565b600080600080600080600060e0888a031215614419578283fd5b614422886142d7565b9650614430602089016142d7565b9550604088013594506060880135935061444c60808901614367565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561447a578182fd5b614483836142d7565b9150602083013561449381614fa6565b809150509250929050565b600080604083850312156144b0578182fd5b6144b9836142d7565b946020939093013593505050565b60008060008060008060c087890312156144df578182fd5b6144e8876142d7565b9550602087013594506040870135935061450460608801614367565b92506080870135915060a087013590509295509295509295565b60008060408385031215614530578182fd5b614539836142d7565b9150602083013563ffffffff81168114614493578182fd5b60008060408385031215614563578182fd5b823567ffffffffffffffff8082111561457a578384fd5b818501915085601f83011261458d578384fd5b8135602061459d61431b83614d25565b82815281810190858301838502870184018b10156145b9578889fd5b8896505b848710156145e2576145ce816142d7565b8352600196909601959183019183016145bd565b50965050860135925050808211156145f8578283fd5b50614605858286016142fb565b9150509250929050565b600060208284031215614620578081fd5b815161228381614fa6565b60006020828403121561463c578081fd5b5035919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845273ffffffffffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156147f5578581018301518582016040015282016147d9565b818111156148065783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526027908201527f474e42553a3a6765745072696f72566f7465733a206e6f74207965742064657460408201527f65726d696e656400000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f474e42553a3a7065726d69743a20756e617574686f72697a6564000000000000604082015260600190565b60208082526016908201527f474e42553a3a766573743a206e6f742076657374657200000000000000000000604082015260600190565b6020808252602f908201527f474e42553a3a757064617465537570706f7274556e69744164643a207375707060408201527f6f727420756e6974206578697374730000000000000000000000000000000000606082015260800190565b6020808252603a908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606082015260800190565b6020808252603c908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a207369676e6174757265206560408201527f7870697265640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a20696e76616c6964207369676e617475726500604082015260600190565b6020808252601d908201527f474e42553a3a756e766573743a4e6f2076657374656420616d6f756e74000000604082015260600190565b60208082526023908201527f474e42553a6d756c39363a206d756c7469706c69636174696f6e206f7665726660408201527f6c6f770000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f474e42553a3a64656c656761746542795369673a20696e76616c6964206e6f6e60408201527f6365000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a20696e76616c69642073696760408201527f6e61747572650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a207369676e6174757265206578706972656400604082015260600190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b6bffffffffffffffffffffffff91909116815260200190565b6bffffffffffffffffffffffff92831681529116602082015260400190565b60405181810167ffffffffffffffff81118282101715614d1d57614d1d614f77565b604052919050565b600067ffffffffffffffff821115614d3f57614d3f614f77565b5060209081020190565b60008219821115614d5c57614d5c614f19565b500190565b600063ffffffff808316818516808303821115614d8057614d80614f19565b01949350505050565b60006bffffffffffffffffffffffff808316818516808303821115614d8057614d80614f19565b600063ffffffff80841680614dc757614dc7614f48565b92169190910492915050565b60006bffffffffffffffffffffffff80841680614dc757614dc7614f48565b60006bffffffffffffffffffffffff80831681851681830481118215151615614e1d57614e1d614f19565b02949350505050565b600082821015614e3857614e38614f19565b500390565b600063ffffffff83811690831681811015614e5a57614e5a614f19565b039392505050565b60006bffffffffffffffffffffffff83811690831681811015614e5a57614e5a614f19565b600081614e9657614e96614f19565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eee57614eee614f19565b5060010190565b600063ffffffff80831681811415614f0f57614f0f614f19565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114610bcf57600080fdfe474e42553a3a756e766573743a20616c726561647920756e76657374656420616d6f756e74206578636565647320746f556e76657374474e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365474e42553a3a6672656543697263756c6174696f6e3a20616d6f756e742065786365656420746f74616c537570706c79474e42553a3a6d756c7469766573743a20616d6f756e7420657863656564732039362062697473474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773474e42553a3a7065726d69743a20616d6f756e7420657863656564732039362062697473474e42553a3a62616c616e63654f663a20756e766573746564206578636565642076657374656420616d6f756e74474e42553a3a6275726e546f6b656e733a20616d6f756e7420657863656564732039362062697473474e42553a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473474e42553a3a5f766573743a2065786365656473206f776e65722062616c616e6365474e42553a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a617070726f76653a20616d6f756e7420657863656564732039362062697473474e42553a3a6672656543697263756c6174696f6e3a20616464696e67206f766572666c6f77474e42553a3a6d756c7469766573743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e74206578636565647320746f74616c20737570706c79474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a6d756c39363a20616d6f756e7420657863656564732075696e743936474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773474e42553a3a766573743a20616d6f756e7420657863656564732039362062697473a26469706673582212200411e264d09cf94b2e62a762b827fd9c08eb09587de5a825361b0709c19f376664736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102ff5760003560e01c80638456cb591161019c578063c3cda520116100ee578063dc39d06d11610097578063f1127ed811610071578063f1127ed8146105e7578063f1b5c88e14610608578063f2fde38b1461061b576102ff565b8063dc39d06d146105b9578063dd62ed3e146105cc578063e7a324dc146105df576102ff565b8063d505accf116100c8578063d505accf14610571578063d84a139d14610584578063dc25ca51146105a6576102ff565b8063c3cda52014610543578063c3ef298714610556578063d4ee1d9014610569576102ff565b8063a9059cbb11610150578063b24d53101161012a578063b24d53101461050a578063b4b5ea571461051d578063bdfb5b9014610530576102ff565b8063a9059cbb146104dc578063aad41a41146104ef578063aff00e7514610502576102ff565b806395d89b411161018157806395d89b41146104b9578063985d5449146104c1578063a6237aa2146104c9576102ff565b80638456cb59146104a95780638da5cb5b146104b1576102ff565b80633f4ba83a116102555780636fcfff4511610209578063782d6fe1116101e3578063782d6fe11461047b57806379ba50971461048e5780637ecebe0014610496576102ff565b80636fcfff451461043557806370a082311461045557806371ad963414610468576102ff565b80635c19a95c1161023a5780635c19a95c146104075780635c975abb1461041a5780636d1b229d14610422576102ff565b80633f4ba83a146103df578063587cde1e146103e7576102ff565b806320606b70116102b75780632797c6c8116102915780632797c6c8146103ad57806330adf81f146103c2578063313ce567146103ca576102ff565b806320606b701461037f57806323b872dd1461038757806324d6239e1461039a576102ff565b80631501ea1c116102e85780631501ea1c1461034257806318160ddd146103555780631dcd5c5d1461036a576102ff565b806306fdde0314610304578063095ea7b314610322575b600080fd5b61030c61062e565b60405161031991906147c9565b60405180910390f35b61033561033036600461449e565b610667565b60405161031991906146f4565b610335610350366004614378565b6107a2565b61035d6107b7565b6040516103199190614cc3565b6103726107cb565b60405161031991906146ff565b6103726107d1565b6103356103953660046143c4565b6107f5565b6103726103a8366004614378565b6109c0565b6103c06103bb36600461449e565b6109fa565b005b610372610a81565b6103d2610aa5565b6040516103199190614cb5565b6103c0610aaa565b6103fa6103f5366004614378565b610b75565b6040516103199190614679565b6103c0610415366004614378565b610b9d565b610335610bd2565b61033561043036600461462b565b610bf3565b610448610443366004614378565b610e33565b6040516103199190614c80565b610372610463366004614378565b610e4b565b610372610476366004614378565b610fd5565b61035d61048936600461449e565b611003565b6103c06112c4565b6103726104a4366004614378565b6113ca565b6103c06113dc565b6103fa6114bf565b61030c6114db565b61035d611514565b6103c06104d7366004614468565b611921565b6103356104ea36600461449e565b6119c8565b6103726104fd366004614551565b611a2e565b610372611ec3565b6103c061051836600461462b565b612003565b61035d61052b366004614378565b6121ec565b6103fa61053e36600461462b565b61228a565b6103c06105513660046144c7565b6122c1565b610372610564366004614551565b612591565b6103fa612ad7565b6103c061057f3660046143ff565b612af3565b61059761059236600461451e565b612f7e565b60405161031993929190614c6a565b6103c06105b4366004614378565b612ff9565b6103356105c736600461449e565b613192565b6103726105da366004614392565b613290565b6103726132d6565b6105fa6105f536600461451e565b6132fa565b604051610319929190614c91565b610372610616366004614378565b613335565b6103c0610629366004614378565b61361e565b6040518060400160405280601781526020017f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561069257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156106cf57506bffffffffffffffffffffffff6106f4565b6106f1836040518060600160405280602581526020016151ce602591396136de565b90505b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061078e908590614cc3565b60405180910390a360019150505b92915050565b60096020526000908152604090205460ff1681565b6002546bffffffffffffffffffffffff1681565b600c5481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60015460009074010000000000000000000000000000000000000000900460ff161561082057600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203380855290835281842054825160608101909352602580845291946bffffffffffffffffffffffff9091169390926108889288926151ce908301396136de565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108d457506bffffffffffffffffffffffff82811614155b156109a85760006108fe83836040518060600160405280603d8152602001614feb603d9139613730565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600360209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099e908590614cc3565b60405180910390a3505b6109b387878361379e565b5060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020546bffffffffffffffffffffffff165b919050565b3360009081526009602052604090205460ff16610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614903565b60405180910390fd5b6000610a708260405180606001604052806022815260200161532d602291396136de565b9050610a7c8382613a05565b505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60005473ffffffffffffffffffffffffffffffffffffffff163314610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff16610b2257600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600d6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615610bc557600080fd5b610bcf3382613bff565b50565b60015474010000000000000000000000000000000000000000900460ff1681565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000610c69836040518060600160405280602881526020016150f9602891396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260409020549091506bffffffffffffffffffffffff9081169082161115610cb057600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526031808452610d0d936bffffffffffffffffffffffff909216928592919061519d90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9485161790556002548251606081019093526036808452610d98949190911692859290919061527990830139613730565b600280547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790556000805460405173ffffffffffffffffffffffffffffffffffffffff909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e22908590614cc3565b60405180910390a350600192915050565b600f6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602090815260408083205460059092528220546bffffffffffffffffffffffff9091169063ffffffff16610eac576bffffffffffffffffffffffff1690506109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602052604090205463ffffffff90811690821611610fc05773ffffffffffffffffffffffffffffffffffffffff8416600081815260066020908152604080832063ffffffff86168085529083528184205494845260078352818420908452825280832054815160608101909252602e8083529394610f68946bffffffffffffffffffffffff918216949290911692916150cb90830139613730565b9050610faa83826040518060400160405280601981526020017f474e42553a3a62616c616e63654f663a206f766572666c6f7700000000000000815250613cb3565b9250508080610fb890614ef5565b915050610eaf565b506bffffffffffffffffffffffff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205463ffffffff1690565b600043821061103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061483a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205463ffffffff168061107957600091505061079c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812084916110ab600185614e3d565b63ffffffff908116825260208201929092526040016000205416116111315773ffffffffffffffffffffffffffffffffffffffff84166000908152600e60205260408120906110fb600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff16915061079c9050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020908152604080832083805290915290205463ffffffff1683101561117957600091505061079c565b600080611187600184614e3d565b90505b8163ffffffff168163ffffffff16111561126c57600060026111ac8484614e3d565b6111b69190614db0565b6111c09083614e3d565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600e6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff16918101919091529192508714156112405760200151945061079c9350505050565b805163ffffffff1687111561125757819350611265565b611262600183614e3d565b92505b505061118a565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112e857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff90811680835260046020526040909220546001546bffffffffffffffffffffffff90911692611333929091168361379e565b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35060018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60106020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff161561145557600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f474e42550000000000000000000000000000000000000000000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561153f57600080fd5b3360009081526005602052604090205463ffffffff1661158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614ae5565b60015b3360009081526005602052604090205463ffffffff908116908216116118355733600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561160157611823565b33600090815260086020908152604080832063ffffffff8516845290915290205442101561162e57611835565b600a5433600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff16906116b5906116819042614e26565b33600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b6116bf9190614dd3565b33600090815260066020908152604080832063ffffffff871684529091529020549091506bffffffffffffffffffffffff908116908216111561172d575033600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b33600090815260076020908152604080832063ffffffff8616845282529182902054825160608101909352603680845284936117819385936bffffffffffffffffffffffff169290614fb590830139613730565b91506117c384836040518060400160405280601d81526020017f474e42553a3a756e766573743a20616464696e67206f766572666c6f77000000815250613cb3565b33600090815260076020908152604080832063ffffffff88168452909152902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091559250505b8061182d81614ef5565b91505061158e565b5033600090815260046020908152604091829020548251808401909352601d83527f474e42553a3a756e766573743a20616464696e67206f766572666c6f770000009183019190915261189a916bffffffffffffffffffffffff909116908390613cb3565b336000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff949094169390931790925590517ffa5db7be915522c6b65b302ca1c4bfbfd4f0d898d50af75e513796dc44aee52b916119169184906146c0565b60405180910390a190565b60005473ffffffffffffffffffffffffffffffffffffffff163314611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015460009074010000000000000000000000000000000000000000900460ff16156119f357600080fd5b6000611a1783604051806060016040528060268152602001615121602691396136de565b9050611a2433858361379e565b5060019392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b8151835114611a8e57600080fd5b6064835110611a9c57600080fd5b6000805b8351811015611b0957838181518110611ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182611af59190614d49565b915080611b0181614ebc565b915050611aa0565b506000611b2e82604051806060016040528060268152602001615121602691396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526036808452939450611b8f936bffffffffffffffffffffffff9091169285929091906152af90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb857611cf460046000888481518110611c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16868381518110611cce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518060600160405280603681526020016152af60369139613cb3565b60046000888481518110611d31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550858181518110611dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110611e89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611e9e91906146ff565b60405180910390a380611eb081614ebc565b915050611bf1565b505092519392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260408120546bffffffffffffffffffffffff16815b600b54811015611fb957611fa58260046000600b8581548110611f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282810193909352604091820190205481516060810190925260268083526bffffffffffffffffffffffff909116926151f390830139613cb3565b915080611fb181614ebc565b915050611ef9565b5060025460408051606081019091526030808252611fef926bffffffffffffffffffffffff169184916150286020830139613730565b6bffffffffffffffffffffffff1691505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314612054576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b600b805461206490600190614e26565b8154811061209b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106120fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b80548061217b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155600c8054916121e483614e87565b919050555050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f602052604081205463ffffffff1680612224576000612283565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e6020526040812090612255600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b600b818154811061229a57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60015474010000000000000000000000000000000000000000900460ff16156122e957600080fd5b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c61236a613dd4565b3060405160200161237e949392919061477a565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016123cf9493929190614749565b604051602081830303815290604052805190602001209050600082826040516020016123fc929190614643565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161243994939291906147ab565b6020604051602081039080840390855afa15801561245b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166124d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614bd6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260106020526040812080549161250483614ebc565b919050558914612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b79565b8742111561257a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614a51565b612584818b613bff565b505050505b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146125e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b81518351146125f157600080fd5b60648351106125ff57600080fd5b6000805b835181101561266c57838181518110612645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826126589190614d49565b91508061266481614ebc565b915050612603565b50600061269182604051806060016040528060278152602001615058602791396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460209081526040918290205482516060810190935260308084529394506126f2936bffffffffffffffffffffffff90911692859290919061521990830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb85760006005600088848151811061279c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900463ffffffff166127fa90614ef5565b91906101000a81548163ffffffff021916908363ffffffff16021790559050858281518110612852577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000898581518110612897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040908101600090812063ffffffff86168252909252902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff928316179055600a5461291f911642614d49565b6008600089858151811061295c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff168152602001908152602001600020819055508682815181106129f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef888581518110612aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051612abc91906146ff565b60405180910390a35080612acf81614ebc565b915050612754565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615612b1b57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415612b5857506bffffffffffffffffffffffff612b7d565b612b7a866040518060600160405280602481526020016150a7602491396136de565b90505b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c612bfe613dd4565b30604051602001612c12949392919061477a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8c166000908152601090935290822080549193507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c9186612ca383614ebc565b919050558b604051602001612cbd96959493929190614708565b60405160208183030381529060405280519060200120905060008282604051602001612cea929190614643565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051612d2794939291906147ab565b6020604051602081039080840390855afa158015612d49573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614aae565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906148cc565b88421115612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614c33565b84600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051612f689190614cc3565b60405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff909116600081815260066020908152604080832063ffffffff909516808452948252808320548484526007835281842086855283528184205494845260088352818420958452949091529020546bffffffffffffffffffffffff92831693919092169190565b60005473ffffffffffffffffffffffffffffffffffffffff16331461304a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60005b600b54811015613114578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106130a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415613102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061493a565b8061310c81614ebc565b91505061304d565b50600b805460018101825560009182527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c8054916121e483614ebc565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146131e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581169263a9059cbb9261323e9290911690869060040161469a565b602060405180830381600087803b15801561325857600080fd5b505af115801561326c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612283919061460f565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526003602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600e60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205463ffffffff1661336d575060006109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205463ffffffff908116908216116136185773ffffffffffffffffffffffffffffffffffffffff8316600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561340f57613606565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832063ffffffff8516845290915290205442101561345257613618565b600a5473ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff1690613505906134bb9042614e26565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b61350f9190614dd3565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260066020908152604080832063ffffffff871684529091529020546bffffffffffffffffffffffff9182169250168111156135a7575073ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832063ffffffff861684529091529020546135f6906bffffffffffffffffffffffff1682614e26565b90506136028184614d49565b9250505b8061361081614ef5565b915050613370565b50919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461366f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015473ffffffffffffffffffffffffffffffffffffffff8281169116141561369757600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000816c010000000000000000000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff161115829061378b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b506137968385614e62565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166137eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906149f4565b73ffffffffffffffffffffffffffffffffffffffff8216613838576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614997565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020908152604091829020548251606081019093526036808452613895936bffffffffffffffffffffffff90921692859291906152af90830139613730565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452613927949190911692859290919061524990830139613cb3565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906139be908590614cc3565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff8084166000908152600d6020526040808220548584168352912054610a7c92918216911683613dd8565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548290613a3d9063ffffffff16614ef5565b825463ffffffff8083166101009490940a8481029102199091161790925573ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083209383529290522080546bffffffffffffffffffffffff8086167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921691909117909155600a54919250613ad8911642614d49565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260086020908152604080832063ffffffff871684528252808320949094558154909216815260048252829020548251606081019093526022808452613b55936bffffffffffffffffffffffff909216928692919061514790830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff90811682526004602052604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559054915185821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613bf2908690614cc3565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600d6020818152604080842080546004845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4613cad828483613dd8565b50505050565b600080613cc08486614d89565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390613d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b50949350505050565b600080613d49846040518060600160405280602181526020016152e5602191396136de565b90506bffffffffffffffffffffffff8116613d6857600091505061079c565b6000613d748483614df2565b90506bffffffffffffffffffffffff8416613d8f8383614dd3565b6bffffffffffffffffffffffff1614613796576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b1c565b4690565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613e2257506000816bffffffffffffffffffffffff16115b15610a7c5773ffffffffffffffffffffffffffffffffffffffff831615613f145773ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205463ffffffff169081613e7c576000613edb565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812090613ead600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613f02828560405180606001604052806028815260200161507f60289139613730565b9050613f1086848484613ff9565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610a7c5773ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604081205463ffffffff169081613f69576000613fc8565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812090613f9a600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613fef828560405180606001604052806027815260200161530660279139613cb3565b9050612589858484845b600061401d4360405180606001604052806034815260200161516960349139614295565b905060008463ffffffff16118015614084575073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812063ffffffff831691614068600188614e3d565b63ffffffff908116825260208201929092526040016000205416145b1561411a5773ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812083916140bb600188614e3d565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff90921691909117905561423e565b60408051808201825263ffffffff83811682526bffffffffffffffffffffffff858116602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600e82528681208b86168252909152949094209251835494517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009095169216919091177fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff1664010000000093909116929092029190911790556141e5846001614d61565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051614286929190614cdc565b60405180910390a25050505050565b6000816401000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b803573ffffffffffffffffffffffffffffffffffffffff811681146109f557600080fd5b600082601f83011261430b578081fd5b8135602061432061431b83614d25565b614cfb565b828152818101908583018385028701840188101561433c578586fd5b855b8581101561435a5781358452928401929084019060010161433e565b5090979650505050505050565b803560ff811681146109f557600080fd5b600060208284031215614389578081fd5b612283826142d7565b600080604083850312156143a4578081fd5b6143ad836142d7565b91506143bb602084016142d7565b90509250929050565b6000806000606084860312156143d8578081fd5b6143e1846142d7565b92506143ef602085016142d7565b9150604084013590509250925092565b600080600080600080600060e0888a031215614419578283fd5b614422886142d7565b9650614430602089016142d7565b9550604088013594506060880135935061444c60808901614367565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561447a578182fd5b614483836142d7565b9150602083013561449381614fa6565b809150509250929050565b600080604083850312156144b0578182fd5b6144b9836142d7565b946020939093013593505050565b60008060008060008060c087890312156144df578182fd5b6144e8876142d7565b9550602087013594506040870135935061450460608801614367565b92506080870135915060a087013590509295509295509295565b60008060408385031215614530578182fd5b614539836142d7565b9150602083013563ffffffff81168114614493578182fd5b60008060408385031215614563578182fd5b823567ffffffffffffffff8082111561457a578384fd5b818501915085601f83011261458d578384fd5b8135602061459d61431b83614d25565b82815281810190858301838502870184018b10156145b9578889fd5b8896505b848710156145e2576145ce816142d7565b8352600196909601959183019183016145bd565b50965050860135925050808211156145f8578283fd5b50614605858286016142fb565b9150509250929050565b600060208284031215614620578081fd5b815161228381614fa6565b60006020828403121561463c578081fd5b5035919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845273ffffffffffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156147f5578581018301518582016040015282016147d9565b818111156148065783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526027908201527f474e42553a3a6765745072696f72566f7465733a206e6f74207965742064657460408201527f65726d696e656400000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f474e42553a3a7065726d69743a20756e617574686f72697a6564000000000000604082015260600190565b60208082526016908201527f474e42553a3a766573743a206e6f742076657374657200000000000000000000604082015260600190565b6020808252602f908201527f474e42553a3a757064617465537570706f7274556e69744164643a207375707060408201527f6f727420756e6974206578697374730000000000000000000000000000000000606082015260800190565b6020808252603a908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606082015260800190565b6020808252603c908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a207369676e6174757265206560408201527f7870697265640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a20696e76616c6964207369676e617475726500604082015260600190565b6020808252601d908201527f474e42553a3a756e766573743a4e6f2076657374656420616d6f756e74000000604082015260600190565b60208082526023908201527f474e42553a6d756c39363a206d756c7469706c69636174696f6e206f7665726660408201527f6c6f770000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f474e42553a3a64656c656761746542795369673a20696e76616c6964206e6f6e60408201527f6365000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a20696e76616c69642073696760408201527f6e61747572650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a207369676e6174757265206578706972656400604082015260600190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b6bffffffffffffffffffffffff91909116815260200190565b6bffffffffffffffffffffffff92831681529116602082015260400190565b60405181810167ffffffffffffffff81118282101715614d1d57614d1d614f77565b604052919050565b600067ffffffffffffffff821115614d3f57614d3f614f77565b5060209081020190565b60008219821115614d5c57614d5c614f19565b500190565b600063ffffffff808316818516808303821115614d8057614d80614f19565b01949350505050565b60006bffffffffffffffffffffffff808316818516808303821115614d8057614d80614f19565b600063ffffffff80841680614dc757614dc7614f48565b92169190910492915050565b60006bffffffffffffffffffffffff80841680614dc757614dc7614f48565b60006bffffffffffffffffffffffff80831681851681830481118215151615614e1d57614e1d614f19565b02949350505050565b600082821015614e3857614e38614f19565b500390565b600063ffffffff83811690831681811015614e5a57614e5a614f19565b039392505050565b60006bffffffffffffffffffffffff83811690831681811015614e5a57614e5a614f19565b600081614e9657614e96614f19565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eee57614eee614f19565b5060010190565b600063ffffffff80831681811415614f0f57614f0f614f19565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114610bcf57600080fdfe474e42553a3a756e766573743a20616c726561647920756e76657374656420616d6f756e74206578636565647320746f556e76657374474e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365474e42553a3a6672656543697263756c6174696f6e3a20616d6f756e742065786365656420746f74616c537570706c79474e42553a3a6d756c7469766573743a20616d6f756e7420657863656564732039362062697473474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773474e42553a3a7065726d69743a20616d6f756e7420657863656564732039362062697473474e42553a3a62616c616e63654f663a20756e766573746564206578636565642076657374656420616d6f756e74474e42553a3a6275726e546f6b656e733a20616d6f756e7420657863656564732039362062697473474e42553a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473474e42553a3a5f766573743a2065786365656473206f776e65722062616c616e6365474e42553a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a617070726f76653a20616d6f756e7420657863656564732039362062697473474e42553a3a6672656543697263756c6174696f6e3a20616464696e67206f766572666c6f77474e42553a3a6d756c7469766573743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e74206578636565647320746f74616c20737570706c79474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a6d756c39363a20616d6f756e7420657863656564732075696e743936474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773474e42553a3a766573743a20616d6f756e7420657863656564732039362062697473a26469706673582212200411e264d09cf94b2e62a762b827fd9c08eb09587de5a825361b0709c19f376664736f6c63430008000033

Deployed Bytecode Sourcemap

2428:18945:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2470:55;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5199:452;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3125:40::-;;;;;;:::i;:::-;;:::i;2619:42::-;;;:::i;:::-;;;;;;;:::i;3314:27::-;;;:::i;:::-;;;;;;;:::i;3619:122::-;;;:::i;8915:695::-;;;;;;:::i;:::-;;:::i;8035:128::-;;;;;;:::i;:::-;;:::i;16871:239::-;;;;;;:::i;:::-;;:::i;:::-;;3872:137;;;:::i;2577:35::-;;;:::i;:::-;;;;;;;:::i;2321:100::-;;;:::i;3350:45::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9622:116::-;;;;;;:::i;:::-;;:::i;2022:26::-;;;:::i;16325:538::-;;;;;;:::i;:::-;;:::i;3561:49::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6777:505::-;;;;;;:::i;:::-;;:::i;8517:122::-;;;;;;:::i;:::-;;:::i;12033:1218::-;;;;;;:::i;:::-;;:::i;19093:307::-;;;:::i;4016:39::-;;;;;;:::i;:::-;;:::i;2215:98::-;;;:::i;1196:20::-;;;:::i;2532:38::-;;;:::i;10573:1214::-;;;:::i;18966:119::-;;;;;;:::i;:::-;;:::i;8651:252::-;;;;;;:::i;:::-;;:::i;17127:789::-;;;;;;:::i;:::-;;:::i;4628:415::-;;;:::i;19743:221::-;;;;;;:::i;:::-;;:::i;11799:222::-;;;;;;:::i;:::-;;:::i;3278:29::-;;;;;;:::i;:::-;;:::i;9750:815::-;;;;;;:::i;:::-;;:::i;17924:846::-;;;;;;:::i;:::-;;:::i;1223:23::-;;;:::i;5663:1099::-;;;;;;:::i;:::-;;:::i;8171:338::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;19408:327::-;;;;;;:::i;:::-;;:::i;18782:176::-;;;;;;:::i;:::-;;:::i;5055:136::-;;;;;;:::i;:::-;;:::i;3748:117::-;;;:::i;3484:70::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;7290:737::-;;;;;;:::i;:::-;;:::i;1568:155::-;;;;;;:::i;:::-;;:::i;2470:55::-;;;;;;;;;;;;;;;;;;;:::o;5199:452::-;2104:6;;5281:4;;2104:6;;;;;2103:7;2095:16;;;;;;5298:13:::1;5344:12;5326:9;:31;5322:192;;;-1:-1:-1::0;5390:11:0::1;5322:192;;;5444:58;5451:9;5444:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;5435:67;;5322:192;5537:10;5526:22;::::0;;;:10:::1;:22;::::0;;;;;;;::::1;:31:::0;::::1;::::0;;;;;;;;;:40;;;::::1;;::::0;::::1;;::::0;;5584:37;;5526:31;;5537:10;5584:37:::1;::::0;::::1;::::0;5526:40;;5584:37:::1;:::i;:::-;;;;;;;;5639:4;5632:11;;;2122:1;5199:452:::0;;;;:::o;3125:40::-;;;;;;;;;;;;;;;:::o;2619:42::-;;;;;;:::o;3314:27::-;;;;:::o;3619:122::-;3661:80;3619:122;:::o;8915:695::-;2104:6;;9011:4;;2104:6;;;;;2103:7;2095:16;;;;;;9093:15:::1;::::0;::::1;9028;9093::::0;;;:10:::1;:15;::::0;;;;;;;9046:10:::1;9093:24:::0;;;;;;;;;;9144:58;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;9046:10;;9093:24:::1;::::0;;::::1;::::0;9028:15;;9144:58:::1;::::0;9151:9;;9144:58:::1;::::0;;::::1;;:6;:58::i;:::-;9128:74;;9230:3;9219:14;;:7;:14;;;;:57;;;;-1:-1:-1::0;9264:11:0::1;9237:39:::0;;::::1;;;9219:57;9215:320;;;9293:19;9315:96;9321:16;9339:6;9315:96;;;;;;;;;;;;;;;;;:5;:96::i;:::-;9426:15;::::0;;::::1;;::::0;;;:10:::1;:15;::::0;;;;;;;:24;;::::1;::::0;;;;;;;;;;;:39;;;::::1;;::::0;::::1;;::::0;;9487:36;9426:39;;-1:-1:-1;9426:24:0;;9487:36:::1;::::0;::::1;::::0;9426:39;;9487:36:::1;:::i;:::-;;;;;;;;9215:320;;9547:33;9563:3;9568;9573:6;9547:15;:33::i;:::-;-1:-1:-1::0;9598:4:0::1;::::0;8915:695;-1:-1:-1;;;;;;8915:695:0:o;8035:128::-;8129:26;;;8105:4;8129:26;;;:17;:26;;;;;;;;8035:128;;;;:::o;16871:239::-;16952:10;16944:19;;;;:7;:19;;;;;;;;16935:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;17001:13;17017:55;17024:9;17017:55;;;;;;;;;;;;;;;;;:6;:55::i;:::-;17001:71;;17083:19;17089:4;17095:6;17083:5;:19::i;:::-;16871:239;;;:::o;3872:137::-;3914:95;3872:137;:::o;2577:35::-;2610:2;2577:35;:::o;2321:100::-;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;2180:6:::1;::::0;;;::::1;;;2172:15;;;::::0;::::1;;2379:6:::2;:14:::0;;;::::2;::::0;;2404:9:::2;::::0;::::2;::::0;2388:5:::2;::::0;2404:9:::2;2321:100::o:0;3350:45::-;;;;;;;;;;;;;;;:::o;9622:116::-;2104:6;;;;;;;2103:7;2095:16;;;;;;9698:32:::1;9708:10;9720:9;9698;:32::i;:::-;9622:116:::0;:::o;2022:26::-;;;;;;;;;:::o;16325:538::-;16387:12;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;16412:13:::1;16428:61;16435:9;16428:61;;;;;;;;;;;;;;;;;:6;:61::i;:::-;16518:24;16536:5:::0;;::::1;;16518:24:::0;;:17:::1;:24;::::0;;;;;16412:77;;-1:-1:-1;16518:24:0::1;::::0;;::::1;16508:34:::0;;::::1;;;16500:43;;;::::0;::::1;;16587:24;16605:5:::0;;::::1;;16587:24:::0;;:17:::1;:24;::::0;;;;;;;;;16581:92;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;16587:24:::1;::::0;;::::1;::::0;16613:6;;16581:92;;::::1;::::0;;::::1;;:5;:92::i;:::-;16554:24;16572:5:::0;;::::1;;16554:24:::0;;:17:::1;:24;::::0;;;;;;;;:119;;;::::1;;::::0;;::::1;;::::0;;16704:11:::1;::::0;16698:84;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;16704:11;;;::::1;::::0;16717:6;;16698:84;;;::::1;::::0;;::::1;;:5;:84::i;:::-;16684:11;:98:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;16807:5:0;;16798:35:::1;::::0;::::1;16807:5:::0;;::::1;::::0;16798:35:::1;::::0;::::1;::::0;16826:6;;16798:35:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;16851:4:0::1;::::0;16325:538;-1:-1:-1;;16325:538:0:o;3561:49::-;;;;;;;;;;;;;;;:::o;6777:505::-;6867:26;;;6834:4;6867:26;;;:17;:26;;;;;;;;;6908:14;:23;;;;;;6867:26;;;;;6908:23;;6904:47;;6938:13;;;-1:-1:-1;6938:13:0;;6904:47;6978:1;6962:289;6986:23;;;;;;;:14;:23;;;;;;;;;;6981:28;;;;6962:289;;7055:24;;;7031:15;7055:24;;;:15;:24;;;;;;;;:27;;;;;;;;;;;;;7084:25;;;:16;:25;;;;;:28;;;;;;;;;7049:114;;;;;;;;;;;;7031:15;;7049:114;;7055:27;;;;;7084:28;;;;;7049:114;;;;;;:5;:114::i;:::-;7031:132;;7187:52;7193:6;7201:8;7187:52;;;;;;;;;;;;;;;;;:5;:52::i;:::-;7178:61;;6962:289;7011:3;;;;;:::i;:::-;;;;6962:289;;;-1:-1:-1;7261:13:0;;;6777:505;-1:-1:-1;;6777:505:0:o;8517:122::-;8611:20;;8577:14;8611:20;;;:14;:20;;;;;;;;;8517:122::o;12033:1218::-;12112:6;12153:12;12139:11;:26;12131:78;;;;;;;;;;;;:::i;:::-;12244:23;;;12222:19;12244:23;;;:14;:23;;;;;;;;12282:17;12278:58;;12323:1;12316:8;;;;;12278:58;12396:20;;;;;;;:11;:20;;;;;12448:11;;12417:16;12432:1;12417:12;:16;:::i;:::-;12396:38;;;;;;;;;;;;;;;-1:-1:-1;12396:38:0;:48;;:63;12392:147;;12483:20;;;;;;;:11;:20;;;;;;12504:16;12519:1;12504:12;:16;:::i;:::-;12483:38;;;;;;;;;;;;;-1:-1:-1;12483:38:0;:44;;;;;;;-1:-1:-1;12476:51:0;;-1:-1:-1;12476:51:0;12392:147;12600:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;12596:88:0;;;12671:1;12664:8;;;;;12596:88;12696:12;;12738:16;12753:1;12738:12;:16;:::i;:::-;12723:31;;12765:428;12780:5;12772:13;;:5;:13;;;12765:428;;;12802:13;12844:1;12827:13;12835:5;12827;:13;:::i;:::-;12826:19;;;;:::i;:::-;12818:27;;:5;:27;:::i;:::-;12910:20;;;12887;12910;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;12887:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;12910:28;;-1:-1:-1;12957:27:0;;12953:229;;;13012:8;;;;-1:-1:-1;13005:15:0;;-1:-1:-1;;;;13005:15:0;12953:229;13046:12;;:26;;;-1:-1:-1;13042:140:0;;;13101:6;13093:14;;13042:140;;;13156:10;13165:1;13156:6;:10;:::i;:::-;13148:18;;13042:140;12765:428;;;;;-1:-1:-1;13210:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;12033:1218:0;;;;:::o;19093:307::-;19169:8;;;;19155:10;:22;19147:31;;;;;;19189:13;19223:5;;;;;;19205:24;;;:17;:24;;;;;;;19223:5;19263:8;19205:24;;;;;19240:40;;19223:5;;19263:8;19205:24;19240:15;:40::i;:::-;19324:8;;;19317:5;;19296:37;;19324:8;;;;;19317:5;;;;19296:37;;;-1:-1:-1;19352:8:0;;;;19344:16;;;;;;19352:8;;;19344:16;;;;19371:21;;;19093:307::o;4016:39::-;;;;;;;;;;;;;:::o;2215:98::-;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;2104:6:::1;::::0;;;::::1;;;2103:7;2095:16;;;::::0;::::1;;2283:4:::2;2274:13:::0;;;::::2;::::0;::::2;::::0;;2298:7:::2;::::0;::::2;::::0;2274:13;;2298:7:::2;2215:98::o:0;1196:20::-;;;;;;:::o;2532:38::-;;;;;;;;;;;;;;;;;;;:::o;10573:1214::-;2104:6;;10623:15;;2104:6;;;;;2103:7;2095:16;;;;;;10675:10:::1;10689:1;10660:26:::0;;;:14:::1;:26;::::0;;;;;::::1;;10651:73;;;;;;;;;;;;:::i;:::-;10751:1;10735:879;10774:10;10759:26;::::0;;;:14:::1;:26;::::0;;;;;::::1;::::0;;::::1;10754:31:::0;;::::1;;10735:879;;10862:10;10845:28;::::0;;;:16:::1;:28;::::0;;;;;;;:31:::1;::::0;::::1;::::0;;;;;;;;;;10811:27;;;:15:::1;:27:::0;;;;;:30;;;;;;;;;10845:31:::1;10811:30:::0;;::::1;10845:31:::0;::::1;10811:65;10807:79;;;10878:8;;10807:79;10931:10;10905:37;::::0;;;:25:::1;:37;::::0;;;;;;;:40:::1;::::0;::::1;::::0;;;;;;;;10948:15:::1;-1:-1:-1::0;10901:69:0::1;;;10965:5;;10901:69;11105:19;::::0;11054:10:::1;10985:15;11028:37:::0;;;:25:::1;:37;::::0;;;;;;;:40:::1;::::0;::::1;::::0;;;;;;;;10985:15;;11105:19;;::::1;;;::::0;11003:99:::1;::::0;11010:58:::1;::::0;:15:::1;:58;:::i;:::-;11087:10;11071:27;::::0;;;:15:::1;:27;::::0;;;;;;;:30:::1;::::0;::::1;::::0;;;;;;;;::::1;;11003:5;:99::i;:::-;:121;;;;:::i;:::-;11170:10;11154:27;::::0;;;:15:::1;:27;::::0;;;;;;;:30:::1;::::0;::::1;::::0;;;;;;;;10985:139;;-1:-1:-1;11154:30:0::1;::::0;;::::1;11143:41:::0;;::::1;;11139:123;;;-1:-1:-1::0;11232:10:0::1;11216:27;::::0;;;:15:::1;:27;::::0;;;;;;;:30:::1;::::0;::::1;::::0;;;;;;;;::::1;;11139:123;11375:10;11277:28;11358::::0;;;:16:::1;:28;::::0;;;;;;;:31:::1;::::0;::::1;::::0;;;;;;;;;11342:106;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;11308:8;;11342:106:::1;::::0;11308:8;;11358:31:::1;;::::0;11342:106;::::1;::::0;;::::1;;:5;:106::i;:::-;11331:117;;11474:58;11480:8;11490;11474:58;;;;;;;;;;;;;;;;::::0;:5:::1;:58::i;:::-;11564:10;11547:28;::::0;;;:16:::1;:28;::::0;;;;;;;:31:::1;::::0;::::1;::::0;;;;;;;:55;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;;10735:879:0::1;10787:3:::0;::::1;::::0;::::1;:::i;:::-;;;;10735:879;;;-1:-1:-1::0;11680:10:0::1;11662:29;::::0;;;:17:::1;:29;::::0;;;;;;;;;11656:79;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;11662:29:::1;::::0;;::::1;::::0;11693:8;;11656:5:::1;:79::i;:::-;11642:10;11624:29;::::0;;;:17:::1;:29;::::0;;;;;;:111;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;11751:28;;::::1;::::0;::::1;::::0;11770:8;;11751:28:::1;:::i;:::-;;;;;;;;10573:1214:::0;:::o;18966:119::-;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;19051:15:::1;::::0;;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:26;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;18966:119::o;8651:252::-;2104:6;;8730:4;;2104:6;;;;;2103:7;2095:16;;;;;;8747:13:::1;8763:59;8770:9;8763:59;;;;;;;;;;;;;;;;;:6;:59::i;:::-;8747:75;;8833:40;8849:10;8861:3;8866:6;8833:15;:40::i;:::-;-1:-1:-1::0;8891:4:0::1;::::0;8651:252;-1:-1:-1;;;8651:252:0:o;17127:789::-;17215:4;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;17253:6:::1;:13;17240:2;:9;:26;17232:35;;;::::0;::::1;;17298:3;17286:2;:9;:15;17278:24;;;::::0;::::1;;17313:8;17337:6:::0;17332:80:::1;17349:6;:13;17345:1;:17;17332:80;;;17391:6;17398:1;17391:9;;;;;;;;;;;;;;;;;;;;;;17384:16;;;;;:::i;:::-;::::0;-1:-1:-1;17364:3:0;::::1;::::0;::::1;:::i;:::-;;;;17332:80;;;;17422:11;17436:53;17443:3;17436:53;;;;;;;;;;;;;;;;;:6;:53::i;:::-;17533:24;17551:5:::0;;::::1;;17533:24:::0;;:17:::1;:24;::::0;;;;;;;;;17527:95;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;17422:67;;-1:-1:-1;17527:95:0::1;::::0;17533:24:::1;::::0;;::::1;::::0;17422:67;;17527:95;;;::::1;::::0;;::::1;;:5;:95::i;:::-;17500:24;17518:5:::0;;::::1;;17500:24:::0;;:17:::1;:24;::::0;;;;:122;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;17633:248:::1;17650:2;:9;17646:1;:13;17633:248;;;17708:108;17714:17;:24;17732:2;17735:1;17732:5;;;;;;;;;;;;;;;;;;;;;;17714:24;;;;;;;;;;;;;;;;;;;;;;;;;17747:6;17754:1;17747:9;;;;;;;;;;;;;;;;;;;;;;17708:108;;;;;;;;;;;;;;;;;:5;:108::i;:::-;17681:17;:24;17699:2;17702:1;17699:5;;;;;;;;;;;;;;;;;;;;;;17681:24;;;;;;;;;;;;;;;;:135;;;;;;;;;;;;;;;;;;17852:2;17855:1;17852:5;;;;;;;;;;;;;;;;;;;;;;17836:33;;17845:5;::::0;::::1;;;;;;;;17836:33;;;17859:6;17866:1;17859:9;;;;;;;;;;;;;;;;;;;;;;17836:33;;;;;;:::i;:::-;;;;;;;;17661:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17633:248;;;-1:-1:-1::0;;17898:9:0;;;17127:789;-1:-1:-1;;;17127:789:0:o;4628:415::-;4678:4;4735:5;;;;4717:24;;:17;:24;;;;;;;;4678:4;4752:182;4769:12;:19;4765:23;;4752:182;;;4825:97;4831:12;4845:17;:34;4863:12;4876:1;4863:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4845:34;;;;;;;;;;;;;;;;4825:97;;;;;;;;;;;;4845:34;;;;;4825:97;;;;;:5;:97::i;:::-;4810:112;-1:-1:-1;4790:3:0;;;;:::i;:::-;;;;4752:182;;;-1:-1:-1;4957:11:0;;4951:84;;;;;;;;;;;;;;;4957:11;;;4970:12;;4951:84;;;;;:5;:84::i;:::-;4944:91;;;;;4628:415;:::o;19743:221::-;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;19862:12:::1;19875:19:::0;;:23:::1;::::0;19897:1:::1;::::0;19875:23:::1;:::i;:::-;19862:37;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;19829:12:::1;:30:::0;;19862:37:::1;::::0;;::::1;::::0;19842:16;;19829:30;::::1;;;;;;;;;;;;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;19910:12;:18;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;;19939:15:::1;:17:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;19743:221:::0;:::o;11799:222::-;11905:23;;;11864:6;11905:23;;;:14;:23;;;;;;;;11946:16;:67;;12012:1;11946:67;;;11965:20;;;;;;;:11;:20;;;;;;11986:16;12001:1;11986:12;:16;:::i;:::-;11965:38;;;;;;;;;;;;;-1:-1:-1;11965:38:0;:44;;;;;;11946:67;11939:74;11799:222;-1:-1:-1;;;11799:222:0:o;3278:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3278:29:0;:::o;9750:815::-;2104:6;;;;;;;2103:7;2095:16;;;;;;9960:4:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;::::1;::::0;9880:23:::1;3661:80;9944:22:::0;9968:12:::1;:10;:12::i;:::-;9990:4;9916:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9906:91;;;;;;9880:117;;10008:18;3794:71;10071:9;10082:5;10089:6;10039:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10029:68;;;;;;10008:89;;10108:14;10164:15;10181:10;10135:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10125:68;;;;;;10108:85;;10204:17;10224:26;10234:6;10242:1;10245;10248;10224:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10224:26:0::1;::::0;;;;;-1:-1:-1;;10269:23:0::1;::::0;::::1;10261:74;;;;;;;;;;;;:::i;:::-;10363:17;::::0;::::1;;::::0;;;:6:::1;:17;::::0;;;;:19;;;::::1;::::0;::::1;:::i;:::-;;;;;10354:5;:28;10346:75;;;;;;;;;;;;:::i;:::-;10459:6;10440:15;:25;;10432:76;;;;;;;;;;;;:::i;:::-;10526:31;10536:9;10547;10526;:31::i;:::-;10519:38;;;;2122:1;9750:815:::0;;;;;;:::o;17924:846::-;18014:4;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;18052:6:::1;:13;18039:2;:9;:26;18031:35;;;::::0;::::1;;18097:3;18085:2;:9;:15;18077:24;;;::::0;::::1;;18112:8;18136:6:::0;18131:80:::1;18148:6;:13;18144:1;:17;18131:80;;;18190:6;18197:1;18190:9;;;;;;;;;;;;;;;;;;;;;;18183:16;;;;;:::i;:::-;::::0;-1:-1:-1;18163:3:0;::::1;::::0;::::1;:::i;:::-;;;;18131:80;;;;18221:11;18235:54;18242:3;18235:54;;;;;;;;;;;;;;;;;:6;:54::i;:::-;18333:24;18351:5:::0;;::::1;;18333:24:::0;;:17:::1;:24;::::0;;;;;;;;;18327:89;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18221:68;;-1:-1:-1;18327:89:0::1;::::0;18333:24:::1;::::0;;::::1;::::0;18221:68;;18327:89;;;::::1;::::0;;::::1;;:5;:89::i;:::-;18300:24;18318:5:::0;;::::1;;18300:24:::0;;:17:::1;:24;::::0;;;;:116;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;18427:308:::1;18444:2;:9;18440:1;:13;18427:308;;;18475:12;18492:14;:21;18507:2;18510:1;18507:5;;;;;;;;;;;;;;;;;;;;;;18492:21;;;;;;;;;;;;;;;;18490:23;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;18475:38;;18567:6;18574:1;18567:9;;;;;;;;;;;;;;;;;;;;;;18528:15;:22;18544:2;18547:1;18544:5;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;;;;;18528:22:::1;;::::0;;;;::::1;::::0;;;;;;;;-1:-1:-1;18528:22:0;;;:29:::1;::::0;::::1;::::0;;;;;;;:49;;;::::1;;::::0;;::::1;;::::0;;18652:18:::1;::::0;18634:36:::1;::::0;18652:18:::1;18634:15;:36;:::i;:::-;18592:25;:32;18618:2;18621:1;18618:5;;;;;;;;;;;;;;;;;;;;;;18592:32;;;;;;;;;;;;;;;:39;18625:5;18592:39;;;;;;;;;;;;;;;:78;;;;18706:2;18709:1;18706:5;;;;;;;;;;;;;;;;;;;;;;18690:33;;18699:5;::::0;::::1;;;;;;;;18690:33;;;18713:6;18720:1;18713:9;;;;;;;;;;;;;;;;;;;;;;18690:33;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;18455:3:0;::::1;::::0;::::1;:::i;:::-;;;;18427:308;;1223:23:::0;;;;;;:::o;5663:1099::-;2104:6;;;;;;;2103:7;2095:16;;;;;;5807:13:::1;5853:12;5835:9;:31;5831:191;;;-1:-1:-1::0;5899:11:0::1;5831:191;;;5953:57;5960:9;5953:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;5944:66;;5831:191;6114:4;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;::::1;::::0;6034:23:::1;3661:80;6098:22:::0;6122:12:::1;:10;:12::i;:::-;6144:4;6070:80;;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;6060:91;;6070:80:::1;6060:91:::0;;::::1;::::0;6248:13:::1;::::0;::::1;6162:18;6248:13:::0;;;:6:::1;:13:::0;;;;;;:15;;6060:91;;-1:-1:-1;3914:95:0::1;::::0;6221:5;;6228:7;;6237:9;;6162:18;6248:15:::1;::::0;::::1;:::i;:::-;;;;;6265:8;6193:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6183:92;;;;;;6162:113;;6286:14;6342:15;6359:10;6313:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6303:68;;;;;;6286:85;;6382:17;6402:26;6412:6;6420:1;6423;6426;6402:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6402:26:0::1;::::0;;;;;-1:-1:-1;;6447:23:0::1;::::0;::::1;6439:67;;;;;;;;;;;;:::i;:::-;6538:5;6525:18;;:9;:18;;;6517:57;;;;;;;;;;;;:::i;:::-;6612:8;6593:15;:27;;6585:71;;;;;;;;;;;;:::i;:::-;6698:6;6669:10;:17;6680:5;6669:17;;;;;;;;;;;;;;;:26;6687:7;6669:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;6738:7;6722:32;;6731:5;6722:32;;;6747:6;6722:32;;;;;;:::i;:::-;;;;;;;;2122:1;;;;;5663:1099:::0;;;;;;;:::o;8171:338::-;8341:21;;;;8243:18;8341:21;;;:15;:21;;;;;;;;:28;;;;;;;;;;;;;;8397:22;;;:16;:22;;;;;:29;;;;;;;;;8463:31;;;:25;:31;;;;;:38;;;;;;;;;;8341:28;;;;;8397:29;;;;;8463:38;8171:338::o;19408:327::-;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;19497:6:::1;19492:164;19509:12;:19:::0;19505:23;::::1;19492:164;;;19578:14;19559:33;;:12;19572:1;19559:15;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;:33;;19550:94;;;;;;;;;;;;:::i;:::-;19530:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19492:164;;;-1:-1:-1::0;19666:12:0::1;:33:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;19666:33:0;;;;::::1;::::0;;;::::1;;::::0;::::1;;::::0;;19710:15:::1;:17:::0;;;::::1;::::0;::::1;:::i;18782:176::-:0;18874:12;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;18936:5:::1;::::0;18906:44:::1;::::0;;;;:29:::1;::::0;;::::1;::::0;::::1;::::0;:44:::1;::::0;18936:5;;::::1;::::0;18943:6;;18906:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5055:136::-:0;5155:19;;;;5131:4;5155:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;5055:136::o;3748:117::-;3794:71;3748:117;:::o;3484:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7290:737::-;7392:20;;;7358:17;7392:20;;;:14;:20;;;;;;;;7388:39;;-1:-1:-1;7426:1:0;7419:8;;7388:39;7454:1;7438:582;7462:20;;;;;;;:14;:20;;;;;;;;;;7457:25;;;;7438:582;;7536:22;;;;;;;:16;:22;;;;;;;;:25;;;;;;;;;;;;;7508:21;;;:15;:21;;;;;:24;;;;;;;;;7536:25;7508:24;;;7536:25;;7508:53;7504:67;;;7563:8;;7504:67;7590:31;;;;;;;:25;:31;;;;;;;;:34;;;;;;;;;;;7627:15;-1:-1:-1;7586:63:0;;;7644:5;;7586:63;7772:19;;7705:31;;;7664:13;7705:31;;;:25;:31;;;;;;;;:34;;;;;;;;;;;7664:13;;7772:19;;;;;;7680:89;;7687:52;;:15;:52;:::i;:::-;7743:21;;;;;;;:15;:21;;;;;;;;:24;;;;;;;;;;;;;7680:5;:89::i;:::-;:111;;;;:::i;:::-;7821:21;;;;;;;:15;:21;;;;;;;;:24;;;;;;;;;;;7664:127;;;;;-1:-1:-1;7821:24:0;7810:35;;7806:111;;;-1:-1:-1;7877:21:0;;;;;;;:15;:21;;;;;;;;:24;;;;;;;;;;;;;7806:111;7944:22;;;;;;;:16;:22;;;;;;;;:25;;;;;;;;;;;7932:37;;7944:25;;7932:37;;:::i;:::-;;-1:-1:-1;7984:24:0;7932:37;7984:24;;:::i;:::-;;;7438:582;;7484:3;;;;:::i;:::-;;;;7438:582;;;;7290:737;;;:::o;1568:155::-;1498:5;;;;1484:10;:19;1476:64;;;;;;;;;;;;:::i;:::-;1671:8:::1;::::0;::::1;1654:25:::0;;::::1;1671:8:::0;::::1;1654:25;;1646:34;;;::::0;::::1;;1691:8;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1568:155::o;20151:161::-;20226:6;20264:12;20257:5;20253:9;;20245:32;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20302:1:0;;20151:161;-1:-1:-1;;20151:161:0:o;20516:165::-;20602:6;20634:1;20629:6;;:1;:6;;;;20637:12;20621:29;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20668:5:0;20672:1;20668;:5;:::i;:::-;20661:12;20516:165;-1:-1:-1;;;;20516:165:0:o;13655:650::-;13749:17;;;13741:90;;;;;;;;;;;;:::i;:::-;13850:17;;;13842:88;;;;;;;;;;;;:::i;:::-;13974:22;;;;;;;:17;:22;;;;;;;;;;13968:95;;;;;;;;;;;;;;13974:22;;;;;13998:6;;13968:95;;;;;;;:5;:95::i;:::-;13943:22;;;;;;;;:17;:22;;;;;;;;:120;;;;;;;;;;;14105:22;;;;;;;;;;14099:89;;;;;;;;;;;;;;14105:22;;;;;14129:6;;14099:89;;;;;;;;:5;:89::i;:::-;14074:22;;;;;;;;:17;:22;;;;;;;:114;;;;;;;;;;;;;;;;14204:26;;;;;;;;;;14223:6;;14204:26;:::i;:::-;;;;;;;;14258:14;;;;;;;;:9;:14;;;;;;;14274;;;;;;;;14243:54;;14258:14;;;;14274;14290:6;14243:14;:54::i;15905:404::-;15985:20;;;15968:12;15985:20;;;:14;:20;;;;;15983:22;;15968:12;;15983:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;16016:21;;;-1:-1:-1;16016:21:0;;;:15;:21;;;;;;;;:28;;;;;;;:37;;;;;;;;;;;;;;;;;16123:18;;15983:22;;-1:-1:-1;16105:36:0;;16123:18;16105:15;:36;:::i;:::-;16064:31;;;;;;;;:25;:31;;;;;;;;:38;;;;;;;;;;:77;;;;16203:5;;;;;16185:24;;:17;:24;;;;;;16179:77;;;;;;;;;;;;;;16185:24;;;;;16211:6;;16179:77;;;;;;;:5;:77::i;:::-;16152:24;16170:5;;;;;;16152:24;;:17;:24;;;;;;:104;;;;;;;;;;;;;;;;16281:5;;16272:29;;;;;;16281:5;;;;16272:29;;;;16294:6;;16272:29;:::i;:::-;;;;;;;;15905:404;;;:::o;13263:384::-;13366:20;;;;13340:23;13366:20;;;:9;:20;;;;;;;;;;13423:17;:28;;;;;;13462:20;;;;:32;;;;;;;;;;;13512:54;;13366:20;;;;;13423:28;;;;;13462:32;;13366:20;;;13512:54;;13340:23;13512:54;13579:60;13594:15;13611:9;13622:16;13579:14;:60::i;:::-;13263:384;;;;:::o;20320:188::-;20406:6;;20436:5;20440:1;20436;:5;:::i;:::-;20425:16;;20465:1;20460:6;;:1;:6;;;;20468:12;20452:29;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20499:1:0;20320:188;-1:-1:-1;;;;20320:188:0:o;21051:319::-;21110:6;21129:9;21141:46;21148:1;21141:46;;;;;;;;;;;;;;;;;:6;:46::i;:::-;21129:58;-1:-1:-1;21202:7:0;;;21198:48;;21233:1;21226:8;;;;;21198:48;21256:8;21267:6;21272:1;21267:2;:6;:::i;:::-;21256:17;-1:-1:-1;21292:11:0;;;:6;21296:2;21256:17;21292:6;:::i;:::-;:11;;;21284:59;;;;;;;;;;;;:::i;20689:90::-;20758:13;20689:90;:::o;14317:939::-;14422:6;14412:16;;:6;:16;;;;:30;;;;;14441:1;14432:6;:10;;;14412:30;14408:841;;;14463:20;;;;14459:382;;14523:22;;;14504:16;14523:22;;;:14;:22;;;;;;;;;14583:13;:60;;14642:1;14583:60;;;14599:19;;;;;;;:11;:19;;;;;;14619:13;14631:1;14619:9;:13;:::i;:::-;14599:34;;;;;;;;;;;;;-1:-1:-1;14599:34:0;:40;;;;;;14583:60;14564:79;;14662:16;14681:68;14687:9;14698:6;14681:68;;;;;;;;;;;;;;;;;:5;:68::i;:::-;14662:87;;14768:57;14785:6;14793:9;14804;14815;14768:16;:57::i;:::-;14459:382;;;;14861:20;;;;14857:381;;14921:22;;;14902:16;14921:22;;;:14;:22;;;;;;;;;14981:13;:60;;15040:1;14981:60;;;14997:19;;;;;;;:11;:19;;;;;;15017:13;15029:1;15017:9;:13;:::i;:::-;14997:34;;;;;;;;;;;;;-1:-1:-1;14997:34:0;:40;;;;;;14981:60;14962:79;;15060:16;15079:67;15085:9;15096:6;15079:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;15060:86;;15165:57;15182:6;15190:9;15201;15212;15268:629;15386:18;15407:76;15414:12;15407:76;;;;;;;;;;;;;;;;;:6;:76::i;:::-;15386:97;;15513:1;15498:12;:16;;;:85;;;;-1:-1:-1;15518:22:0;;;;;;;:11;:22;;;;;:65;;;;15541:16;15556:1;15541:12;:16;:::i;:::-;15518:40;;;;;;;;;;;;;;;-1:-1:-1;15518:40:0;:50;;:65;15498:85;15494:329;;;15598:22;;;;;;;:11;:22;;;;;15647:8;;15621:16;15636:1;15621:12;:16;:::i;:::-;15598:40;;;;;;;;;;;;;-1:-1:-1;15598:40:0;:57;;;;;;;;;;;;;;;;;;;15494:329;;;15723:33;;;;;;;;;;;;;;;;;;;;;;;;;15684:22;;;-1:-1:-1;15684:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15797:16;15684:36;-1:-1:-1;15797:16:0;:::i;:::-;15769:25;;;;;;;:14;:25;;;;;:44;;;;;;;;;;;;;;;15494:329;15859:9;15838:51;;;15870:8;15880;15838:51;;;;;;;:::i;:::-;;;;;;;;15268:629;;;;;:::o;19982:161::-;20057:6;20095:12;20088:5;20084:9;;20076:32;;;;;;;;;;;;;:::i;14:198:1:-;84:20;;144:42;133:54;;123:65;;113:2;;202:1;199;192:12;217:705;;330:3;323:4;315:6;311:17;307:27;297:2;;352:5;345;338:20;297:2;392:6;379:20;418:4;442:65;457:49;503:2;457:49;:::i;:::-;442:65;:::i;:::-;541:15;;;572:12;;;;604:15;;;650:11;;;638:24;;634:33;;631:42;-1:-1:-1;628:2:1;;;690:5;683;676:20;628:2;716:5;730:163;744:2;741:1;738:9;730:163;;;801:17;;789:30;;839:12;;;;871;;;;762:1;755:9;730:163;;;-1:-1:-1;911:5:1;;287:635;-1:-1:-1;;;;;;;287:635:1:o;927:158::-;995:20;;1055:4;1044:16;;1034:27;;1024:2;;1075:1;1072;1065:12;1090:198;;1202:2;1190:9;1181:7;1177:23;1173:32;1170:2;;;1223:6;1215;1208:22;1170:2;1251:31;1272:9;1251:31;:::i;1293:274::-;;;1422:2;1410:9;1401:7;1397:23;1393:32;1390:2;;;1443:6;1435;1428:22;1390:2;1471:31;1492:9;1471:31;:::i;:::-;1461:41;;1521:40;1557:2;1546:9;1542:18;1521:40;:::i;:::-;1511:50;;1380:187;;;;;:::o;1572:342::-;;;;1718:2;1706:9;1697:7;1693:23;1689:32;1686:2;;;1739:6;1731;1724:22;1686:2;1767:31;1788:9;1767:31;:::i;:::-;1757:41;;1817:40;1853:2;1842:9;1838:18;1817:40;:::i;:::-;1807:50;;1904:2;1893:9;1889:18;1876:32;1866:42;;1676:238;;;;;:::o;1919:622::-;;;;;;;;2131:3;2119:9;2110:7;2106:23;2102:33;2099:2;;;2153:6;2145;2138:22;2099:2;2181:31;2202:9;2181:31;:::i;:::-;2171:41;;2231:40;2267:2;2256:9;2252:18;2231:40;:::i;:::-;2221:50;;2318:2;2307:9;2303:18;2290:32;2280:42;;2369:2;2358:9;2354:18;2341:32;2331:42;;2392:39;2426:3;2415:9;2411:19;2392:39;:::i;:::-;2382:49;;2478:3;2467:9;2463:19;2450:33;2440:43;;2530:3;2519:9;2515:19;2502:33;2492:43;;2089:452;;;;;;;;;;:::o;2546:329::-;;;2672:2;2660:9;2651:7;2647:23;2643:32;2640:2;;;2693:6;2685;2678:22;2640:2;2721:31;2742:9;2721:31;:::i;:::-;2711:41;;2802:2;2791:9;2787:18;2774:32;2815:30;2839:5;2815:30;:::i;:::-;2864:5;2854:15;;;2630:245;;;;;:::o;2880:266::-;;;3009:2;2997:9;2988:7;2984:23;2980:32;2977:2;;;3030:6;3022;3015:22;2977:2;3058:31;3079:9;3058:31;:::i;:::-;3048:41;3136:2;3121:18;;;;3108:32;;-1:-1:-1;;;2967:179:1:o;3151:545::-;;;;;;;3346:3;3334:9;3325:7;3321:23;3317:33;3314:2;;;3368:6;3360;3353:22;3314:2;3396:31;3417:9;3396:31;:::i;:::-;3386:41;;3474:2;3463:9;3459:18;3446:32;3436:42;;3525:2;3514:9;3510:18;3497:32;3487:42;;3548:38;3582:2;3571:9;3567:18;3548:38;:::i;:::-;3538:48;;3633:3;3622:9;3618:19;3605:33;3595:43;;3685:3;3674:9;3670:19;3657:33;3647:43;;3304:392;;;;;;;;:::o;3701:372::-;;;3829:2;3817:9;3808:7;3804:23;3800:32;3797:2;;;3850:6;3842;3835:22;3797:2;3878:31;3899:9;3878:31;:::i;:::-;3868:41;;3959:2;3948:9;3944:18;3931:32;4003:10;3996:5;3992:22;3985:5;3982:33;3972:2;;4034:6;4026;4019:22;4078:1226;;;4257:2;4245:9;4236:7;4232:23;4228:32;4225:2;;;4278:6;4270;4263:22;4225:2;4323:9;4310:23;4352:18;4393:2;4385:6;4382:14;4379:2;;;4414:6;4406;4399:22;4379:2;4457:6;4446:9;4442:22;4432:32;;4502:7;4495:4;4491:2;4487:13;4483:27;4473:2;;4529:6;4521;4514:22;4473:2;4570;4557:16;4592:4;4616:65;4631:49;4677:2;4631:49;:::i;4616:65::-;4715:15;;;4746:12;;;;4778:11;;;4816;;;4808:20;;4804:29;;4801:42;-1:-1:-1;4798:2:1;;;4861:6;4853;4846:22;4798:2;4888:6;4879:15;;4903:171;4917:2;4914:1;4911:9;4903:171;;;4974:25;4995:3;4974:25;:::i;:::-;4962:38;;4935:1;4928:9;;;;;5020:12;;;;5052;;4903:171;;;-1:-1:-1;5093:5:1;-1:-1:-1;;5136:18:1;;5123:32;;-1:-1:-1;;5167:16:1;;;5164:2;;;5201:6;5193;5186:22;5164:2;;5229:69;5290:7;5279:8;5268:9;5264:24;5229:69;:::i;:::-;5219:79;;;4215:1089;;;;;:::o;5309:257::-;;5429:2;5417:9;5408:7;5404:23;5400:32;5397:2;;;5450:6;5442;5435:22;5397:2;5487:9;5481:16;5506:30;5530:5;5506:30;:::i;5571:190::-;;5683:2;5671:9;5662:7;5658:23;5654:32;5651:2;;;5704:6;5696;5689:22;5651:2;-1:-1:-1;5732:23:1;;5641:120;-1:-1:-1;5641:120:1:o;5766:444::-;6036:66;6024:79;;6128:1;6119:11;;6112:27;;;;6164:2;6155:12;;6148:28;6201:2;6192:12;;6014:196::o;6215:226::-;6391:42;6379:55;;;;6361:74;;6349:2;6334:18;;6316:125::o;6446:297::-;6650:42;6638:55;;;;6620:74;;6725:2;6710:18;;6703:34;6608:2;6593:18;;6575:168::o;6748:329::-;6951:42;6939:55;;;;6921:74;;7043:26;7031:39;7026:2;7011:18;;7004:67;6909:2;6894:18;;6876:201::o;7082:187::-;7247:14;;7240:22;7222:41;;7210:2;7195:18;;7177:92::o;7274:177::-;7420:25;;;7408:2;7393:18;;7375:76::o;7456:614::-;7743:25;;;7787:42;7865:15;;;7860:2;7845:18;;7838:43;7917:15;;;;7912:2;7897:18;;7890:43;7964:2;7949:18;;7942:34;8007:3;7992:19;;7985:35;;;;8051:3;8036:19;;8029:35;7730:3;7715:19;;7697:373::o;8075:440::-;8306:25;;;8379:42;8367:55;;;;8362:2;8347:18;;8340:83;8454:2;8439:18;;8432:34;8497:2;8482:18;;8475:34;8293:3;8278:19;;8260:255::o;8520:440::-;8751:25;;;8807:2;8792:18;;8785:34;;;;8850:2;8835:18;;8828:34;8910:42;8898:55;8893:2;8878:18;;8871:83;8738:3;8723:19;;8705:255::o;8965:398::-;9192:25;;;9265:4;9253:17;;;;9248:2;9233:18;;9226:45;9302:2;9287:18;;9280:34;9345:2;9330:18;;9323:34;9179:3;9164:19;;9146:217::o;9368:662::-;;9509:2;9538;9527:9;9520:21;9570:6;9564:13;9613:6;9608:2;9597:9;9593:18;9586:34;9638:4;9651:140;9665:6;9662:1;9659:13;9651:140;;;9760:14;;;9756:23;;9750:30;9726:17;;;9745:2;9722:26;9715:66;9680:10;;9651:140;;;9809:6;9806:1;9803:13;9800:2;;;9879:4;9874:2;9865:6;9854:9;9850:22;9846:31;9839:45;9800:2;-1:-1:-1;9946:2:1;9934:15;9951:66;9930:88;9915:104;;;;10021:2;9911:113;;9489:541;-1:-1:-1;;;9489:541:1:o;10035:403::-;10237:2;10219:21;;;10276:2;10256:18;;;10249:30;10315:34;10310:2;10295:18;;10288:62;10386:9;10381:2;10366:18;;10359:37;10428:3;10413:19;;10209:229::o;10443:356::-;10645:2;10627:21;;;10664:18;;;10657:30;10723:34;10718:2;10703:18;;10696:62;10790:2;10775:18;;10617:182::o;10804:350::-;11006:2;10988:21;;;11045:2;11025:18;;;11018:30;11084:28;11079:2;11064:18;;11057:56;11145:2;11130:18;;10978:176::o;11159:346::-;11361:2;11343:21;;;11400:2;11380:18;;;11373:30;11439:24;11434:2;11419:18;;11412:52;11496:2;11481:18;;11333:172::o;11510:411::-;11712:2;11694:21;;;11751:2;11731:18;;;11724:30;11790:34;11785:2;11770:18;;11763:62;11861:17;11856:2;11841:18;;11834:45;11911:3;11896:19;;11684:237::o;11926:422::-;12128:2;12110:21;;;12167:2;12147:18;;;12140:30;12206:34;12201:2;12186:18;;12179:62;12277:28;12272:2;12257:18;;12250:56;12338:3;12323:19;;12100:248::o;12353:424::-;12555:2;12537:21;;;12594:2;12574:18;;;12567:30;12633:34;12628:2;12613:18;;12606:62;12704:30;12699:2;12684:18;;12677:58;12767:3;12752:19;;12527:250::o;12782:402::-;12984:2;12966:21;;;13023:2;13003:18;;;12996:30;13062:34;13057:2;13042:18;;13035:62;13133:8;13128:2;13113:18;;13106:36;13174:3;13159:19;;12956:228::o;13189:355::-;13391:2;13373:21;;;13430:2;13410:18;;;13403:30;13469:33;13464:2;13449:18;;13442:61;13535:2;13520:18;;13363:181::o;13549:353::-;13751:2;13733:21;;;13790:2;13770:18;;;13763:30;13829:31;13824:2;13809:18;;13802:59;13893:2;13878:18;;13723:179::o;13907:399::-;14109:2;14091:21;;;14148:2;14128:18;;;14121:30;14187:34;14182:2;14167:18;;14160:62;14258:5;14253:2;14238:18;;14231:33;14296:3;14281:19;;14081:225::o;14311:398::-;14513:2;14495:21;;;14552:2;14532:18;;;14525:30;14591:34;14586:2;14571:18;;14564:62;14662:4;14657:2;14642:18;;14635:32;14699:3;14684:19;;14485:224::o;14714:402::-;14916:2;14898:21;;;14955:2;14935:18;;;14928:30;14994:34;14989:2;14974:18;;14967:62;15065:8;15060:2;15045:18;;15038:36;15106:3;15091:19;;14888:228::o;15121:355::-;15323:2;15305:21;;;15362:2;15342:18;;;15335:30;15401:33;15396:2;15381:18;;15374:61;15467:2;15452:18;;15295:181::o;15663:319::-;15865:25;;;15921:2;15906:18;;15899:34;;;;15964:2;15949:18;;15942:34;15853:2;15838:18;;15820:162::o;15987:192::-;16161:10;16149:23;;;;16131:42;;16119:2;16104:18;;16086:93::o;16184:294::-;16384:10;16372:23;;;;16354:42;;16444:26;16432:39;16427:2;16412:18;;16405:67;16342:2;16327:18;;16309:169::o;16483:184::-;16655:4;16643:17;;;;16625:36;;16613:2;16598:18;;16580:87::o;16672:209::-;16847:26;16835:39;;;;16817:58;;16805:2;16790:18;;16772:109::o;17099:309::-;17281:26;17334:15;;;17316:34;;17386:15;;17381:2;17366:18;;17359:43;17259:2;17244:18;;17226:182::o;17413:251::-;17483:2;17477:9;17513:17;;;17560:18;17545:34;;17581:22;;;17542:62;17539:2;;;17607:18;;:::i;:::-;17643:2;17636:22;17457:207;;-1:-1:-1;17457:207:1:o;17669:192::-;;17768:18;17760:6;17757:30;17754:2;;;17790:18;;:::i;:::-;-1:-1:-1;17850:4:1;17831:17;;;17827:28;;17744:117::o;17866:128::-;;17937:1;17933:6;17930:1;17927:13;17924:2;;;17943:18;;:::i;:::-;-1:-1:-1;17979:9:1;;17914:80::o;17999:228::-;;18066:10;18103:2;18100:1;18096:10;18133:2;18130:1;18126:10;18164:3;18160:2;18156:12;18151:3;18148:21;18145:2;;;18172:18;;:::i;:::-;18208:13;;18046:181;-1:-1:-1;;;;18046:181:1:o;18232:244::-;;18299:26;18352:2;18349:1;18345:10;18382:2;18379:1;18375:10;18413:3;18409:2;18405:12;18400:3;18397:21;18394:2;;;18421:18;;:::i;18481:191::-;;18546:10;18583:2;18580:1;18576:10;18605:3;18595:2;;18612:18;;:::i;:::-;18650:10;;18646:20;;;;;18526:146;-1:-1:-1;;18526:146:1:o;18677:207::-;;18742:26;18795:2;18792:1;18788:10;18817:3;18807:2;;18824:18;;:::i;18889:278::-;;18960:26;19013:2;19010:1;19006:10;19043:2;19040:1;19036:10;19099:3;19095:2;19091:12;19086:3;19083:21;19076:3;19069:11;19062:19;19058:47;19055:2;;;19108:18;;:::i;:::-;19148:13;;18940:227;-1:-1:-1;;;;18940:227:1:o;19172:125::-;;19240:1;19237;19234:8;19231:2;;;19245:18;;:::i;:::-;-1:-1:-1;19282:9:1;;19221:76::o;19302:221::-;;19370:10;19430;;;;19400;;19452:12;;;19449:2;;;19467:18;;:::i;:::-;19504:13;;19350:173;-1:-1:-1;;;19350:173:1:o;19528:237::-;;19596:26;19672:10;;;;19642;;19694:12;;;19691:2;;;19709:18;;:::i;19770:196::-;;19837:5;19827:2;;19846:18;;:::i;:::-;-1:-1:-1;19893:66:1;19882:78;;19817:149::o;19971:195::-;;20041:66;20034:5;20031:77;20028:2;;;20111:18;;:::i;:::-;-1:-1:-1;20158:1:1;20147:13;;20018:148::o;20171:201::-;;20237:10;20282:2;20275:5;20271:14;20309:2;20300:7;20297:15;20294:2;;;20315:18;;:::i;:::-;20364:1;20351:15;;20217:155;-1:-1:-1;;;20217:155:1:o;20377:184::-;20429:77;20426:1;20419:88;20526:4;20523:1;20516:15;20550:4;20547:1;20540:15;20566:184;20618:77;20615:1;20608:88;20715:4;20712:1;20705:15;20739:4;20736:1;20729:15;20755:184;20807:77;20804:1;20797:88;20904:4;20901:1;20894:15;20928:4;20925:1;20918:15;20944:120;21032:5;21025:13;21018:21;21011:5;21008:32;20998:2;;21054:1;21051;21044:12

Swarm Source

ipfs://0411e264d09cf94b2e62a762b827fd9c08eb09587de5a825361b0709c19f3766
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.