ETH Price: $2,136.54 (+4.00%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Claim Transfer416317702026-02-02 17:21:2730 days ago1770052887IN
0xbA7723fB...cFd5Dd73b
0 ETH0.000000730.01517028
Convert To Ash409152382026-01-17 3:17:0347 days ago1768619823IN
0xbA7723fB...cFd5Dd73b
0 ETH0.000000550.00335089
Set Ember To Ash...409120822026-01-17 1:31:5147 days ago1768613511IN
0xbA7723fB...cFd5Dd73b
0 ETH0.00000010.00362545
Claim Transfer409119262026-01-17 1:26:3947 days ago1768613199IN
0xbA7723fB...cFd5Dd73b
0 ETH0.000000230.00280096
Set Authorized C...408241452026-01-15 0:40:3749 days ago1768437637IN
0xbA7723fB...cFd5Dd73b
0 ETH0.00000060.01268146
Set Authorized C...408240512026-01-15 0:37:2949 days ago1768437449IN
0xbA7723fB...cFd5Dd73b
0 ETH0.000000220.0045833
Set Ash Token408240442026-01-15 0:37:1549 days ago1768437435IN
0xbA7723fB...cFd5Dd73b
0 ETH0.00000020.00422926
Distribute Token...408239382026-01-15 0:33:4349 days ago1768437223IN
0xbA7723fB...cFd5Dd73b
0 ETH0.000002160.00490095
Set Distribution...408239152026-01-15 0:32:5749 days ago1768437177IN
0xbA7723fB...cFd5Dd73b
0 ETH0.0000010.00545736

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EmberToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
shanghai EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2026-01-13
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

interface IERC721Errors {
    error ERC721InvalidOwner(address owner);
    error ERC721NonexistentToken(uint256 tokenId);
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
    error ERC721InvalidSender(address sender);
    error ERC721InvalidReceiver(address receiver);
    error ERC721InsufficientApproval(address operator, uint256 tokenId);
    error ERC721InvalidApprover(address approver);
    error ERC721InvalidOperator(address operator);
}

interface IERC1155Errors {
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
    error ERC1155InvalidSender(address sender);
    error ERC1155InvalidReceiver(address receiver);
    error ERC1155MissingApprovalForAll(address operator, address owner);
    error ERC1155InvalidApprover(address approver);
    error ERC1155InvalidOperator(address operator);
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;
    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)
abstract contract ERC20Burnable is Context, ERC20 {
    function burn(uint256 value) public virtual {
        _burn(_msgSender(), value);
    }

    function burnFrom(address account, uint256 value) public virtual {
        _spendAllowance(account, _msgSender(), value);
        _burn(account, value);
    }
}

interface IAshToken {
    function mintFromEmber(address to, uint256 amount) external;
}

contract EmberToken is ERC20, ERC20Burnable, Ownable {
    
    // ============ TOKENOMICS ============
    uint256 public constant TOTAL_SUPPLY = 1_000_000_000 * 10**18;
    
    uint256 public constant REWARDS_POOL = 500_000_000 * 10**18;      // 50%
    uint256 public constant DEX_LIQUIDITY = 100_000_000 * 10**18;     // 10%
    uint256 public constant TEAM_ALLOCATION = 100_000_000 * 10**18;   // 10%
    uint256 public constant MARKETING = 50_000_000 * 10**18;          // 5%
    uint256 public constant COMMUNITY = 50_000_000 * 10**18;          // 5%
    uint256 public constant ECOSYSTEM = 150_000_000 * 10**18;         // 15%
    uint256 public constant TREASURY = 50_000_000 * 10**18;           // 5%

    // ============ VESTING ============
    uint256 public constant VESTING_DURATION = 365 days; // 12 meses
    
    struct VestingInfo {
        uint256 totalAmount;
        uint256 released;
        uint256 startTime;
    }
    
    mapping(address => VestingInfo) public vestingSchedule;
    address[] public vestingWallets;

    // ============ WALLETS ============
    address public rewardsWallet;
    address public dexWallet;
    address public teamWallet;
    address public marketingWallet;
    address public communityWallet;
    address public ecosystemWallet;
    address public treasuryWallet;

    // ============ ASH INTEGRATION ============
    IAshToken public ashToken;
    uint256 public emberToAshRate = 100; // 100 EMBER = 1 ASH
    uint256 public totalConvertedToAsh;

    // ============ METRICS ============
    uint256 public totalDistributedRewards;
    uint256 public totalBurnedTokens;

    // ============ ACCESS CONTROL ============
    mapping(address => bool) public authorizedClaimer;
    
    // ============ STATE ============
    bool public distributed = false;
    bool public claimsPaused = false;

    // ============ EVENTS ============
    event ClaimerAuthorized(address indexed claimer, bool authorized);
    event TokensDistributed();
    event RewardsClaimed(address indexed claimer, address indexed to, uint256 amount);
    event BatchRewardsClaimed(address indexed claimer, uint256 totalAmount, uint256 recipients);
    event ClaimsPaused(bool paused);
    event AshTokenUpdated(address indexed ashToken);
    event EmberToAshRateUpdated(uint256 oldRate, uint256 newRate);
    event ConvertedToAsh(address indexed user, uint256 emberBurned, uint256 ashMinted);
    event TokensBurned(address indexed burner, uint256 amount);
    event VestingStarted(address indexed wallet, uint256 amount, uint256 endTime);
    event VestingReleased(address indexed wallet, uint256 amount);

    constructor() ERC20("Ember", "EMBER") Ownable(msg.sender) {}

    // ============ DISTRIBUTION ============
    
    function setDistributionWallets(
        address _rewards,
        address _dex,
        address _team,
        address _marketing,
        address _community,
        address _ecosystem,
        address _treasury
    ) external onlyOwner {
        require(!distributed, "Already distributed");
        require(_rewards != address(0), "Invalid rewards");
        require(_dex != address(0), "Invalid dex");
        require(_team != address(0), "Invalid team");
        require(_marketing != address(0), "Invalid marketing");
        require(_community != address(0), "Invalid community");
        require(_ecosystem != address(0), "Invalid ecosystem");
        require(_treasury != address(0), "Invalid treasury");

        rewardsWallet = _rewards;
        dexWallet = _dex;
        teamWallet = _team;
        marketingWallet = _marketing;
        communityWallet = _community;
        ecosystemWallet = _ecosystem;
        treasuryWallet = _treasury;
    }

    function distributeTokens() external onlyOwner {
        require(!distributed, "Already distributed");
        require(rewardsWallet != address(0), "Wallets not set");

        distributed = true;
        uint256 vestingStart = block.timestamp;

        // Immediate distribution
        _mint(rewardsWallet, REWARDS_POOL);
        _mint(dexWallet, DEX_LIQUIDITY);
        _mint(communityWallet, COMMUNITY);
        _mint(treasuryWallet, TREASURY);

        // Vesting distribution - tokens held in contract
        _mint(address(this), TEAM_ALLOCATION + MARKETING + ECOSYSTEM);

        // Setup vesting schedules
        _setupVesting(teamWallet, TEAM_ALLOCATION, vestingStart);
        _setupVesting(marketingWallet, MARKETING, vestingStart);
        _setupVesting(ecosystemWallet, ECOSYSTEM, vestingStart);

        emit TokensDistributed();
    }

    function _setupVesting(address wallet, uint256 amount, uint256 startTime) internal {
        vestingSchedule[wallet] = VestingInfo({
            totalAmount: amount,
            released: 0,
            startTime: startTime
        });
        vestingWallets.push(wallet);
        emit VestingStarted(wallet, amount, startTime + VESTING_DURATION);
    }

    // ============ VESTING FUNCTIONS ============

    /// @notice Libera tokens disponibles según vesting schedule
    /// @param wallet Wallet que recibirá los tokens
    function releaseVesting(address wallet) external {
        uint256 releasable = getReleasable(wallet);
        require(releasable > 0, "No tokens to release");

        vestingSchedule[wallet].released += releasable;
        _transfer(address(this), wallet, releasable);

        emit VestingReleased(wallet, releasable);
    }

    /// @notice Cantidad de tokens que se pueden liberar ahora
    function getReleasable(address wallet) public view returns (uint256) {
        VestingInfo memory info = vestingSchedule[wallet];
        if (info.totalAmount == 0) return 0;

        uint256 vested = getVestedAmount(wallet);
        return vested - info.released;
    }

    /// @notice Cantidad total de tokens vested hasta ahora
    function getVestedAmount(address wallet) public view returns (uint256) {
        VestingInfo memory info = vestingSchedule[wallet];
        if (info.totalAmount == 0) return 0;

        uint256 elapsed = block.timestamp - info.startTime;
        
        if (elapsed >= VESTING_DURATION) {
            return info.totalAmount;
        }
        
        return (info.totalAmount * elapsed) / VESTING_DURATION;
    }

    /// @notice Info completa de vesting para una wallet
    function getVestingInfo(address wallet) external view returns (
        uint256 totalAmount,
        uint256 released,
        uint256 releasable,
        uint256 remainingLocked,
        uint256 startTime,
        uint256 endTime,
        uint256 progressPercent
    ) {
        VestingInfo memory info = vestingSchedule[wallet];
        uint256 vested = getVestedAmount(wallet);
        uint256 _releasable = vested - info.released;
        
        return (
            info.totalAmount,
            info.released,
            _releasable,
            info.totalAmount - vested,
            info.startTime,
            info.startTime + VESTING_DURATION,
            info.totalAmount > 0 ? (vested * 10000) / info.totalAmount : 0
        );
    }

    /// @notice ¿Esta wallet tiene vesting?
    function isVestingWallet(address wallet) external view returns (bool) {
        return vestingSchedule[wallet].totalAmount > 0;
    }

    /// @notice Lista de wallets con vesting
    function getVestingWallets() external view returns (address[] memory) {
        return vestingWallets;
    }

    // ============ CLAIMER FUNCTIONS ============

    function setAuthorizedClaimer(address claimer, bool authorized) external onlyOwner {
        require(claimer != address(0), "Invalid claimer");
        authorizedClaimer[claimer] = authorized;
        emit ClaimerAuthorized(claimer, authorized);
    }

    function setClaimsPaused(bool paused) external onlyOwner {
        claimsPaused = paused;
        emit ClaimsPaused(paused);
    }

    function claimTransfer(address to, uint256 amount) external returns (bool) {
        require(!claimsPaused, "Claims paused");
        require(authorizedClaimer[msg.sender], "Not authorized claimer");
        require(to != address(0), "Invalid recipient");
        require(amount > 0, "Amount must be > 0");
        require(balanceOf(rewardsWallet) >= amount, "Insufficient rewards");
        
        _transfer(rewardsWallet, to, amount);
        totalDistributedRewards += amount;
        
        emit RewardsClaimed(msg.sender, to, amount);
        return true;
    }

    /// @notice Distribuir rewards a múltiples usuarios en una transacción
    function batchClaimTransfer(
        address[] calldata recipients, 
        uint256[] calldata amounts
    ) external returns (bool) {
        require(!claimsPaused, "Claims paused");
        require(authorizedClaimer[msg.sender], "Not authorized claimer");
        require(recipients.length == amounts.length, "Length mismatch");
        require(recipients.length <= 100, "Too many recipients");
        
        uint256 totalAmount = 0;
        for (uint256 i = 0; i < amounts.length; i++) {
            totalAmount += amounts[i];
        }
        require(balanceOf(rewardsWallet) >= totalAmount, "Insufficient rewards");
        
        for (uint256 i = 0; i < recipients.length; i++) {
            if (recipients[i] != address(0) && amounts[i] > 0) {
                _transfer(rewardsWallet, recipients[i], amounts[i]);
            }
        }
        
        totalDistributedRewards += totalAmount;
        emit BatchRewardsClaimed(msg.sender, totalAmount, recipients.length);
        return true;
    }

    // ============ ASH CONVERSION ============

    function setAshToken(address _ashToken) external onlyOwner {
        ashToken = IAshToken(_ashToken);
        emit AshTokenUpdated(_ashToken);
    }

    function setEmberToAshRate(uint256 newRate) external onlyOwner {
        require(newRate > 0, "Rate must be > 0");
        uint256 oldRate = emberToAshRate;
        emberToAshRate = newRate;
        emit EmberToAshRateUpdated(oldRate, newRate);
    }

    /// @notice Quemar EMBER para obtener ASH
    /// @param emberAmount Cantidad de EMBER a quemar
    function convertToAsh(uint256 emberAmount) external {
        require(address(ashToken) != address(0), "Ash token not set");
        require(emberAmount >= emberToAshRate, "Amount too low");
        require(balanceOf(msg.sender) >= emberAmount, "Insufficient EMBER");
        
        uint256 ashAmount = emberAmount / emberToAshRate;
        require(ashAmount > 0, "Ash amount is 0");
        
        // Quemar EMBER
        _burn(msg.sender, emberAmount);
        totalBurnedTokens += emberAmount;
        totalConvertedToAsh += emberAmount;
        
        // Mintear ASH
        ashToken.mintFromEmber(msg.sender, ashAmount);
        
        emit ConvertedToAsh(msg.sender, emberAmount, ashAmount);
    }

    // ============ BURN OVERRIDE ============

    function burn(uint256 amount) public virtual override {
        super.burn(amount);
        totalBurnedTokens += amount;
        emit TokensBurned(msg.sender, amount);
    }

    function burnFrom(address account, uint256 amount) public virtual override {
        super.burnFrom(account, amount);
        totalBurnedTokens += amount;
        emit TokensBurned(account, amount);
    }

    // ============ VIEW FUNCTIONS - METRICS ============

    /// @notice Supply total que existirá (constante)
    function maxSupply() external pure returns (uint256) {
        return TOTAL_SUPPLY;
    }

    /// @notice Supply actualmente minteado
    function currentSupply() external view returns (uint256) {
        return totalSupply();
    }

    /// @notice Tokens quemados en total
    function totalBurned() external view returns (uint256) {
        return totalBurnedTokens;
    }

    /// @notice Supply circulante (minteado - quemado - locked en vesting)
    function circulatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(address(this));
    }

    /// @notice Tokens en el rewards pool disponibles
    function rewardsRemaining() external view returns (uint256) {
        if (rewardsWallet == address(0)) return 0;
        return balanceOf(rewardsWallet);
    }

    /// @notice Total de rewards ya distribuidos a usuarios
    function rewardsDistributed() external view returns (uint256) {
        return totalDistributedRewards;
    }

    /// @notice Porcentaje del rewards pool usado (en basis points, 10000 = 100%)
    function rewardsPoolUsedPercent() external view returns (uint256) {
        if (REWARDS_POOL == 0) return 0;
        return (totalDistributedRewards * 10000) / REWARDS_POOL;
    }

    /// @notice EMBER convertido a ASH
    function emberConvertedToAsh() external view returns (uint256) {
        return totalConvertedToAsh;
    }

    /// @notice Tokens bloqueados en vesting
    function totalLockedInVesting() external view returns (uint256) {
        return balanceOf(address(this));
    }

    /// @notice Estado de distribución
    function isDistributed() external view returns (bool) {
        return distributed;
    }

    /// @notice Resumen completo de métricas
    function getMetrics() external view returns (
        uint256 _maxSupply,
        uint256 _currentSupply,
        uint256 _circulatingSupply,
        uint256 _totalBurned,
        uint256 _totalLockedVesting,
        uint256 _rewardsRemaining,
        uint256 _rewardsDistributed,
        uint256 _convertedToAsh,
        bool _isDistributed,
        bool _claimsPaused
    ) {
        return (
            TOTAL_SUPPLY,
            totalSupply(),
            totalSupply() - balanceOf(address(this)),
            totalBurnedTokens,
            balanceOf(address(this)),
            rewardsWallet != address(0) ? balanceOf(rewardsWallet) : 0,
            totalDistributedRewards,
            totalConvertedToAsh,
            distributed,
            claimsPaused
        );
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"ashToken","type":"address"}],"name":"AshTokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"recipients","type":"uint256"}],"name":"BatchRewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"bool","name":"authorized","type":"bool"}],"name":"ClaimerAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ClaimsPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"emberBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ashMinted","type":"uint256"}],"name":"ConvertedToAsh","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"EmberToAshRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[],"name":"TokensDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"VestingReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"VestingStarted","type":"event"},{"inputs":[],"name":"COMMUNITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEX_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARDS_POOL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VESTING_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ashToken","outputs":[{"internalType":"contract IAshToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedClaimer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchClaimTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"emberAmount","type":"uint256"}],"name":"convertToAsh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ecosystemWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emberConvertedToAsh","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emberToAshRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMetrics","outputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_currentSupply","type":"uint256"},{"internalType":"uint256","name":"_circulatingSupply","type":"uint256"},{"internalType":"uint256","name":"_totalBurned","type":"uint256"},{"internalType":"uint256","name":"_totalLockedVesting","type":"uint256"},{"internalType":"uint256","name":"_rewardsRemaining","type":"uint256"},{"internalType":"uint256","name":"_rewardsDistributed","type":"uint256"},{"internalType":"uint256","name":"_convertedToAsh","type":"uint256"},{"internalType":"bool","name":"_isDistributed","type":"bool"},{"internalType":"bool","name":"_claimsPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getReleasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getVestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getVestingInfo","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"},{"internalType":"uint256","name":"releasable","type":"uint256"},{"internalType":"uint256","name":"remainingLocked","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"progressPercent","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVestingWallets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDistributed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isVestingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"releaseVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPoolUsedPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ashToken","type":"address"}],"name":"setAshToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bool","name":"authorized","type":"bool"}],"name":"setAuthorizedClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setClaimsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"address","name":"_dex","type":"address"},{"internalType":"address","name":"_team","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_community","type":"address"},{"internalType":"address","name":"_ecosystem","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"name":"setDistributionWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setEmberToAshRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalConvertedToAsh","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedInVesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vestingSchedule","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestingWallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405260646010556015805461ffff1916905534801562000020575f80fd5b50336040518060400160405280600581526020016422b6b132b960d91b8152506040518060400160405280600581526020016422a6a122a960d91b81525081600390816200006f9190620001b2565b5060046200007e8282620001b2565b5050506001600160a01b038116620000af57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000ba81620000c1565b506200027a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200013b57607f821691505b6020821081036200015a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001ad575f81815260208120601f850160051c81016020861015620001885750805b601f850160051c820191505b81811015620001a95782815560010162000194565b5050505b505050565b81516001600160401b03811115620001ce57620001ce62000112565b620001e681620001df845462000126565b8462000160565b602080601f8311600181146200021c575f8415620002045750858301515b5f19600386901b1c1916600185901b178555620001a9565b5f85815260208120601f198616915b828110156200024c578886015182559484019460019091019084016200022b565b50858210156200026a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6125bb80620002885f395ff3fe608060405234801561000f575f80fd5b50600436106103d5575f3560e01c80638da5cb5b11610200578063d381f2121161011f578063ef3cd666116100b4578063f84b903e11610084578063f84b903e14610855578063f8d7f7901461047d578063fb897ce414610862578063fd99cbed1461049e578063ffff6b04146108aa575f80fd5b8063ef3cd6661461080f578063f2fde38b14610824578063f677cf0d14610837578063f81620fc14610842575f80fd5b8063d89135cd116100ef578063d89135cd146107bc578063da43d44f146107c4578063dd62ed3e146107d7578063e530a7d01461047d575f80fd5b8063d381f21214610772578063d486d12914610784578063d5a73fdd14610797578063d5abeb01146107aa575f80fd5b8063a9059cbb11610195578063c757483911610165578063c757483914610731578063c7678ffe14610744578063ca7ce6f414610757578063cc6d1ede1461075f575f80fd5b8063a9059cbb146106fa578063aee0293d1461070d578063afd1be1c14610715578063c047a4bf14610728575f80fd5b806395d89b41116101d057806395d89b41146106d95780639ab1b484146106e15780639c1454d4146106e9578063a87df832146106f1575f80fd5b80638da5cb5b1461069a578063902d55a5146106ab57806390cb32ed146106be5780639358928b146106d1575f80fd5b806352f19824116102f7578063715018a61161028c578063771282f61161025c578063771282f61461064c57806378c196f31461065457806379cc67901461065c5780638410a1111461066f578063868df0b014610678575f80fd5b8063715018a6146105c8578063740be3fa146105d057806375f0a874146105e35780637606f781146105f6575f80fd5b80635a8938af116102c75780635a8938af1461057c5780635b35f9c91461058f57806363da4d88146105a257806370a08231146105b5575f80fd5b806352f19824146105235780635421213e1461054d578063555f323a146105605780635992704414610569575f80fd5b80633e7a97f41161036d578063482d32811161033d578063482d3281146104eb5780634a2ae305146104fe5780634cfc4d30146105105780634e6f7f6a1461051b575f80fd5b80633e7a97f41461049e57806342966c68146104b0578063435263ef146104c55780634626402b146104d8575f80fd5b806320a17b24116103a857806320a17b241461045757806323b872dd1461046a5780632d2c55651461047d578063313ce5671461048f575f80fd5b806306fdde03146103d9578063095ea7b3146103f7578063170f37db1461041a57806318160ddd14610445575b5f80fd5b6103e16108f3565b6040516103ee91906121b6565b60405180910390f35b61040a61040536600461221c565b610983565b60405190151581526020016103ee565b61042d610428366004612244565b61099c565b6040516001600160a01b0390911681526020016103ee565b6002545b6040519081526020016103ee565b60095461042d906001600160a01b031681565b61040a61047836600461225b565b6109c4565b6104496a295be96e6406697200000081565b604051601281526020016103ee565b6104496a52b7d2dcc80cd2e400000081565b6104c36104be366004612244565b6109e7565b005b600d5461042d906001600160a01b031681565b600e5461042d906001600160a01b031681565b6104496b019d971e4fe8401e7400000081565b60155461040a90610100900460ff1681565b6104496301e1338081565b610449610a3e565b61040a610531366004612294565b6001600160a01b03165f90815260066020526040902054151590565b61044961055b366004612294565b610a4d565b61044960135481565b600a5461042d906001600160a01b031681565b6104c361058a3660046122b4565b610ac0565b60085461042d906001600160a01b031681565b6104c36105b0366004612294565b610d8c565b6104496105c3366004612294565b610ddd565b6104c3610df7565b6104c36105de366004612344565b610e0a565b600b5461042d906001600160a01b031681565b6105fe610eb9565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140016103ee565b610449610f6b565b610449610f75565b6104c361066a36600461221c565b610fa1565b61044960115481565b61040a610686366004612294565b60146020525f908152604090205460ff1681565b6005546001600160a01b031661042d565b6104496b033b2e3c9fd0803ce800000081565b600f5461042d906001600160a01b031681565b610449610ffc565b6103e1611013565b6104c3611022565b601254610449565b61044960125481565b61040a61070836600461221c565b611221565b601154610449565b61040a61072336600461221c565b61122e565b61044960105481565b600c5461042d906001600160a01b031681565b6104c3610752366004612244565b61142f565b61044961162c565b6104c361076d366004612375565b611654565b6104496a7c13bc4b2c133c5600000081565b6104c3610792366004612294565b6116b0565b6104496107a5366004612294565b611778565b6b033b2e3c9fd0803ce8000000610449565b601354610449565b61040a6107d23660046123d6565b61180a565b6104496107e536600461243d565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610817611afd565b6040516103ee9190612465565b6104c3610832366004612294565b611b5c565b60155460ff1661040a565b6104c3610850366004612244565b611b99565b60155461040a9060ff1681565b610875610870366004612294565b611c28565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016103ee565b6108d86108b8366004612294565b60066020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103ee565b606060038054610902906124b1565b80601f016020809104026020016040519081016040528092919081815260200182805461092e906124b1565b80156109795780601f1061095057610100808354040283529160200191610979565b820191905f5260205f20905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b5f33610990818585611cf4565b60019150505b92915050565b600781815481106109ab575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f336109d1858285611d06565b6109dc858585611d82565b506001949350505050565b6109f081611ddf565b8060135f828254610a0191906124fd565b909155505060405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b5f610a4830610ddd565b905090565b6001600160a01b0381165f9081526006602090815260408083208151606081018352815480825260018301549482019490945260029091015491810191909152908203610a9c57505f92915050565b5f610aa684611778565b9050816020015181610ab89190612510565b949350505050565b610ac8611de9565b60155460ff1615610b165760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48191a5cdd1c9a589d5d1959606a1b60448201526064015b60405180910390fd5b6001600160a01b038716610b5e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964207265776172647360881b6044820152606401610b0d565b6001600160a01b038616610ba25760405162461bcd60e51b815260206004820152600b60248201526a092dcecc2d8d2c840c8caf60ab1b6044820152606401610b0d565b6001600160a01b038516610be75760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207465616d60a01b6044820152606401610b0d565b6001600160a01b038416610c315760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d61726b6574696e6760781b6044820152606401610b0d565b6001600160a01b038316610c7b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420636f6d6d756e69747960781b6044820152606401610b0d565b6001600160a01b038216610cc55760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642065636f73797374656d60781b6044820152606401610b0d565b6001600160a01b038116610d0e5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420747265617375727960801b6044820152606401610b0d565b600880546001600160a01b03199081166001600160a01b03998a161790915560098054821697891697909717909655600a8054871695881695909517909455600b8054861693871693909317909255600c80548516918616919091179055600d80548416918516919091179055600e80549092169216919091179055565b610d94611de9565b600f80546001600160a01b0319166001600160a01b0383169081179091556040517f3b15fdcef149aaa723e10274df37f4f8710217e305e82c879df50a56ad497352905f90a250565b6001600160a01b03165f9081526020819052604090205490565b610dff611de9565b610e085f611e16565b565b610e12611de9565b6001600160a01b038216610e5a5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21031b630b4b6b2b960891b6044820152606401610b0d565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527f780a00036163a0d19334075f1eada4b2233384eb94fa25830212981fb0e482ba91015b60405180910390a25050565b5f805f805f805f805f806b033b2e3c9fd0803ce8000000610ed960025490565b610ee230610ddd565b600254610eef9190612510565b601354610efb30610ddd565b6008546001600160a01b0316610f11575f610f26565b600854610f26906001600160a01b0316610ddd565b60125460115460155f9054906101000a900460ff16601560019054906101000a900460ff16995099509950995099509950995099509950995090919293949596979899565b5f610a4860025490565b6008545f906001600160a01b0316610f8c57505f90565b600854610a48906001600160a01b0316610ddd565b610fab8282611e67565b8060135f828254610fbc91906124fd565b90915550506040518181526001600160a01b038316907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb690602001610ead565b5f61100630610ddd565b600254610a489190612510565b606060048054610902906124b1565b61102a611de9565b60155460ff16156110735760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48191a5cdd1c9a589d5d1959606a1b6044820152606401610b0d565b6008546001600160a01b03166110bd5760405162461bcd60e51b815260206004820152600f60248201526e15d85b1b195d1cc81b9bdd081cd95d608a1b6044820152606401610b0d565b6015805460ff1916600117905560085442906110ee906001600160a01b03166b019d971e4fe8401e74000000611e80565b60095461110f906001600160a01b03166a52b7d2dcc80cd2e4000000611e80565b600c54611130906001600160a01b03166a295be96e64066972000000611e80565b600e54611151906001600160a01b03166a295be96e64066972000000611e80565b611190306a7c13bc4b2c133c560000006111816a295be96e640669720000006a52b7d2dcc80cd2e40000006124fd565b61118b91906124fd565b611e80565b600a546111b2906001600160a01b03166a52b7d2dcc80cd2e400000083611eb4565b600b546111d4906001600160a01b03166a295be96e6406697200000083611eb4565b600d546111f6906001600160a01b03166a7c13bc4b2c133c5600000083611eb4565b6040517fcea85459abe456c560868e61c476933dcee35a72aba5f546e93715929a696186905f90a150565b5f33610990818585611d82565b6015545f90610100900460ff16156112785760405162461bcd60e51b815260206004820152600d60248201526c10db185a5b5cc81c185d5cd959609a1b6044820152606401610b0d565b335f9081526014602052604090205460ff166112cf5760405162461bcd60e51b81526020600482015260166024820152752737ba1030baba3437b934bd32b21031b630b4b6b2b960511b6044820152606401610b0d565b6001600160a01b0383166113195760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610b0d565b5f821161135d5760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b6044820152606401610b0d565b6008548290611374906001600160a01b0316610ddd565b10156113b95760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610b0d565b6008546113d0906001600160a01b03168484611d82565b8160125f8282546113e191906124fd565b90915550506040518281526001600160a01b0384169033907f9310ccfcb8de723f578a9e4282ea9f521f05ae40dc08f3068dfad528a65ee3c79060200160405180910390a350600192915050565b600f546001600160a01b031661147b5760405162461bcd60e51b8152602060048201526011602482015270105cda081d1bdad95b881b9bdd081cd95d607a1b6044820152606401610b0d565b6010548110156114be5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610b0d565b806114c833610ddd565b101561150b5760405162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a1022a6a122a960711b6044820152606401610b0d565b5f6010548261151a9190612523565b90505f811161155d5760405162461bcd60e51b815260206004820152600f60248201526e041736820616d6f756e74206973203608c1b6044820152606401610b0d565b6115673383611f8a565b8160135f82825461157891906124fd565b925050819055508160115f82825461159091906124fd565b9091555050600f5460405163318288c560e11b8152336004820152602481018390526001600160a01b0390911690636305118a906044015f604051808303815f87803b1580156115de575f80fd5b505af11580156115f0573d5f803e3d5ffd5b505060408051858152602081018590523393507f8a7e432b5736b73264021df0306d9da62afe251fa6bbc93ed3a28a98108af3d4925001610ead565b5f6b019d971e4fe8401e7400000060125461271061164a9190612542565b610a489190612523565b61165c611de9565b601580548215156101000261ff00199091161790556040517f6d0ef31fcddf8993a6f3195a744ef1e2ca39090ffd1480fcf387560d90f9b890906116a590831515815260200190565b60405180910390a150565b5f6116ba82610a4d565b90505f81116117025760405162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2072656c6561736560601b6044820152606401610b0d565b6001600160a01b0382165f908152600660205260408120600101805483929061172c9084906124fd565b9091555061173d9050308383611d82565b816001600160a01b03167f4ad7799f99297062cea73c5a21d23a1fcf49f6a1957f7409712e555a0dcd1e1d82604051610ead91815260200190565b6001600160a01b0381165f90815260066020908152604080832081516060810183528154808252600183015494820194909452600290910154918101919091529082036117c757505f92915050565b5f8160400151426117d89190612510565b90506301e1338081106117ed57505192915050565b81516301e1338090611800908390612542565b610ab89190612523565b6015545f90610100900460ff16156118545760405162461bcd60e51b815260206004820152600d60248201526c10db185a5b5cc81c185d5cd959609a1b6044820152606401610b0d565b335f9081526014602052604090205460ff166118ab5760405162461bcd60e51b81526020600482015260166024820152752737ba1030baba3437b934bd32b21031b630b4b6b2b960511b6044820152606401610b0d565b8382146118ec5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610b0d565b60648411156119335760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e7920726563697069656e747360681b6044820152606401610b0d565b5f805b838110156119765784848281811061195057611950612559565b905060200201358261196291906124fd565b91508061196e8161256d565b915050611936565b50600854819061198e906001600160a01b0316610ddd565b10156119d35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610b0d565b5f5b85811015611a9f575f8787838181106119f0576119f0612559565b9050602002016020810190611a059190612294565b6001600160a01b031614158015611a3357505f858583818110611a2a57611a2a612559565b90506020020135115b15611a8d57600854611a8d906001600160a01b0316888884818110611a5a57611a5a612559565b9050602002016020810190611a6f9190612294565b878785818110611a8157611a81612559565b90506020020135611d82565b80611a978161256d565b9150506119d5565b508060125f828254611ab191906124fd565b9091555050604080518281526020810187905233917f528a988cb55211ddb8b128328f9cd40a1c598fa731d63af6439d1f32f212335c910160405180910390a250600195945050505050565b6060600780548060200260200160405190810160405280929190818152602001828054801561097957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b35575050505050905090565b611b64611de9565b6001600160a01b038116611b8d57604051631e4fbdf760e01b81525f6004820152602401610b0d565b611b9681611e16565b50565b611ba1611de9565b5f8111611be35760405162461bcd60e51b815260206004820152601060248201526f052617465206d757374206265203e20360841b6044820152606401610b0d565b601080549082905560408051828152602081018490527fcad19e08d4399ba81e2a0550f4d197b0eb50e19812e06e1a995eb6d17a3f1caf910160405180910390a15050565b6001600160a01b0381165f908152600660209081526040808320815160608101835281548152600182015493810193909352600201549082015281908190819081908190819081611c788a611778565b90505f826020015182611c8b9190612510565b835160208501519192509082611ca18584612510565b6040870151611cb46301e13380826124fd565b8851611cc0575f611cd8565b8851611cce89612710612542565b611cd89190612523565b9950995099509950995099509950505050919395979092949650565b611d018383836001611fbe565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015611d7c5781811015611d6e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610b0d565b611d7c84848484035f611fbe565b50505050565b6001600160a01b038316611dab57604051634b637e8f60e11b81525f6004820152602401610b0d565b6001600160a01b038216611dd45760405163ec442f0560e01b81525f6004820152602401610b0d565b611d01838383612090565b611b963382611f8a565b6005546001600160a01b03163314610e085760405163118cdaa760e01b8152336004820152602401610b0d565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b611e72823383611d06565b611e7c8282611f8a565b5050565b6001600160a01b038216611ea95760405163ec442f0560e01b81525f6004820152602401610b0d565b611e7c5f8383612090565b604080516060810182528381525f60208083018281528385018681526001600160a01b03891680855260069093529483209351845551600180850191909155935160029093019290925560078054938401815590527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916821790557f8fe19f160f86d04fb1a90dde93e5e1a47df0810685adf4b990153c107d7b392483611f6d6301e13380856124fd565b6040805192835260208301919091520160405180910390a2505050565b6001600160a01b038216611fb357604051634b637e8f60e11b81525f6004820152602401610b0d565b611e7c825f83612090565b6001600160a01b038416611fe75760405163e602df0560e01b81525f6004820152602401610b0d565b6001600160a01b03831661201057604051634a1406b160e11b81525f6004820152602401610b0d565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611d7c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161208291815260200190565b60405180910390a350505050565b6001600160a01b0383166120ba578060025f8282546120af91906124fd565b9091555061212a9050565b6001600160a01b0383165f908152602081905260409020548181101561210c5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610b0d565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661214657600280548290039055612164565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121a991815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b818110156121e1578581018301518582016040015282016121c5565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612217575f80fd5b919050565b5f806040838503121561222d575f80fd5b61223683612201565b946020939093013593505050565b5f60208284031215612254575f80fd5b5035919050565b5f805f6060848603121561226d575f80fd5b61227684612201565b925061228460208501612201565b9150604084013590509250925092565b5f602082840312156122a4575f80fd5b6122ad82612201565b9392505050565b5f805f805f805f60e0888a0312156122ca575f80fd5b6122d388612201565b96506122e160208901612201565b95506122ef60408901612201565b94506122fd60608901612201565b935061230b60808901612201565b925061231960a08901612201565b915061232760c08901612201565b905092959891949750929550565b80358015158114612217575f80fd5b5f8060408385031215612355575f80fd5b61235e83612201565b915061236c60208401612335565b90509250929050565b5f60208284031215612385575f80fd5b6122ad82612335565b5f8083601f84011261239e575f80fd5b50813567ffffffffffffffff8111156123b5575f80fd5b6020830191508360208260051b85010111156123cf575f80fd5b9250929050565b5f805f80604085870312156123e9575f80fd5b843567ffffffffffffffff80821115612400575f80fd5b61240c8883890161238e565b90965094506020870135915080821115612424575f80fd5b506124318782880161238e565b95989497509550505050565b5f806040838503121561244e575f80fd5b61245783612201565b915061236c60208401612201565b602080825282518282018190525f9190848201906040850190845b818110156124a55783516001600160a01b031683529284019291840191600101612480565b50909695505050505050565b600181811c908216806124c557607f821691505b6020821081036124e357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610996576109966124e9565b81810381811115610996576109966124e9565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610996576109966124e9565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161257e5761257e6124e9565b506001019056fea2646970667358221220af37af05c8404a00cbc4c3d4febaad6b7faa41dd431f1d34a6468e25b36574cd64736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106103d5575f3560e01c80638da5cb5b11610200578063d381f2121161011f578063ef3cd666116100b4578063f84b903e11610084578063f84b903e14610855578063f8d7f7901461047d578063fb897ce414610862578063fd99cbed1461049e578063ffff6b04146108aa575f80fd5b8063ef3cd6661461080f578063f2fde38b14610824578063f677cf0d14610837578063f81620fc14610842575f80fd5b8063d89135cd116100ef578063d89135cd146107bc578063da43d44f146107c4578063dd62ed3e146107d7578063e530a7d01461047d575f80fd5b8063d381f21214610772578063d486d12914610784578063d5a73fdd14610797578063d5abeb01146107aa575f80fd5b8063a9059cbb11610195578063c757483911610165578063c757483914610731578063c7678ffe14610744578063ca7ce6f414610757578063cc6d1ede1461075f575f80fd5b8063a9059cbb146106fa578063aee0293d1461070d578063afd1be1c14610715578063c047a4bf14610728575f80fd5b806395d89b41116101d057806395d89b41146106d95780639ab1b484146106e15780639c1454d4146106e9578063a87df832146106f1575f80fd5b80638da5cb5b1461069a578063902d55a5146106ab57806390cb32ed146106be5780639358928b146106d1575f80fd5b806352f19824116102f7578063715018a61161028c578063771282f61161025c578063771282f61461064c57806378c196f31461065457806379cc67901461065c5780638410a1111461066f578063868df0b014610678575f80fd5b8063715018a6146105c8578063740be3fa146105d057806375f0a874146105e35780637606f781146105f6575f80fd5b80635a8938af116102c75780635a8938af1461057c5780635b35f9c91461058f57806363da4d88146105a257806370a08231146105b5575f80fd5b806352f19824146105235780635421213e1461054d578063555f323a146105605780635992704414610569575f80fd5b80633e7a97f41161036d578063482d32811161033d578063482d3281146104eb5780634a2ae305146104fe5780634cfc4d30146105105780634e6f7f6a1461051b575f80fd5b80633e7a97f41461049e57806342966c68146104b0578063435263ef146104c55780634626402b146104d8575f80fd5b806320a17b24116103a857806320a17b241461045757806323b872dd1461046a5780632d2c55651461047d578063313ce5671461048f575f80fd5b806306fdde03146103d9578063095ea7b3146103f7578063170f37db1461041a57806318160ddd14610445575b5f80fd5b6103e16108f3565b6040516103ee91906121b6565b60405180910390f35b61040a61040536600461221c565b610983565b60405190151581526020016103ee565b61042d610428366004612244565b61099c565b6040516001600160a01b0390911681526020016103ee565b6002545b6040519081526020016103ee565b60095461042d906001600160a01b031681565b61040a61047836600461225b565b6109c4565b6104496a295be96e6406697200000081565b604051601281526020016103ee565b6104496a52b7d2dcc80cd2e400000081565b6104c36104be366004612244565b6109e7565b005b600d5461042d906001600160a01b031681565b600e5461042d906001600160a01b031681565b6104496b019d971e4fe8401e7400000081565b60155461040a90610100900460ff1681565b6104496301e1338081565b610449610a3e565b61040a610531366004612294565b6001600160a01b03165f90815260066020526040902054151590565b61044961055b366004612294565b610a4d565b61044960135481565b600a5461042d906001600160a01b031681565b6104c361058a3660046122b4565b610ac0565b60085461042d906001600160a01b031681565b6104c36105b0366004612294565b610d8c565b6104496105c3366004612294565b610ddd565b6104c3610df7565b6104c36105de366004612344565b610e0a565b600b5461042d906001600160a01b031681565b6105fe610eb9565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140016103ee565b610449610f6b565b610449610f75565b6104c361066a36600461221c565b610fa1565b61044960115481565b61040a610686366004612294565b60146020525f908152604090205460ff1681565b6005546001600160a01b031661042d565b6104496b033b2e3c9fd0803ce800000081565b600f5461042d906001600160a01b031681565b610449610ffc565b6103e1611013565b6104c3611022565b601254610449565b61044960125481565b61040a61070836600461221c565b611221565b601154610449565b61040a61072336600461221c565b61122e565b61044960105481565b600c5461042d906001600160a01b031681565b6104c3610752366004612244565b61142f565b61044961162c565b6104c361076d366004612375565b611654565b6104496a7c13bc4b2c133c5600000081565b6104c3610792366004612294565b6116b0565b6104496107a5366004612294565b611778565b6b033b2e3c9fd0803ce8000000610449565b601354610449565b61040a6107d23660046123d6565b61180a565b6104496107e536600461243d565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610817611afd565b6040516103ee9190612465565b6104c3610832366004612294565b611b5c565b60155460ff1661040a565b6104c3610850366004612244565b611b99565b60155461040a9060ff1681565b610875610870366004612294565b611c28565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016103ee565b6108d86108b8366004612294565b60066020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103ee565b606060038054610902906124b1565b80601f016020809104026020016040519081016040528092919081815260200182805461092e906124b1565b80156109795780601f1061095057610100808354040283529160200191610979565b820191905f5260205f20905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b5f33610990818585611cf4565b60019150505b92915050565b600781815481106109ab575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f336109d1858285611d06565b6109dc858585611d82565b506001949350505050565b6109f081611ddf565b8060135f828254610a0191906124fd565b909155505060405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b5f610a4830610ddd565b905090565b6001600160a01b0381165f9081526006602090815260408083208151606081018352815480825260018301549482019490945260029091015491810191909152908203610a9c57505f92915050565b5f610aa684611778565b9050816020015181610ab89190612510565b949350505050565b610ac8611de9565b60155460ff1615610b165760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48191a5cdd1c9a589d5d1959606a1b60448201526064015b60405180910390fd5b6001600160a01b038716610b5e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964207265776172647360881b6044820152606401610b0d565b6001600160a01b038616610ba25760405162461bcd60e51b815260206004820152600b60248201526a092dcecc2d8d2c840c8caf60ab1b6044820152606401610b0d565b6001600160a01b038516610be75760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207465616d60a01b6044820152606401610b0d565b6001600160a01b038416610c315760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d61726b6574696e6760781b6044820152606401610b0d565b6001600160a01b038316610c7b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420636f6d6d756e69747960781b6044820152606401610b0d565b6001600160a01b038216610cc55760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642065636f73797374656d60781b6044820152606401610b0d565b6001600160a01b038116610d0e5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420747265617375727960801b6044820152606401610b0d565b600880546001600160a01b03199081166001600160a01b03998a161790915560098054821697891697909717909655600a8054871695881695909517909455600b8054861693871693909317909255600c80548516918616919091179055600d80548416918516919091179055600e80549092169216919091179055565b610d94611de9565b600f80546001600160a01b0319166001600160a01b0383169081179091556040517f3b15fdcef149aaa723e10274df37f4f8710217e305e82c879df50a56ad497352905f90a250565b6001600160a01b03165f9081526020819052604090205490565b610dff611de9565b610e085f611e16565b565b610e12611de9565b6001600160a01b038216610e5a5760405162461bcd60e51b815260206004820152600f60248201526e24b73b30b634b21031b630b4b6b2b960891b6044820152606401610b0d565b6001600160a01b0382165f81815260146020908152604091829020805460ff191685151590811790915591519182527f780a00036163a0d19334075f1eada4b2233384eb94fa25830212981fb0e482ba91015b60405180910390a25050565b5f805f805f805f805f806b033b2e3c9fd0803ce8000000610ed960025490565b610ee230610ddd565b600254610eef9190612510565b601354610efb30610ddd565b6008546001600160a01b0316610f11575f610f26565b600854610f26906001600160a01b0316610ddd565b60125460115460155f9054906101000a900460ff16601560019054906101000a900460ff16995099509950995099509950995099509950995090919293949596979899565b5f610a4860025490565b6008545f906001600160a01b0316610f8c57505f90565b600854610a48906001600160a01b0316610ddd565b610fab8282611e67565b8060135f828254610fbc91906124fd565b90915550506040518181526001600160a01b038316907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb690602001610ead565b5f61100630610ddd565b600254610a489190612510565b606060048054610902906124b1565b61102a611de9565b60155460ff16156110735760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48191a5cdd1c9a589d5d1959606a1b6044820152606401610b0d565b6008546001600160a01b03166110bd5760405162461bcd60e51b815260206004820152600f60248201526e15d85b1b195d1cc81b9bdd081cd95d608a1b6044820152606401610b0d565b6015805460ff1916600117905560085442906110ee906001600160a01b03166b019d971e4fe8401e74000000611e80565b60095461110f906001600160a01b03166a52b7d2dcc80cd2e4000000611e80565b600c54611130906001600160a01b03166a295be96e64066972000000611e80565b600e54611151906001600160a01b03166a295be96e64066972000000611e80565b611190306a7c13bc4b2c133c560000006111816a295be96e640669720000006a52b7d2dcc80cd2e40000006124fd565b61118b91906124fd565b611e80565b600a546111b2906001600160a01b03166a52b7d2dcc80cd2e400000083611eb4565b600b546111d4906001600160a01b03166a295be96e6406697200000083611eb4565b600d546111f6906001600160a01b03166a7c13bc4b2c133c5600000083611eb4565b6040517fcea85459abe456c560868e61c476933dcee35a72aba5f546e93715929a696186905f90a150565b5f33610990818585611d82565b6015545f90610100900460ff16156112785760405162461bcd60e51b815260206004820152600d60248201526c10db185a5b5cc81c185d5cd959609a1b6044820152606401610b0d565b335f9081526014602052604090205460ff166112cf5760405162461bcd60e51b81526020600482015260166024820152752737ba1030baba3437b934bd32b21031b630b4b6b2b960511b6044820152606401610b0d565b6001600160a01b0383166113195760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610b0d565b5f821161135d5760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b6044820152606401610b0d565b6008548290611374906001600160a01b0316610ddd565b10156113b95760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610b0d565b6008546113d0906001600160a01b03168484611d82565b8160125f8282546113e191906124fd565b90915550506040518281526001600160a01b0384169033907f9310ccfcb8de723f578a9e4282ea9f521f05ae40dc08f3068dfad528a65ee3c79060200160405180910390a350600192915050565b600f546001600160a01b031661147b5760405162461bcd60e51b8152602060048201526011602482015270105cda081d1bdad95b881b9bdd081cd95d607a1b6044820152606401610b0d565b6010548110156114be5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610b0d565b806114c833610ddd565b101561150b5760405162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a1022a6a122a960711b6044820152606401610b0d565b5f6010548261151a9190612523565b90505f811161155d5760405162461bcd60e51b815260206004820152600f60248201526e041736820616d6f756e74206973203608c1b6044820152606401610b0d565b6115673383611f8a565b8160135f82825461157891906124fd565b925050819055508160115f82825461159091906124fd565b9091555050600f5460405163318288c560e11b8152336004820152602481018390526001600160a01b0390911690636305118a906044015f604051808303815f87803b1580156115de575f80fd5b505af11580156115f0573d5f803e3d5ffd5b505060408051858152602081018590523393507f8a7e432b5736b73264021df0306d9da62afe251fa6bbc93ed3a28a98108af3d4925001610ead565b5f6b019d971e4fe8401e7400000060125461271061164a9190612542565b610a489190612523565b61165c611de9565b601580548215156101000261ff00199091161790556040517f6d0ef31fcddf8993a6f3195a744ef1e2ca39090ffd1480fcf387560d90f9b890906116a590831515815260200190565b60405180910390a150565b5f6116ba82610a4d565b90505f81116117025760405162461bcd60e51b81526020600482015260146024820152734e6f20746f6b656e7320746f2072656c6561736560601b6044820152606401610b0d565b6001600160a01b0382165f908152600660205260408120600101805483929061172c9084906124fd565b9091555061173d9050308383611d82565b816001600160a01b03167f4ad7799f99297062cea73c5a21d23a1fcf49f6a1957f7409712e555a0dcd1e1d82604051610ead91815260200190565b6001600160a01b0381165f90815260066020908152604080832081516060810183528154808252600183015494820194909452600290910154918101919091529082036117c757505f92915050565b5f8160400151426117d89190612510565b90506301e1338081106117ed57505192915050565b81516301e1338090611800908390612542565b610ab89190612523565b6015545f90610100900460ff16156118545760405162461bcd60e51b815260206004820152600d60248201526c10db185a5b5cc81c185d5cd959609a1b6044820152606401610b0d565b335f9081526014602052604090205460ff166118ab5760405162461bcd60e51b81526020600482015260166024820152752737ba1030baba3437b934bd32b21031b630b4b6b2b960511b6044820152606401610b0d565b8382146118ec5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610b0d565b60648411156119335760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e7920726563697069656e747360681b6044820152606401610b0d565b5f805b838110156119765784848281811061195057611950612559565b905060200201358261196291906124fd565b91508061196e8161256d565b915050611936565b50600854819061198e906001600160a01b0316610ddd565b10156119d35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207265776172647360601b6044820152606401610b0d565b5f5b85811015611a9f575f8787838181106119f0576119f0612559565b9050602002016020810190611a059190612294565b6001600160a01b031614158015611a3357505f858583818110611a2a57611a2a612559565b90506020020135115b15611a8d57600854611a8d906001600160a01b0316888884818110611a5a57611a5a612559565b9050602002016020810190611a6f9190612294565b878785818110611a8157611a81612559565b90506020020135611d82565b80611a978161256d565b9150506119d5565b508060125f828254611ab191906124fd565b9091555050604080518281526020810187905233917f528a988cb55211ddb8b128328f9cd40a1c598fa731d63af6439d1f32f212335c910160405180910390a250600195945050505050565b6060600780548060200260200160405190810160405280929190818152602001828054801561097957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b35575050505050905090565b611b64611de9565b6001600160a01b038116611b8d57604051631e4fbdf760e01b81525f6004820152602401610b0d565b611b9681611e16565b50565b611ba1611de9565b5f8111611be35760405162461bcd60e51b815260206004820152601060248201526f052617465206d757374206265203e20360841b6044820152606401610b0d565b601080549082905560408051828152602081018490527fcad19e08d4399ba81e2a0550f4d197b0eb50e19812e06e1a995eb6d17a3f1caf910160405180910390a15050565b6001600160a01b0381165f908152600660209081526040808320815160608101835281548152600182015493810193909352600201549082015281908190819081908190819081611c788a611778565b90505f826020015182611c8b9190612510565b835160208501519192509082611ca18584612510565b6040870151611cb46301e13380826124fd565b8851611cc0575f611cd8565b8851611cce89612710612542565b611cd89190612523565b9950995099509950995099509950505050919395979092949650565b611d018383836001611fbe565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015611d7c5781811015611d6e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610b0d565b611d7c84848484035f611fbe565b50505050565b6001600160a01b038316611dab57604051634b637e8f60e11b81525f6004820152602401610b0d565b6001600160a01b038216611dd45760405163ec442f0560e01b81525f6004820152602401610b0d565b611d01838383612090565b611b963382611f8a565b6005546001600160a01b03163314610e085760405163118cdaa760e01b8152336004820152602401610b0d565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b611e72823383611d06565b611e7c8282611f8a565b5050565b6001600160a01b038216611ea95760405163ec442f0560e01b81525f6004820152602401610b0d565b611e7c5f8383612090565b604080516060810182528381525f60208083018281528385018681526001600160a01b03891680855260069093529483209351845551600180850191909155935160029093019290925560078054938401815590527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916821790557f8fe19f160f86d04fb1a90dde93e5e1a47df0810685adf4b990153c107d7b392483611f6d6301e13380856124fd565b6040805192835260208301919091520160405180910390a2505050565b6001600160a01b038216611fb357604051634b637e8f60e11b81525f6004820152602401610b0d565b611e7c825f83612090565b6001600160a01b038416611fe75760405163e602df0560e01b81525f6004820152602401610b0d565b6001600160a01b03831661201057604051634a1406b160e11b81525f6004820152602401610b0d565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611d7c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161208291815260200190565b60405180910390a350505050565b6001600160a01b0383166120ba578060025f8282546120af91906124fd565b9091555061212a9050565b6001600160a01b0383165f908152602081905260409020548181101561210c5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610b0d565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661214657600280548290039055612164565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121a991815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b818110156121e1578581018301518582016040015282016121c5565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612217575f80fd5b919050565b5f806040838503121561222d575f80fd5b61223683612201565b946020939093013593505050565b5f60208284031215612254575f80fd5b5035919050565b5f805f6060848603121561226d575f80fd5b61227684612201565b925061228460208501612201565b9150604084013590509250925092565b5f602082840312156122a4575f80fd5b6122ad82612201565b9392505050565b5f805f805f805f60e0888a0312156122ca575f80fd5b6122d388612201565b96506122e160208901612201565b95506122ef60408901612201565b94506122fd60608901612201565b935061230b60808901612201565b925061231960a08901612201565b915061232760c08901612201565b905092959891949750929550565b80358015158114612217575f80fd5b5f8060408385031215612355575f80fd5b61235e83612201565b915061236c60208401612335565b90509250929050565b5f60208284031215612385575f80fd5b6122ad82612335565b5f8083601f84011261239e575f80fd5b50813567ffffffffffffffff8111156123b5575f80fd5b6020830191508360208260051b85010111156123cf575f80fd5b9250929050565b5f805f80604085870312156123e9575f80fd5b843567ffffffffffffffff80821115612400575f80fd5b61240c8883890161238e565b90965094506020870135915080821115612424575f80fd5b506124318782880161238e565b95989497509550505050565b5f806040838503121561244e575f80fd5b61245783612201565b915061236c60208401612201565b602080825282518282018190525f9190848201906040850190845b818110156124a55783516001600160a01b031683529284019291840191600101612480565b50909695505050505050565b600181811c908216806124c557607f821691505b6020821081036124e357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610996576109966124e9565b81810381811115610996576109966124e9565b5f8261253d57634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610996576109966124e9565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161257e5761257e6124e9565b506001019056fea2646970667358221220af37af05c8404a00cbc4c3d4febaad6b7faa41dd431f1d34a6468e25b36574cd64736f6c63430008140033

Deployed Bytecode Sourcemap

9356:14272:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4950:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5817:190;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;5817:190:0;1004:187:1;10389:31:0;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1545:32:1;;;1527:51;;1515:2;1500:18;10389:31:0;1381:203:1;5244:99:0;5323:12;;5244:99;;;1735:25:1;;;1723:2;1708:18;5244:99:0;1589:177:1;10506:24:0;;;;;-1:-1:-1;;;;;10506:24:0;;;6015:249;;;;;;:::i;:::-;;:::i;10007:54::-;;10042:19;10007:54;;5152:84;;;5226:2;2246:36:1;;2234:2;2219:18;5152:84:0;2104:184:1;9619:60:0;;9659:20;9619:60;;20508:177;;;;;;:::i;:::-;;:::i;:::-;;10643:30;;;;;-1:-1:-1;;;;;10643:30:0;;;10680:29;;;;;-1:-1:-1;;;;;10680:29:0;;;9541:59;;9580:20;9541:59;;11223:32;;;;;;;;;;;;10128:51;;10171:8;10128:51;;22513:114;;;:::i;16670:135::-;;;;;;:::i;:::-;-1:-1:-1;;;;;16758:23:0;16734:4;16758:23;;;:15;:23;;;;;:35;:39;;;16670:135;15009:276;;;;;;:::i;:::-;;:::i;10993:32::-;;;;;;10537:25;;;;;-1:-1:-1;;;;;10537:25:0;;;12184:984;;;;;;:::i;:::-;;:::i;10471:28::-;;;;;-1:-1:-1;;;;;10471:28:0;;;19198:151;;;;;;:::i;:::-;;:::i;5351:118::-;;;;;;:::i;:::-;;:::i;1368:103::-;;;:::i;17031:255::-;;;;;;:::i;:::-;;:::i;10569:30::-;;;;;-1:-1:-1;;;;;10569:30:0;;;22822:803;;;:::i;:::-;;;;3934:25:1;;;3990:2;3975:18;;3968:34;;;;4018:18;;;4011:34;;;;4076:2;4061:18;;4054:34;;;;4119:3;4104:19;;4097:35;;;;4163:3;4148:19;;4141:35;4207:3;4192:19;;4185:35;4251:3;4236:19;;4229:35;4308:14;4301:22;4295:3;4280:19;;4273:51;4368:14;4361:22;4355:3;4340:19;;4333:51;3921:3;3906:19;22822:803:0;3547:843:1;21170:96:0;;;:::i;21688:162::-;;;:::i;20693:208::-;;;;;;:::i;:::-;;:::i;10863:34::-;;;;;;11083:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1099:87;1172:6;;-1:-1:-1;;;;;1172:6:0;1099:87;;9467:61;;9506:22;9467:61;;10768:25;;;;;-1:-1:-1;;;;;10768:25:0;;;21498:127;;;:::i;5049:95::-;;;:::i;13176:873::-;;;:::i;21919:111::-;21999:23;;21919:111;;10948:38;;;;;;5477:182;;;;;;:::i;:::-;;:::i;22351:108::-;22432:19;;22351:108;;17435:582;;;;;;:::i;:::-;;:::i;10800:35::-;;;;;;10606:30;;;;;-1:-1:-1;;;;;10606:30:0;;;19722:728;;;;;;:::i;:::-;;:::i;22121:182::-;;;:::i;17294:133::-;;;;;;:::i;:::-;;:::i;9929:56::-;;9965:20;9929:56;;14602:335;;;;;;:::i;:::-;;:::i;15354:426::-;;;;;;:::i;:::-;;:::i;21026:91::-;9506:22;21026:91;;21316:98;21389:17;;21316:98;;18103:1036;;;;;;:::i;:::-;;:::i;5667:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;5774:18:0;;;5747:7;5774:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5667:142;16859:110;;;:::i;:::-;;;;;;;:::i;1479:220::-;;;;;;:::i;:::-;;:::i;22676:91::-;22748:11;;;;22676:91;;19357:255;;;;;;:::i;:::-;;:::i;11185:31::-;;;;;;;;;15846:770;;;;;;:::i;:::-;;:::i;:::-;;;;7198:25:1;;;7254:2;7239:18;;7232:34;;;;7282:18;;;7275:34;;;;7340:2;7325:18;;7318:34;;;;7383:3;7368:19;;7361:35;7427:3;7412:19;;7405:35;7471:3;7456:19;;7449:35;7185:3;7170:19;15846:770:0;6883:607:1;10328:54:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7697:25:1;;;7753:2;7738:18;;7731:34;;;;7781:18;;;7774:34;7685:2;7670:18;10328:54:0;7495:319:1;4950:91:0;4995:13;5028:5;5021:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4950:91;:::o;5817:190::-;5890:4;243:10;5946:31;243:10;5962:7;5971:5;5946:8;:31::i;:::-;5995:4;5988:11;;;5817:190;;;;;:::o;10389:31::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10389:31:0;;-1:-1:-1;10389:31:0;:::o;6015:249::-;6102:4;243:10;6160:37;6176:4;243:10;6191:5;6160:15;:37::i;:::-;6208:26;6218:4;6224:2;6228:5;6208:9;:26::i;:::-;-1:-1:-1;6252:4:0;;6015:249;-1:-1:-1;;;;6015:249:0:o;20508:177::-;20573:18;20584:6;20573:10;:18::i;:::-;20623:6;20602:17;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;20645:32:0;;1735:25:1;;;20658:10:0;;20645:32;;1723:2:1;1708:18;20645:32:0;;;;;;;20508:177;:::o;22513:114::-;22568:7;22595:24;22613:4;22595:9;:24::i;:::-;22588:31;;22513:114;:::o;15009:276::-;-1:-1:-1;;;;;15115:23:0;;15069:7;15115:23;;;:15;:23;;;;;;;;15089:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15153:21;;15149:35;;-1:-1:-1;15183:1:0;;15009:276;-1:-1:-1;;15009:276:0:o;15149:35::-;15197:14;15214:23;15230:6;15214:15;:23::i;:::-;15197:40;;15264:4;:13;;;15255:6;:22;;;;:::i;:::-;15248:29;15009:276;-1:-1:-1;;;;15009:276:0:o;12184:984::-;1058:13;:11;:13::i;:::-;12451:11:::1;::::0;::::1;;12450:12;12442:44;;;::::0;-1:-1:-1;;;12442:44:0;;8801:2:1;12442:44:0::1;::::0;::::1;8783:21:1::0;8840:2;8820:18;;;8813:30;-1:-1:-1;;;8859:18:1;;;8852:49;8918:18;;12442:44:0::1;;;;;;;;;-1:-1:-1::0;;;;;12505:22:0;::::1;12497:50;;;::::0;-1:-1:-1;;;12497:50:0;;9149:2:1;12497:50:0::1;::::0;::::1;9131:21:1::0;9188:2;9168:18;;;9161:30;-1:-1:-1;;;9207:18:1;;;9200:45;9262:18;;12497:50:0::1;8947:339:1::0;12497:50:0::1;-1:-1:-1::0;;;;;12566:18:0;::::1;12558:42;;;::::0;-1:-1:-1;;;12558:42:0;;9493:2:1;12558:42:0::1;::::0;::::1;9475:21:1::0;9532:2;9512:18;;;9505:30;-1:-1:-1;;;9551:18:1;;;9544:41;9602:18;;12558:42:0::1;9291:335:1::0;12558:42:0::1;-1:-1:-1::0;;;;;12619:19:0;::::1;12611:44;;;::::0;-1:-1:-1;;;12611:44:0;;9833:2:1;12611:44:0::1;::::0;::::1;9815:21:1::0;9872:2;9852:18;;;9845:30;-1:-1:-1;;;9891:18:1;;;9884:42;9943:18;;12611:44:0::1;9631:336:1::0;12611:44:0::1;-1:-1:-1::0;;;;;12674:24:0;::::1;12666:54;;;::::0;-1:-1:-1;;;12666:54:0;;10174:2:1;12666:54:0::1;::::0;::::1;10156:21:1::0;10213:2;10193:18;;;10186:30;-1:-1:-1;;;10232:18:1;;;10225:47;10289:18;;12666:54:0::1;9972:341:1::0;12666:54:0::1;-1:-1:-1::0;;;;;12739:24:0;::::1;12731:54;;;::::0;-1:-1:-1;;;12731:54:0;;10520:2:1;12731:54:0::1;::::0;::::1;10502:21:1::0;10559:2;10539:18;;;10532:30;-1:-1:-1;;;10578:18:1;;;10571:47;10635:18;;12731:54:0::1;10318:341:1::0;12731:54:0::1;-1:-1:-1::0;;;;;12804:24:0;::::1;12796:54;;;::::0;-1:-1:-1;;;12796:54:0;;10866:2:1;12796:54:0::1;::::0;::::1;10848:21:1::0;10905:2;10885:18;;;10878:30;-1:-1:-1;;;10924:18:1;;;10917:47;10981:18;;12796:54:0::1;10664:341:1::0;12796:54:0::1;-1:-1:-1::0;;;;;12869:23:0;::::1;12861:52;;;::::0;-1:-1:-1;;;12861:52:0;;11212:2:1;12861:52:0::1;::::0;::::1;11194:21:1::0;11251:2;11231:18;;;11224:30;-1:-1:-1;;;11270:18:1;;;11263:46;11326:18;;12861:52:0::1;11010:340:1::0;12861:52:0::1;12926:13;:24:::0;;-1:-1:-1;;;;;;12926:24:0;;::::1;-1:-1:-1::0;;;;;12926:24:0;;::::1;;::::0;;;12961:9:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;12988:10:::1;:18:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;13017:15:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;13056:15:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;13095:15:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;13134:14:::1;:26:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12184:984::o;19198:151::-;1058:13;:11;:13::i;:::-;19268:8:::1;:31:::0;;-1:-1:-1;;;;;;19268:31:0::1;-1:-1:-1::0;;;;;19268:31:0;::::1;::::0;;::::1;::::0;;;19315:26:::1;::::0;::::1;::::0;-1:-1:-1;;19315:26:0::1;19198:151:::0;:::o;5351:118::-;-1:-1:-1;;;;;5443:18:0;5416:7;5443:18;;;;;;;;;;;;5351:118::o;1368:103::-;1058:13;:11;:13::i;:::-;1433:30:::1;1460:1;1433:18;:30::i;:::-;1368:103::o:0;17031:255::-;1058:13;:11;:13::i;:::-;-1:-1:-1;;;;;17133:21:0;::::1;17125:49;;;::::0;-1:-1:-1;;;17125:49:0;;11557:2:1;17125:49:0::1;::::0;::::1;11539:21:1::0;11596:2;11576:18;;;11569:30;-1:-1:-1;;;11615:18:1;;;11608:45;11670:18;;17125:49:0::1;11355:339:1::0;17125:49:0::1;-1:-1:-1::0;;;;;17185:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:39;;-1:-1:-1;;17185:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17240:38;;1144:41:1;;;17240:38:0::1;::::0;1117:18:1;17240:38:0::1;;;;;;;;17031:255:::0;;:::o;22822:803::-;22877:18;22906:22;22939:26;22976:20;23007:27;23045:25;23081:27;23119:23;23153:19;23183:18;9506:22;23269:13;5323:12;;;5244:99;23269:13;23313:24;23331:4;23313:9;:24::i;:::-;5323:12;;23297:40;;;;:::i;:::-;23352:17;;23384:24;23402:4;23384:9;:24::i;:::-;23423:13;;-1:-1:-1;;;;;23423:13:0;:58;;23480:1;23423:58;;;23463:13;;23453:24;;-1:-1:-1;;;;;23463:13:0;23453:9;:24::i;:::-;23496:23;;23534:19;;23568:11;;;;;;;;;;;23594:12;;;;;;;;;;;23220:397;;;;;;;;;;;;;;;;;;;;22822:803;;;;;;;;;;:::o;21170:96::-;21218:7;21245:13;5323:12;;;5244:99;21688:162;21763:13;;21739:7;;-1:-1:-1;;;;;21763:13:0;21759:41;;-1:-1:-1;21799:1:0;;21688:162::o;21759:41::-;21828:13;;21818:24;;-1:-1:-1;;;;;21828:13:0;21818:9;:24::i;20693:208::-;20779:31;20794:7;20803:6;20779:14;:31::i;:::-;20842:6;20821:17;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;20864:29:0;;1735:25:1;;;-1:-1:-1;;;;;20864:29:0;;;;;1723:2:1;1708:18;20864:29:0;1589:177:1;21498:127:0;21550:7;21593:24;21611:4;21593:9;:24::i;:::-;5323:12;;21577:40;;;;:::i;5049:95::-;5096:13;5129:7;5122:14;;;;;:::i;13176:873::-;1058:13;:11;:13::i;:::-;13243:11:::1;::::0;::::1;;13242:12;13234:44;;;::::0;-1:-1:-1;;;13234:44:0;;8801:2:1;13234:44:0::1;::::0;::::1;8783:21:1::0;8840:2;8820:18;;;8813:30;-1:-1:-1;;;8859:18:1;;;8852:49;8918:18;;13234:44:0::1;8599:343:1::0;13234:44:0::1;13297:13;::::0;-1:-1:-1;;;;;13297:13:0::1;13289:55;;;::::0;-1:-1:-1;;;13289:55:0;;11901:2:1;13289:55:0::1;::::0;::::1;11883:21:1::0;11940:2;11920:18;;;11913:30;-1:-1:-1;;;11959:18:1;;;11952:45;12014:18;;13289:55:0::1;11699:339:1::0;13289:55:0::1;13357:11;:18:::0;;-1:-1:-1;;13357:18:0::1;13371:4;13357:18;::::0;;13478:13:::1;::::0;13409:15:::1;::::0;13472:34:::1;::::0;-1:-1:-1;;;;;13478:13:0::1;9580:20;13472:5;:34::i;:::-;13523:9;::::0;13517:31:::1;::::0;-1:-1:-1;;;;;13523:9:0::1;9659:20;13517:5;:31::i;:::-;13565:15;::::0;13559:33:::1;::::0;-1:-1:-1;;;;;13565:15:0::1;9888:19;13559:5;:33::i;:::-;13609:14;::::0;13603:31:::1;::::0;-1:-1:-1;;;;;13609:14:0::1;10042:19;13603:5;:31::i;:::-;13706:61;13720:4;9965:20;13727:27;9811:19;9739:20;13727:27;:::i;:::-;:39;;;;:::i;:::-;13706:5;:61::i;:::-;13830:10;::::0;13816:56:::1;::::0;-1:-1:-1;;;;;13830:10:0::1;9739:20;13859:12:::0;13816:13:::1;:56::i;:::-;13897:15;::::0;13883:55:::1;::::0;-1:-1:-1;;;;;13897:15:0::1;9811:19;13925:12:::0;13883:13:::1;:55::i;:::-;13963:15;::::0;13949:55:::1;::::0;-1:-1:-1;;;;;13963:15:0::1;9965:20;13991:12:::0;13949:13:::1;:55::i;:::-;14022:19;::::0;::::1;::::0;;;::::1;13223:826;13176:873::o:0;5477:182::-;5546:4;243:10;5602:27;243:10;5619:2;5623:5;5602:9;:27::i;17435:582::-;17530:12;;17504:4;;17530:12;;;;;17529:13;17521:39;;;;-1:-1:-1;;;17521:39:0;;12245:2:1;17521:39:0;;;12227:21:1;12284:2;12264:18;;;12257:30;-1:-1:-1;;;12303:18:1;;;12296:43;12356:18;;17521:39:0;12043:337:1;17521:39:0;17597:10;17579:29;;;;:17;:29;;;;;;;;17571:64;;;;-1:-1:-1;;;17571:64:0;;12587:2:1;17571:64:0;;;12569:21:1;12626:2;12606:18;;;12599:30;-1:-1:-1;;;12645:18:1;;;12638:52;12707:18;;17571:64:0;12385:346:1;17571:64:0;-1:-1:-1;;;;;17654:16:0;;17646:46;;;;-1:-1:-1;;;17646:46:0;;12938:2:1;17646:46:0;;;12920:21:1;12977:2;12957:18;;;12950:30;-1:-1:-1;;;12996:18:1;;;12989:47;13053:18;;17646:46:0;12736:341:1;17646:46:0;17720:1;17711:6;:10;17703:41;;;;-1:-1:-1;;;17703:41:0;;13284:2:1;17703:41:0;;;13266:21:1;13323:2;13303:18;;;13296:30;-1:-1:-1;;;13342:18:1;;;13335:48;13400:18;;17703:41:0;13082:342:1;17703:41:0;17773:13;;17791:6;;17763:24;;-1:-1:-1;;;;;17773:13:0;17763:9;:24::i;:::-;:34;;17755:67;;;;-1:-1:-1;;;17755:67:0;;13631:2:1;17755:67:0;;;13613:21:1;13670:2;13650:18;;;13643:30;-1:-1:-1;;;13689:18:1;;;13682:50;13749:18;;17755:67:0;13429:344:1;17755:67:0;17853:13;;17843:36;;-1:-1:-1;;;;;17853:13:0;17868:2;17872:6;17843:9;:36::i;:::-;17917:6;17890:23;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;17949:38:0;;1735:25:1;;;-1:-1:-1;;;;;17949:38:0;;;17964:10;;17949:38;;1723:2:1;1708:18;17949:38:0;;;;;;;-1:-1:-1;18005:4:0;17435:582;;;;:::o;19722:728::-;19801:8;;-1:-1:-1;;;;;19801:8:0;19785:61;;;;-1:-1:-1;;;19785:61:0;;13980:2:1;19785:61:0;;;13962:21:1;14019:2;13999:18;;;13992:30;-1:-1:-1;;;14038:18:1;;;14031:47;14095:18;;19785:61:0;13778:341:1;19785:61:0;19880:14;;19865:11;:29;;19857:56;;;;-1:-1:-1;;;19857:56:0;;14326:2:1;19857:56:0;;;14308:21:1;14365:2;14345:18;;;14338:30;-1:-1:-1;;;14384:18:1;;;14377:44;14438:18;;19857:56:0;14124:338:1;19857:56:0;19957:11;19932:21;19942:10;19932:9;:21::i;:::-;:36;;19924:67;;;;-1:-1:-1;;;19924:67:0;;14669:2:1;19924:67:0;;;14651:21:1;14708:2;14688:18;;;14681:30;-1:-1:-1;;;14727:18:1;;;14720:48;14785:18;;19924:67:0;14467:342:1;19924:67:0;20012:17;20046:14;;20032:11;:28;;;;:::i;:::-;20012:48;;20091:1;20079:9;:13;20071:41;;;;-1:-1:-1;;;20071:41:0;;15238:2:1;20071:41:0;;;15220:21:1;15277:2;15257:18;;;15250:30;-1:-1:-1;;;15296:18:1;;;15289:45;15351:18;;20071:41:0;15036:339:1;20071:41:0;20158:30;20164:10;20176:11;20158:5;:30::i;:::-;20220:11;20199:17;;:32;;;;;;;:::i;:::-;;;;;;;;20265:11;20242:19;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;20321:8:0;;:45;;-1:-1:-1;;;20321:45:0;;20344:10;20321:45;;;15554:51:1;15621:18;;;15614:34;;;-1:-1:-1;;;;;20321:8:0;;;;:22;;15527:18:1;;20321:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20392:50:0;;;15833:25:1;;;15889:2;15874:18;;15867:34;;;20407:10:0;;-1:-1:-1;20392:50:0;;-1:-1:-1;15806:18:1;20392:50:0;15659:248:1;22121:182:0;22178:7;9580:20;22248:23;;22274:5;22248:31;;;;:::i;:::-;22247:48;;;;:::i;17294:133::-;1058:13;:11;:13::i;:::-;17362:12:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;17362:21:0;;::::1;;::::0;;17399:20:::1;::::0;::::1;::::0;::::1;::::0;17377:6;1169:14:1;1162:22;1144:41;;1132:2;1117:18;;1004:187;17399:20:0::1;;;;;;;;17294:133:::0;:::o;14602:335::-;14662:18;14683:21;14697:6;14683:13;:21::i;:::-;14662:42;;14736:1;14723:10;:14;14715:47;;;;-1:-1:-1;;;14715:47:0;;16287:2:1;14715:47:0;;;16269:21:1;16326:2;16306:18;;;16299:30;-1:-1:-1;;;16345:18:1;;;16338:50;16405:18;;14715:47:0;16085:344:1;14715:47:0;-1:-1:-1;;;;;14775:23:0;;;;;;:15;:23;;;;;:32;;:46;;14811:10;;14775:23;:46;;14811:10;;14775:46;:::i;:::-;;;;-1:-1:-1;14832:44:0;;-1:-1:-1;14850:4:0;14857:6;14865:10;14832:9;:44::i;:::-;14910:6;-1:-1:-1;;;;;14894:35:0;;14918:10;14894:35;;;;1735:25:1;;1723:2;1708:18;;1589:177;15354:426:0;-1:-1:-1;;;;;15462:23:0;;15416:7;15462:23;;;:15;:23;;;;;;;;15436:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15500:21;;15496:35;;-1:-1:-1;15530:1:0;;15354:426;-1:-1:-1;;15354:426:0:o;15496:35::-;15544:15;15580:4;:14;;;15562:15;:32;;;;:::i;:::-;15544:50;;10171:8;15619:7;:27;15615:83;;-1:-1:-1;15670:16:0;;15354:426;-1:-1:-1;;15354:426:0:o;15615:83::-;15726:16;;10171:8;;15726:26;;15745:7;;15726:26;:::i;:::-;15725:47;;;;:::i;18103:1036::-;18260:12;;18234:4;;18260:12;;;;;18259:13;18251:39;;;;-1:-1:-1;;;18251:39:0;;12245:2:1;18251:39:0;;;12227:21:1;12284:2;12264:18;;;12257:30;-1:-1:-1;;;12303:18:1;;;12296:43;12356:18;;18251:39:0;12043:337:1;18251:39:0;18327:10;18309:29;;;;:17;:29;;;;;;;;18301:64;;;;-1:-1:-1;;;18301:64:0;;12587:2:1;18301:64:0;;;12569:21:1;12626:2;12606:18;;;12599:30;-1:-1:-1;;;12645:18:1;;;12638:52;12707:18;;18301:64:0;12385:346:1;18301:64:0;18384:35;;;18376:63;;;;-1:-1:-1;;;18376:63:0;;16636:2:1;18376:63:0;;;16618:21:1;16675:2;16655:18;;;16648:30;-1:-1:-1;;;16694:18:1;;;16687:45;16749:18;;18376:63:0;16434:339:1;18376:63:0;18479:3;18458:24;;;18450:56;;;;-1:-1:-1;;;18450:56:0;;16980:2:1;18450:56:0;;;16962:21:1;17019:2;16999:18;;;16992:30;-1:-1:-1;;;17038:18:1;;;17031:49;17097:18;;18450:56:0;16778:343:1;18450:56:0;18527:19;18566:9;18561:97;18581:18;;;18561:97;;;18636:7;;18644:1;18636:10;;;;;;;:::i;:::-;;;;;;;18621:25;;;;;:::i;:::-;;-1:-1:-1;18601:3:0;;;;:::i;:::-;;;;18561:97;;;-1:-1:-1;18686:13:0;;18704:11;;18676:24;;-1:-1:-1;;;;;18686:13:0;18676:9;:24::i;:::-;:39;;18668:72;;;;-1:-1:-1;;;18668:72:0;;13631:2:1;18668:72:0;;;13613:21:1;13670:2;13650:18;;;13643:30;-1:-1:-1;;;13689:18:1;;;13682:50;13749:18;;18668:72:0;13429:344:1;18668:72:0;18766:9;18761:211;18781:21;;;18761:211;;;18853:1;18828:10;;18839:1;18828:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18828:27:0;;;:45;;;;;18872:1;18859:7;;18867:1;18859:10;;;;;;;:::i;:::-;;;;;;;:14;18828:45;18824:137;;;18904:13;;18894:51;;-1:-1:-1;;;;;18904:13:0;18919:10;;18930:1;18919:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18934:7;;18942:1;18934:10;;;;;;;:::i;:::-;;;;;;;18894:9;:51::i;:::-;18804:3;;;;:::i;:::-;;;;18761:211;;;;19019:11;18992:23;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;19046:63:0;;;15833:25:1;;;15889:2;15874:18;;15867:34;;;19066:10:0;;19046:63;;15806:18:1;19046:63:0;;;;;;;-1:-1:-1;19127:4:0;;18103:1036;-1:-1:-1;;;;;18103:1036:0:o;16859:110::-;16911:16;16947:14;16940:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16940:21:0;;;;;;;;;;;;;;;;;;;;;;16859:110;:::o;1479:220::-;1058:13;:11;:13::i;:::-;-1:-1:-1;;;;;1564:22:0;::::1;1560:93;;1610:31;::::0;-1:-1:-1;;;1610:31:0;;1638:1:::1;1610:31;::::0;::::1;1527:51:1::0;1500:18;;1610:31:0::1;1381:203:1::0;1560:93:0::1;1663:28;1682:8;1663:18;:28::i;:::-;1479:220:::0;:::o;19357:255::-;1058:13;:11;:13::i;:::-;19449:1:::1;19439:7;:11;19431:40;;;::::0;-1:-1:-1;;;19431:40:0;;17600:2:1;19431:40:0::1;::::0;::::1;17582:21:1::0;17639:2;17619:18;;;17612:30;-1:-1:-1;;;17658:18:1;;;17651:46;17714:18;;19431:40:0::1;17398:340:1::0;19431:40:0::1;19500:14;::::0;;19525:24;;;;19565:39:::1;::::0;;15833:25:1;;;15889:2;15874:18;;15867:34;;;19565:39:0::1;::::0;15806:18:1;19565:39:0::1;;;;;;;19420:192;19357:255:::0;:::o;15846:770::-;-1:-1:-1;;;;;16161:23:0;;15919:19;16161:23;;;:15;:23;;;;;;;;16135:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15919:19;;;;;;;;;;;;;16212:23;16177:6;16212:15;:23::i;:::-;16195:40;;16246:19;16277:4;:13;;;16268:6;:22;;;;:::i;:::-;16333:16;;16364:13;;;;16246:44;;-1:-1:-1;16333:16:0;16246:44;16418:25;16437:6;16333:16;16418:25;:::i;:::-;16458:14;;;;16487:33;10171:8;16458:14;16487:33;:::i;:::-;16535:16;;:62;;16596:1;16535:62;;;16577:16;;16559:14;:6;16568:5;16559:14;:::i;:::-;16558:35;;;;:::i;:::-;16311:297;;;;;;;;;;;;;;;;;15846:770;;;;;;;;;:::o;7766:130::-;7851:37;7860:5;7867:7;7876:5;7883:4;7851:8;:37::i;:::-;7766:130;;;:::o;8355:486::-;-1:-1:-1;;;;;5774:18:0;;;8455:24;5774:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;8522:36:0;;8518:316;;;8598:5;8579:16;:24;8575:132;;;8631:60;;-1:-1:-1;;;8631:60:0;;-1:-1:-1;;;;;17963:32:1;;8631:60:0;;;17945:51:1;18012:18;;;18005:34;;;18055:18;;;18048:34;;;17918:18;;8631:60:0;17743:345:1;8575:132:0;8750:57;8759:5;8766:7;8794:5;8775:16;:24;8801:5;8750:8;:57::i;:::-;8444:397;8355:486;;;:::o;6272:308::-;-1:-1:-1;;;;;6356:18:0;;6352:88;;6398:30;;-1:-1:-1;;;6398:30:0;;6425:1;6398:30;;;1527:51:1;1500:18;;6398:30:0;1381:203:1;6352:88:0;-1:-1:-1;;;;;6454:16:0;;6450:88;;6494:32;;-1:-1:-1;;;6494:32:0;;6523:1;6494:32;;;1527:51:1;1500:18;;6494:32:0;1381:203:1;6450:88:0;6548:24;6556:4;6562:2;6566:5;6548:7;:24::i;8997:89::-;9052:26;243:10;9072:5;9052;:26::i;1194:166::-;1172:6;;-1:-1:-1;;;;;1172:6:0;243:10;1254:23;1250:103;;1301:40;;-1:-1:-1;;;1301:40:0;;243:10;1301:40;;;1527:51:1;1500:18;;1301:40:0;1381:203:1;1707:191:0;1800:6;;;-1:-1:-1;;;;;1817:17:0;;;-1:-1:-1;;;;;;1817:17:0;;;;;;;1850:40;;1800:6;;;1817:17;1800:6;;1850:40;;1781:16;;1850:40;1770:128;1707:191;:::o;9094:161::-;9170:45;9186:7;243:10;9209:5;9170:15;:45::i;:::-;9226:21;9232:7;9241:5;9226;:21::i;:::-;9094:161;;:::o;7326:213::-;-1:-1:-1;;;;;7397:21:0;;7393:93;;7442:32;;-1:-1:-1;;;7442:32:0;;7471:1;7442:32;;;1527:51:1;1500:18;;7442:32:0;1381:203:1;7393:93:0;7496:35;7512:1;7516:7;7525:5;7496:7;:35::i;14057:361::-;14177:119;;;;;;;;;;;-1:-1:-1;14177:119:0;;;;;;;;;;;;;-1:-1:-1;;;;;14151:23:0;;;;;:15;:23;;;;;;:145;;;;;;;;;;;;;;;;;;;;;;;14307:14;:27;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14307:27:0;;;;;14350:60;14217:6;14381:28;10171:8;14275:9;14381:28;:::i;:::-;14350:60;;;15833:25:1;;;15889:2;15874:18;;15867:34;;;;15806:18;14350:60:0;;;;;;;14057:361;;;:::o;7547:211::-;-1:-1:-1;;;;;7618:21:0;;7614:91;;7663:30;;-1:-1:-1;;;7663:30:0;;7690:1;7663:30;;;1527:51:1;1500:18;;7663:30:0;1381:203:1;7614:91:0;7715:35;7723:7;7740:1;7744:5;7715:7;:35::i;7904:443::-;-1:-1:-1;;;;;8017:19:0;;8013:91;;8060:32;;-1:-1:-1;;;8060:32:0;;8089:1;8060:32;;;1527:51:1;1500:18;;8060:32:0;1381:203:1;8013:91:0;-1:-1:-1;;;;;8118:21:0;;8114:92;;8163:31;;-1:-1:-1;;;8163:31:0;;8191:1;8163:31;;;1527:51:1;1500:18;;8163:31:0;1381:203:1;8114:92:0;-1:-1:-1;;;;;8216:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;8262:78;;;;8313:7;-1:-1:-1;;;;;8297:31:0;8306:5;-1:-1:-1;;;;;8297:31:0;;8322:5;8297:31;;;;1735:25:1;;1723:2;1708:18;;1589:177;8297:31:0;;;;;;;;7904:443;;;;:::o;6588:730::-;-1:-1:-1;;;;;6678:18:0;;6674:369;;6729:5;6713:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6674:369:0;;-1:-1:-1;6674:369:0;;-1:-1:-1;;;;;6789:15:0;;6767:19;6789:15;;;;;;;;;;;6823:19;;;6819:117;;;6870:50;;-1:-1:-1;;;6870:50:0;;-1:-1:-1;;;;;17963:32:1;;6870:50:0;;;17945:51:1;18012:18;;;18005:34;;;18055:18;;;18048:34;;;17918:18;;6870:50:0;17743:345:1;6819:117:0;-1:-1:-1;;;;;6979:15:0;;:9;:15;;;;;;;;;;6997:19;;;;6979:37;;6674:369;-1:-1:-1;;;;;7059:16:0;;7055:213;;7121:12;:21;;;;;;;7055:213;;;-1:-1:-1;;;;;7219:13:0;;:9;:13;;;;;;;;;;:22;;;;;;7055:213;7300:2;-1:-1:-1;;;;;7285:25:0;7294:4;-1:-1:-1;;;;;7285:25:0;;7304:5;7285:25;;;;1735::1;;1723:2;1708:18;;1589:177;7285:25:0;;;;;;;;6588:730;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1196:180::-;1255:6;1308:2;1296:9;1287:7;1283:23;1279:32;1276:52;;;1324:1;1321;1314:12;1276:52;-1:-1:-1;1347:23:1;;1196:180;-1:-1:-1;1196:180:1:o;1771:328::-;1848:6;1856;1864;1917:2;1905:9;1896:7;1892:23;1888:32;1885:52;;;1933:1;1930;1923:12;1885:52;1956:29;1975:9;1956:29;:::i;:::-;1946:39;;2004:38;2038:2;2027:9;2023:18;2004:38;:::i;:::-;1994:48;;2089:2;2078:9;2074:18;2061:32;2051:42;;1771:328;;;;;:::o;2293:186::-;2352:6;2405:2;2393:9;2384:7;2380:23;2376:32;2373:52;;;2421:1;2418;2411:12;2373:52;2444:29;2463:9;2444:29;:::i;:::-;2434:39;2293:186;-1:-1:-1;;;2293:186:1:o;2484:634::-;2597:6;2605;2613;2621;2629;2637;2645;2698:3;2686:9;2677:7;2673:23;2669:33;2666:53;;;2715:1;2712;2705:12;2666:53;2738:29;2757:9;2738:29;:::i;:::-;2728:39;;2786:38;2820:2;2809:9;2805:18;2786:38;:::i;:::-;2776:48;;2843:38;2877:2;2866:9;2862:18;2843:38;:::i;:::-;2833:48;;2900:38;2934:2;2923:9;2919:18;2900:38;:::i;:::-;2890:48;;2957:39;2991:3;2980:9;2976:19;2957:39;:::i;:::-;2947:49;;3015:39;3049:3;3038:9;3034:19;3015:39;:::i;:::-;3005:49;;3073:39;3107:3;3096:9;3092:19;3073:39;:::i;:::-;3063:49;;2484:634;;;;;;;;;;:::o;3123:160::-;3188:20;;3244:13;;3237:21;3227:32;;3217:60;;3273:1;3270;3263:12;3288:254;3353:6;3361;3414:2;3402:9;3393:7;3389:23;3385:32;3382:52;;;3430:1;3427;3420:12;3382:52;3453:29;3472:9;3453:29;:::i;:::-;3443:39;;3501:35;3532:2;3521:9;3517:18;3501:35;:::i;:::-;3491:45;;3288:254;;;;;:::o;4620:180::-;4676:6;4729:2;4717:9;4708:7;4704:23;4700:32;4697:52;;;4745:1;4742;4735:12;4697:52;4768:26;4784:9;4768:26;:::i;4805:367::-;4868:8;4878:6;4932:3;4925:4;4917:6;4913:17;4909:27;4899:55;;4950:1;4947;4940:12;4899:55;-1:-1:-1;4973:20:1;;5016:18;5005:30;;5002:50;;;5048:1;5045;5038:12;5002:50;5085:4;5077:6;5073:17;5061:29;;5145:3;5138:4;5128:6;5125:1;5121:14;5113:6;5109:27;5105:38;5102:47;5099:67;;;5162:1;5159;5152:12;5099:67;4805:367;;;;;:::o;5177:773::-;5299:6;5307;5315;5323;5376:2;5364:9;5355:7;5351:23;5347:32;5344:52;;;5392:1;5389;5382:12;5344:52;5432:9;5419:23;5461:18;5502:2;5494:6;5491:14;5488:34;;;5518:1;5515;5508:12;5488:34;5557:70;5619:7;5610:6;5599:9;5595:22;5557:70;:::i;:::-;5646:8;;-1:-1:-1;5531:96:1;-1:-1:-1;5734:2:1;5719:18;;5706:32;;-1:-1:-1;5750:16:1;;;5747:36;;;5779:1;5776;5769:12;5747:36;;5818:72;5882:7;5871:8;5860:9;5856:24;5818:72;:::i;:::-;5177:773;;;;-1:-1:-1;5909:8:1;-1:-1:-1;;;;5177:773:1:o;5955:260::-;6023:6;6031;6084:2;6072:9;6063:7;6059:23;6055:32;6052:52;;;6100:1;6097;6090:12;6052:52;6123:29;6142:9;6123:29;:::i;:::-;6113:39;;6171:38;6205:2;6194:9;6190:18;6171:38;:::i;6220:658::-;6391:2;6443:21;;;6513:13;;6416:18;;;6535:22;;;6362:4;;6391:2;6614:15;;;;6588:2;6573:18;;;6362:4;6657:195;6671:6;6668:1;6665:13;6657:195;;;6736:13;;-1:-1:-1;;;;;6732:39:1;6720:52;;6827:15;;;;6792:12;;;;6768:1;6686:9;6657:195;;;-1:-1:-1;6869:3:1;;6220:658;-1:-1:-1;;;;;;6220:658:1:o;7819:380::-;7898:1;7894:12;;;;7941;;;7962:61;;8016:4;8008:6;8004:17;7994:27;;7962:61;8069:2;8061:6;8058:14;8038:18;8035:38;8032:161;;8115:10;8110:3;8106:20;8103:1;8096:31;8150:4;8147:1;8140:15;8178:4;8175:1;8168:15;8032:161;;7819:380;;;:::o;8204:127::-;8265:10;8260:3;8256:20;8253:1;8246:31;8296:4;8293:1;8286:15;8320:4;8317:1;8310:15;8336:125;8401:9;;;8422:10;;;8419:36;;;8435:18;;:::i;8466:128::-;8533:9;;;8554:11;;;8551:37;;;8568:18;;:::i;14814:217::-;14854:1;14880;14870:132;;14924:10;14919:3;14915:20;14912:1;14905:31;14959:4;14956:1;14949:15;14987:4;14984:1;14977:15;14870:132;-1:-1:-1;15016:9:1;;14814:217::o;15912:168::-;15985:9;;;16016;;16033:15;;;16027:22;;16013:37;16003:71;;16054:18;;:::i;17126:127::-;17187:10;17182:3;17178:20;17175:1;17168:31;17218:4;17215:1;17208:15;17242:4;17239:1;17232:15;17258:135;17297:3;17318:17;;;17315:43;;17338:18;;:::i;:::-;-1:-1:-1;17385:1:1;17374:13;;17258:135::o

Swarm Source

ipfs://af37af05c8404a00cbc4c3d4febaad6b7faa41dd431f1d34a6468e25b36574cd

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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