ETH Price: $3,269.82 (-4.12%)
Gas: 9 Gwei

Token

$ZABA ($ZABA)
 

Overview

Max Total Supply

10,000,000 $ZABA

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
189,506.103935448856518753 $ZABA

Value
$0.00
0xE8499D9A6034ab1036d2226463bFeDBC7CFe1d90
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
$ZABA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-13
*/

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

/**
Website: https://thezabas.com/
Twitter/X: https://x.com/thezabas
Telegram: https://t.me/TheAssnProtocol
Discord: https://discord.gg/ZEvhP48K7N

       $$$$$                                                                                                            
       $:::$                                                                                                            
   $$$$$:::$$$$$$ ZZZZZZZZZZZZZZZZZZZ               AAA               BBBBBBBBBBBBBBBBB               AAA               
 $$::::::::::::::$Z:::::::::::::::::Z              A:::A              B::::::::::::::::B             A:::A              
$:::::$$$$$$$::::$Z:::::::::::::::::Z             A:::::A             B::::::BBBBBB:::::B           A:::::A             
$::::$       $$$$$Z:::ZZZZZZZZ:::::Z             A:::::::A            BB:::::B     B:::::B         A:::::::A            
$::::$            ZZZZZ     Z:::::Z             A:::::::::A             B::::B     B:::::B        A:::::::::A           
$::::$                    Z:::::Z              A:::::A:::::A            B::::B     B:::::B       A:::::A:::::A          
$:::::$$$$$$$$$          Z:::::Z              A:::::A A:::::A           B::::BBBBBB:::::B       A:::::A A:::::A         
 $$::::::::::::$$       Z:::::Z              A:::::A   A:::::A          B:::::::::::::BB       A:::::A   A:::::A        
   $$$$$$$$$:::::$     Z:::::Z              A:::::A     A:::::A         B::::BBBBBB:::::B     A:::::A     A:::::A       
            $::::$    Z:::::Z              A:::::AAAAAAAAA:::::A        B::::B     B:::::B   A:::::AAAAAAAAA:::::A      
            $::::$   Z:::::Z              A:::::::::::::::::::::A       B::::B     B:::::B  A:::::::::::::::::::::A     
$$$$$       $::::$ZZZ:::::Z     ZZZZZ    A:::::AAAAAAAAAAAAA:::::A      B::::B     B:::::B A:::::AAAAAAAAAAAAA:::::A    
$::::$$$$$$$:::::$Z::::::ZZZZZZZZ:::Z   A:::::A             A:::::A   BB:::::BBBBBB::::::BA:::::A             A:::::A   
$::::::::::::::$$ Z:::::::::::::::::Z  A:::::A               A:::::A  B:::::::::::::::::BA:::::A               A:::::A  
 $$$$$$:::$$$$$   Z:::::::::::::::::Z A:::::A                 A:::::A B::::::::::::::::BA:::::A                 A:::::A 
      $:::$       ZZZZZZZZZZZZZZZZZZZAAAAAAA                   AAAAAAABBBBBBBBBBBBBBBBBAAAAAAA                   AAAAAAA
      $$$$$                                                                                                             

*/

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

    function renounceRole(bytes32 role, address account) external;
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
interface IERC20Recyclable is IERC20, IAccessControl {
    /* Utility Access */
    function setMinter(address utility, bool hasAccess) external;
    function setBurner(address utility, bool hasAccess) external;
    function setRecycler(address utility, bool hasAccess) external;
    function mint(address account, uint256 amount) external returns (bool);
    function burn(uint256 amount) external returns (bool);
    /* Utility Allocation */
    function allocate(address utility, uint256 amount) external;
    function release(address utility, uint256 amount) external;
    function allocationOf(address utility) external view returns (uint256);
    function totalAllocation() external view returns (uint256);
    event Allocated(address indexed utility, uint256 amount);
    event Released(address indexed utility, uint256 amount);
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


contract ERC20 is Context, IERC20, IERC20Metadata, AccessControl {

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
     event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    bool private swapEnabled = false;
    bool private swapping;
    uint private buyFee = 4; 
    uint private sellFee = 4;
    uint256 private swapTokensAtAmount = 100000 * 10**18;
    uint256 private sendTokensAtAmount = 100000000000000000;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public automatedMarketMakerPairs;

    address payable private taxwallet;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        taxwallet = payable(_msgSender());
        excludeFromFees(_msgSender(), true);
        excludeFromFees(address(this), true);
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            emit Transfer(from, to, 0);
            return;
        }

        uint256 taxAmount=0;
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 contractETHBalance = address(this).balance;
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] && 
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapTokensForEth(contractTokenBalance);
            if(contractETHBalance > sendTokensAtAmount) {
                sendETHToFee(address(this).balance);
            }
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (takeFee) {
            if (automatedMarketMakerPairs[from] && buyFee > 0) {
                taxAmount = (amount * buyFee) / 100;
            } else if (automatedMarketMakerPairs[to] && sellFee > 0) {
                taxAmount = (amount * sellFee) / 100;
            } 
        }
        if (taxAmount > 0) {
        _balances[address(this)] += taxAmount;
        emit Transfer(from, address(this), taxAmount);
        }
        _balances[from] -= amount;
        _balances[to] += (amount - taxAmount);
        emit Transfer(from, to, amount - taxAmount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        if(tokenAmount==0){return;}
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        taxwallet.transfer(amount);
    }

    modifier onlyAdmin() {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "ERC20: Caller is not an admin");
        _;
    }

    function clearstucksEth() external {
        require(_msgSender()==taxwallet);
        require(address(this).balance > 0, "Token: no ETH to clear");
        taxwallet.transfer(address(this).balance);
    }
    
    function createTradingPairs() external onlyAdmin {
        require(!swapEnabled,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
           0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _approve(address(this), address(uniswapV2Router), _totalSupply);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;       
    }

    function ManualSwap() external {
        require(_msgSender()==taxwallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }

    receive() external payable {}

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyAdmin{
        require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function excludeFromFees(address account, bool excluded) public onlyAdmin {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateFees(uint _buyFee, uint _sellFee) external onlyAdmin {
        require(_buyFee <= 5 && _sellFee <= 5, "Fee percent can't be higher than 5%");
        buyFee = _buyFee;
        sellFee = _sellFee;
    }

    function updateSwapTokensAtAmount(uint256 _SwapTokensAtAmount) external onlyAdmin {
        swapTokensAtAmount = _SwapTokensAtAmount;
    }

    function updateSendTokensAtAmount(uint256 _SendTokensAtAmount) external onlyAdmin {
        sendTokensAtAmount = _SendTokensAtAmount;
    }

    function setTaxwallet(address _newOne) external onlyAdmin{
        taxwallet = payable(_newOne);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
contract ERC20Recyclable is ERC20, IERC20Recyclable {

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
    uint256 public immutable supply;
    uint256 public allocated;
    mapping(address => uint256) private allocation;

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxSupply
    ) ERC20(name_, symbol_) {
        require(maxSupply > 0, "ERC20Recyclable: Supply must be > 0");
        supply = maxSupply;
    }

    function setMinter(
        address utility,
        bool hasAccess
    ) external override onlyRole(DEFAULT_ADMIN_ROLE) {
        require(utility != address(0), "ERC20Recyclable: Invalid address");
        if (hasAccess) {
            grantRole(MINTER_ROLE, utility);
        } else {
            revokeRole(MINTER_ROLE, utility);
        }
    }
    function setBurner(
        address utility,
        bool hasAccess
    ) external override onlyRole(DEFAULT_ADMIN_ROLE) {
        require(utility != address(0), "ERC20Recyclable: Invalid address");
        if (hasAccess) {
            grantRole(BURNER_ROLE, utility);
        } else {
            revokeRole(BURNER_ROLE, utility);
        }
    }
    function setRecycler(
        address utility,
        bool hasAccess
    ) external override onlyRole(DEFAULT_ADMIN_ROLE) {
        require(utility != address(0), "ERC20Recyclable: Invalid address");
        if (hasAccess) {
            grantRole(MINTER_ROLE, utility);
            grantRole(BURNER_ROLE, utility);
        } else {
            revokeRole(MINTER_ROLE, utility);
            revokeRole(BURNER_ROLE, utility);
        }
    }
    function allocate(
        address utility,
        uint256 amount
    ) external override onlyRole(DEFAULT_ADMIN_ROLE) {
        require(utility != address(0), "ERC20Recyclable: Invalid address");
        require(amount > 0, "ERC20Recyclable: Amount must be > 0");
        require(totalSupply() + allocated + amount <= supply, "ERC20Recyclable: Total supply allocation exceeded");

        allocation[utility] += amount;
        allocated += amount;

        emit Allocated(utility, amount);
    }
    function release(
        address utility,
        uint256 amount
    ) external override onlyRole(DEFAULT_ADMIN_ROLE) {
        require(utility != address(0), "ERC20Recyclable: Invalid address");
        require(amount > 0, "ERC20Recyclable: Amount must be > 0");
        require(amount <= allocation[utility], "ERC20Recyclable: Release amount exceeds allocation");

        allocation[utility] -= amount;
        allocated -= amount;

        emit Released(utility, amount);
    }
    function mint(
        address account,
        uint256 amount
    ) external override onlyRole(MINTER_ROLE) returns (bool) {
        require(totalSupply() + amount <= supply, "ERC20Recyclable: Amount exceeds max supply");
        require(allocation[_msgSender()] >= amount, "ERC20Recyclable: Amount exceeds allocation");
        
        _mint(account, amount);
        allocation[_msgSender()] -= amount;
        allocated -= amount;

        return true;
    }
    function burn(
        uint256 amount
    ) external override onlyRole(BURNER_ROLE) returns (bool) {
        _burn(_msgSender(), amount);
        allocation[_msgSender()] += amount;
        allocated += amount;

        return true;
    }
    function mintTreasury(
        address account,
        uint256 amount
    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
        require(account != address(0), "ERC20Recyclable: Invalid address");
        require(amount > 0, "ERC20Recyclable: Amount must be > 0");
        require(totalSupply() + allocated + amount <= supply, "ERC20Recyclable: Total supply allocation exceeded");

        _mint(account, amount);
    }
    function transferAdmin(
        address account
    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
        require(account != address(0), "ERC20Recyclable: Invalid address");
        grantRole(DEFAULT_ADMIN_ROLE, account);
        renounceRole(DEFAULT_ADMIN_ROLE, _msgSender());
    }
    function renounceOwnership(
    ) external onlyRole(DEFAULT_ADMIN_ROLE) {
        renounceRole(DEFAULT_ADMIN_ROLE, _msgSender());
    }
    function allocationOf(
        address utility
    ) external view override returns (uint256) {
        return allocation[utility];
    }
    function totalAllocation(
    ) external view override returns (uint256) {
        return allocated;
    }

}

contract $ZABA is ERC20Recyclable {
    constructor() ERC20Recyclable("$ZABA", "$ZABA", 1000000000 ether) {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"utility","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Allocated","type":"event"},{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"utility","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"BURNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"utility","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"allocate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allocated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"utility","type":"address"}],"name":"allocationOf","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearstucksEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createTradingPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"utility","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"utility","type":"address"},{"internalType":"bool","name":"hasAccess","type":"bool"}],"name":"setBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"utility","type":"address"},{"internalType":"bool","name":"hasAccess","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"utility","type":"address"},{"internalType":"bool","name":"hasAccess","type":"bool"}],"name":"setRecycler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOne","type":"address"}],"name":"setTaxwallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocation","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_SendTokensAtAmount","type":"uint256"}],"name":"updateSendTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_SwapTokensAtAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600260146101000a81548160ff02191690831515021790555060046003556004805569152d02c7e14af680000060055567016345785d8a00006006553480156200004f57600080fd5b506040518060400160405280600581526020017f245a4142410000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f245a4142410000000000000000000000000000000000000000000000000000008152506b033b2e3c9fd0803ce8000000828281600d9080519060200190620000e392919062000489565b5080600e9080519060200190620000fc92919062000489565b50620001216000801b62000115620001ff60201b60201c565b6200020760201b60201c565b62000131620001ff60201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200019362000185620001ff60201b60201c565b60016200021d60201b60201c565b620001a63060016200021d60201b60201c565b505060008111620001ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e59062000633565b60405180910390fd5b8060808181525050505050620006d7565b600033905090565b6200021982826200032e60201b60201c565b5050565b620002416000801b62000235620001ff60201b60201c565b6200041f60201b60201c565b62000283576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027a9062000611565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620003229190620005f4565b60405180910390a25050565b6200034082826200041f60201b60201c565b6200041b57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003c0620001ff60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054620004979062000672565b90600052602060002090601f016020900481019282620004bb576000855562000507565b82601f10620004d657805160ff191683800117855562000507565b8280016001018555821562000507579182015b8281111562000506578251825591602001919060010190620004e9565b5b5090506200051691906200051a565b5090565b5b80821115620005355760008160009055506001016200051b565b5090565b620005448162000666565b82525050565b600062000559601d8362000655565b91507f45524332303a2043616c6c6572206973206e6f7420616e2061646d696e0000006000830152602082019050919050565b60006200059b60238362000655565b91507f455243323052656379636c61626c653a20537570706c79206d7573742062652060008301527f3e203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006020820190506200060b600083018462000539565b92915050565b600060208201905081810360008301526200062c816200054a565b9050919050565b600060208201905081810360008301526200064e816200058c565b9050919050565b600082825260208201905092915050565b60008115159050919050565b600060028204905060018216806200068b57607f821691505b60208210811415620006a257620006a1620006a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6080516153a86200070860003960008181610da30152818161126101528181611c5f015261225901526153a86000f3fe60806040526004361061028c5760003560e01c8063715018a61161015a578063a9059cbb116100c1578063cf456ae71161007a578063cf456ae714610a21578063d257b34f14610a4a578063d539139314610a73578063d547741f14610a9e578063dd62ed3e14610ac7578063e0f83b1614610b0457610293565b8063a9059cbb14610901578063b304b2e11461093e578063b62496f514610969578063b78b52df146109a6578063c0246668146109cf578063c7f1c00c146109f857610293565b806395d89b411161011357806395d89b41146107f15780639a7a23d61461081c578063a1780c1814610845578063a217fddf1461085c578063a457c2d714610887578063a4f82f27146108c457610293565b8063715018a6146106f757806375829def1461070e57806379203dc4146107375780637929b27b14610762578063798e50361461078b57806391d14854146107b457610293565b80632f2ff15d116101fe57806349bd5a5e116101b757806349bd5a5e146105e95780634cd8cf11146106145780634fbee1931461063d578063683555561461067a5780636db794371461069157806370a08231146106ba57610293565b80632f2ff15d146104b5578063313ce567146104de57806336568abe14610509578063395093511461053257806340c10f191461056f57806342966c68146105ac57610293565b80630d895ee1116102505780630d895ee1146103915780631694505e146103ba57806318160ddd146103e557806323b872dd14610410578063248a9ca31461044d578063282c51f31461048a57610293565b806301ffc9a7146102985780630357371d146102d5578063047fc9aa146102fe57806306fdde0314610329578063095ea7b31461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba91906140d1565b610b1b565b6040516102cc9190614bbe565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190614007565b610b95565b005b34801561030a57600080fd5b50610313610da1565b6040516103209190614f0c565b60405180910390f35b34801561033557600080fd5b5061033e610dc5565b60405161034b9190614c2a565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190614007565b610e57565b6040516103889190614bbe565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613fcb565b610e75565b005b3480156103c657600080fd5b506103cf610f5f565b6040516103dc9190614bf4565b60405180910390f35b3480156103f157600080fd5b506103fa610f85565b6040516104079190614f0c565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613f7c565b610f8f565b6040516104449190614bbe565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f919061406c565b611087565b6040516104819190614bd9565b60405180910390f35b34801561049657600080fd5b5061049f6110a6565b6040516104ac9190614bd9565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190614095565b6110ca565b005b3480156104ea57600080fd5b506104f36110f3565b6040516105009190614f81565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190614095565b6110fc565b005b34801561053e57600080fd5b5061055960048036038101906105549190614007565b61117f565b6040516105669190614bbe565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190614007565b61122b565b6040516105a39190614bbe565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906140fa565b6113e8565b6040516105e09190614bbe565b60405180910390f35b3480156105f557600080fd5b506105fe6114ad565b60405161060b9190614b51565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906140fa565b6114d3565b005b34801561064957600080fd5b50610664600480360381019061065f9190613eee565b611530565b6040516106719190614bbe565b60405180910390f35b34801561068657600080fd5b5061068f611586565b005b34801561069d57600080fd5b506106b860048036038101906106b39190614123565b6119b6565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190613eee565b611a6c565b6040516106ee9190614f0c565b60405180910390f35b34801561070357600080fd5b5061070c611ab5565b005b34801561071a57600080fd5b5061073560048036038101906107309190613eee565b611ae1565b005b34801561074357600080fd5b5061074c611b8b565b6040516107599190614f0c565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190614007565b611b95565b005b34801561079757600080fd5b506107b260048036038101906107ad9190613eee565b611cee565b005b3480156107c057600080fd5b506107db60048036038101906107d69190614095565b611d85565b6040516107e89190614bbe565b60405180910390f35b3480156107fd57600080fd5b50610806611def565b6040516108139190614c2a565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613fcb565b611e81565b005b34801561085157600080fd5b5061085a611f73565b005b34801561086857600080fd5b50610871612010565b60405161087e9190614bd9565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190614007565b612017565b6040516108bb9190614bbe565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190613eee565b612102565b6040516108f89190614f0c565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190614007565b61214b565b6040516109359190614bbe565b60405180910390f35b34801561094a57600080fd5b50610953612169565b6040516109609190614f0c565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613eee565b61216f565b60405161099d9190614bbe565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190614007565b61218f565b005b3480156109db57600080fd5b506109f660048036038101906109f19190613fcb565b61239b565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613fcb565b612497565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613fcb565b6125d5565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906140fa565b6126bf565b005b348015610a7f57600080fd5b50610a8861271c565b604051610a959190614bd9565b60405180910390f35b348015610aaa57600080fd5b50610ac56004803603810190610ac09190614095565b612740565b005b348015610ad357600080fd5b50610aee6004803603810190610ae99190613f40565b612769565b604051610afb9190614f0c565b60405180910390f35b348015610b1057600080fd5b50610b196127f0565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8e5750610b8d826128ff565b5b9050919050565b6000801b610baa81610ba5612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190614d0c565b60405180910390fd5b60008211610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614ccc565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690614cac565b60405180910390fd5b81601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d2e91906150dd565b9250508190555081600f6000828254610d4791906150dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e83604051610d949190614f0c565b60405180910390a2505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600d8054610dd49061522f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e009061522f565b8015610e4d5780601f10610e2257610100808354040283529160200191610e4d565b820191906000526020600020905b815481529060010190602001808311610e3057829003601f168201915b5050505050905090565b6000610e6b610e64612969565b8484612a0e565b6001905092915050565b6000801b610e8a81610e85612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190614d0c565b60405180910390fd5b8115610f2f57610f2a7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848846110ca565b610f5a565b610f597f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84884612740565b5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610f9c848484612bd9565b6000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fe7612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90614dec565b60405180910390fd5b61107b85611073612969565b858403612a0e565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6110d382611087565b6110e4816110df612969565b612971565b6110ee838361327c565b505050565b60006012905090565b611104612969565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890614ecc565b60405180910390fd5b61117b828261335c565b5050565b600061122161118c612969565b84846009600061119a612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461121c9190614ffc565b612a0e565b6001905092915050565b60007f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661125f8161125a612969565b612971565b7f000000000000000000000000000000000000000000000000000000000000000083611289610f85565b6112939190614ffc565b11156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90614d8c565b60405180910390fd5b82601060006112e1612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490614dac565b60405180910390fd5b611367848461343d565b8260106000611374612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113bd91906150dd565b9250508190555082600f60008282546113d691906150dd565b92505081905550600191505092915050565b60007f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861141c81611417612969565b612971565b61142d611427612969565b8461359e565b826010600061143a612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190614ffc565b9250508190555082600f600082825461149c9190614ffc565b925050819055506001915050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114e76000801b6114e2612969565b611d85565b611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614d4c565b60405180910390fd5b8060068190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61159a6000801b611595612969565b611d85565b6115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614d4c565b60405180910390fd5b600260149054906101000a900460ff1615611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614e6c565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c957600080fd5b505afa1580156116dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117019190613f17565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561176357600080fd5b505afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190613f17565b6040518363ffffffff1660e01b81526004016117b8929190614b6c565b602060405180830381600087803b1580156117d257600080fd5b505af11580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a9190613f17565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611877600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613777565b6118a630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54612a0e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611945929190614b95565b602060405180830381600087803b15801561195f57600080fd5b505af1158015611973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119979190614043565b506001600260146101000a81548160ff02191690831515021790555050565b6119ca6000801b6119c5612969565b611d85565b611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090614d4c565b60405180910390fd5b60058211158015611a1b575060058111155b611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190614e8c565b60405180910390fd5b81600381905550806004819055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000801b611aca81611ac5612969565b612971565b611ade6000801b611ad9612969565b6110fc565b50565b6000801b611af681611af1612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90614d0c565b60405180910390fd5b611b736000801b836110ca565b611b876000801b611b82612969565b6110fc565b5050565b6000600f54905090565b6000801b611baa81611ba5612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614d0c565b60405180910390fd5b60008211611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490614ccc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082600f54611c8a610f85565b611c949190614ffc565b611c9e9190614ffc565b1115611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614dcc565b60405180910390fd5b611ce9838361343d565b505050565b611d026000801b611cfd612969565b611d85565b611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614d4c565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600e8054611dfe9061522f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a9061522f565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050905090565b611e956000801b611e90612969565b611d85565b611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90614d4c565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c90614d2c565b60405180910390fd5b611f6f8282613777565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb4612969565b73ffffffffffffffffffffffffffffffffffffffff1614611fd457600080fd5b6000611fdf30611a6c565b90506000811115611ff457611ff381613818565b5b6000479050600081111561200c5761200b81613aeb565b5b5050565b6000801b81565b60008060096000612026612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614eac565b60405180910390fd5b6120f76120ee612969565b85858403612a0e565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061215f612158612969565b8484612bd9565b6001905092915050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000801b6121a48161219f612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614d0c565b60405180910390fd5b60008211612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ccc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082600f54612284610f85565b61228e9190614ffc565b6122989190614ffc565b11156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614dcc565b60405180910390fd5b81601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123289190614ffc565b9250508190555081600f60008282546123419190614ffc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f472f36e28bb47edb7c69c9e2ac00a77c66b505df54e9c818ac57110b0629e8c38360405161238e9190614f0c565b60405180910390a2505050565b6123af6000801b6123aa612969565b611d85565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614d4c565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161248b9190614bbe565b60405180910390a25050565b6000801b6124ac816124a7612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390614d0c565b60405180910390fd5b811561257b5761254c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846110ca565b6125767f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848846110ca565b6125d0565b6125a57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684612740565b6125cf7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84884612740565b5b505050565b6000801b6125ea816125e5612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265190614d0c565b60405180910390fd5b811561268f5761268a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846110ca565b6126ba565b6126b97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684612740565b5b505050565b6126d36000801b6126ce612969565b611d85565b612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614d4c565b60405180910390fd5b8060058190555050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61274982611087565b61275a81612755612969565b612971565b612764838361335c565b505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612831612969565b73ffffffffffffffffffffffffffffffffffffffff161461285157600080fd5b60004711612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b90614d6c565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156128fc573d6000803e3d6000fd5b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61297b8282611d85565b612a0a576129a08173ffffffffffffffffffffffffffffffffffffffff166014613b57565b6129ae8360001c6020613b57565b6040516020016129bf929190614b17565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a019190614c2a565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614e4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae590614cec565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bcc9190614f0c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4090614e2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb090614c6c565b60405180910390fd5b6000811415612d2d578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051612d209190614c0f565b60405180910390a3613277565b600080612d3930611a6c565b9050600047905060006005548310159050808015612d645750600260159054906101000a900460ff16155b8015612dba5750600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e105750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e665750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ebf576001600260156101000a81548160ff021916908315150217905550612e8f83613818565b600654821115612ea357612ea247613aeb565b5b6000600260156101000a81548160ff0219169083151502179055505b6000600260159054906101000a900460ff16159050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f755750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f7f57600090505b801561308557600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe057506000600354115b1561300657606460035487612ff59190615083565b612fff9190615052565b9450613084565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561306157506000600454115b15613083576064600454876130769190615083565b6130809190615052565b94505b5b5b600085111561314a5784600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130dd9190614ffc565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516131419190614f0c565b60405180910390a35b85600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461319991906150dd565b9250508190555084866131ac91906150dd565b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fa9190614ffc565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878961325c91906150dd565b6040516132699190614f0c565b60405180910390a350505050505b505050565b6132868282611d85565b61335857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506132fd612969565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6133668282611d85565b1561343957600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506133de612969565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a490614eec565b60405180910390fd5b6134b960008383613e51565b80600c60008282546134cb9190614ffc565b9250508190555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135219190614ffc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135869190614f0c565b60405180910390a361359a60008383613e56565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360590614e0c565b60405180910390fd5b61361a82600083613e51565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369890614c8c565b60405180910390fd5b818103600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600c60008282546136f991906150dd565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161375e9190614f0c565b60405180910390a361377283600084613e56565b505050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081141561382657613ae8565b6000600267ffffffffffffffff811115613869577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138975781602001602082028036833780820191505090505b50905030816000815181106138d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561397757600080fd5b505afa15801561398b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139af9190613f17565b816001815181106139e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a5030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a0e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ab4959493929190614f27565b600060405180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b50505050505b50565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b53573d6000803e3d6000fd5b5050565b606060006002836002613b6a9190615083565b613b749190614ffc565b67ffffffffffffffff811115613bb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613be55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613c43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002613d0d9190615083565b613d179190614ffc565b90505b6001811115613e03577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110613d7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110613dbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080613dfc90615205565b9050613d1a565b5060008414613e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e3e90614c4c565b60405180910390fd5b8091505092915050565b505050565b505050565b600081359050613e6a816152ff565b92915050565b600081519050613e7f816152ff565b92915050565b600081359050613e9481615316565b92915050565b600081519050613ea981615316565b92915050565b600081359050613ebe8161532d565b92915050565b600081359050613ed381615344565b92915050565b600081359050613ee88161535b565b92915050565b600060208284031215613f0057600080fd5b6000613f0e84828501613e5b565b91505092915050565b600060208284031215613f2957600080fd5b6000613f3784828501613e70565b91505092915050565b60008060408385031215613f5357600080fd5b6000613f6185828601613e5b565b9250506020613f7285828601613e5b565b9150509250929050565b600080600060608486031215613f9157600080fd5b6000613f9f86828701613e5b565b9350506020613fb086828701613e5b565b9250506040613fc186828701613ed9565b9150509250925092565b60008060408385031215613fde57600080fd5b6000613fec85828601613e5b565b9250506020613ffd85828601613e85565b9150509250929050565b6000806040838503121561401a57600080fd5b600061402885828601613e5b565b925050602061403985828601613ed9565b9150509250929050565b60006020828403121561405557600080fd5b600061406384828501613e9a565b91505092915050565b60006020828403121561407e57600080fd5b600061408c84828501613eaf565b91505092915050565b600080604083850312156140a857600080fd5b60006140b685828601613eaf565b92505060206140c785828601613e5b565b9150509250929050565b6000602082840312156140e357600080fd5b60006140f184828501613ec4565b91505092915050565b60006020828403121561410c57600080fd5b600061411a84828501613ed9565b91505092915050565b6000806040838503121561413657600080fd5b600061414485828601613ed9565b925050602061415585828601613ed9565b9150509250929050565b600061416b8383614177565b60208301905092915050565b61418081615111565b82525050565b61418f81615111565b82525050565b60006141a082614fac565b6141aa8185614fcf565b93506141b583614f9c565b8060005b838110156141e65781516141cd888261415f565b97506141d883614fc2565b9250506001810190506141b9565b5085935050505092915050565b6141fc81615123565b82525050565b61420b8161512f565b82525050565b61421a8161519c565b82525050565b614229816151c0565b82525050565b600061423a82614fb7565b6142448185614fe0565b93506142548185602086016151d2565b61425d816152ee565b840191505092915050565b600061427382614fb7565b61427d8185614ff1565b935061428d8185602086016151d2565b80840191505092915050565b60006142a6602083614fe0565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b60006142e6602383614fe0565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061434c602283614fe0565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143b2603283614fe0565b91507f455243323052656379636c61626c653a2052656c6561736520616d6f756e742060008301527f6578636565647320616c6c6f636174696f6e00000000000000000000000000006020830152604082019050919050565b6000614418602383614fe0565b91507f455243323052656379636c61626c653a20416d6f756e74206d7573742062652060008301527f3e203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061447e602283614fe0565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144e4602083614fe0565b91507f455243323052656379636c61626c653a20496e76616c696420616464726573736000830152602082019050919050565b6000614524603983614fe0565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061458a601d83614fe0565b91507f45524332303a2043616c6c6572206973206e6f7420616e2061646d696e0000006000830152602082019050919050565b60006145ca601683614fe0565b91507f546f6b656e3a206e6f2045544820746f20636c656172000000000000000000006000830152602082019050919050565b600061460a602a83614fe0565b91507f455243323052656379636c61626c653a20416d6f756e7420657863656564732060008301527f6d617820737570706c79000000000000000000000000000000000000000000006020830152604082019050919050565b6000614670602a83614fe0565b91507f455243323052656379636c61626c653a20416d6f756e7420657863656564732060008301527f616c6c6f636174696f6e000000000000000000000000000000000000000000006020830152604082019050919050565b60006146d6603183614fe0565b91507f455243323052656379636c61626c653a20546f74616c20737570706c7920616c60008301527f6c6f636174696f6e2065786365656465640000000000000000000000000000006020830152604082019050919050565b600061473c602883614fe0565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147a2602183614fe0565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614808602583614fe0565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061486e602483614fe0565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148d4601783614fe0565b91507f74726164696e6720697320616c7265616479206f70656e0000000000000000006000830152602082019050919050565b6000614914601783614ff1565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b6000614954602383614fe0565b91507f4665652070657263656e742063616e277420626520686967686572207468616e60008301527f20352500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149ba602583614fe0565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a20601183614ff1565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000614a60602f83614fe0565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6000614ac6601f83614fe0565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b614b0281615185565b82525050565b614b118161518f565b82525050565b6000614b2282614907565b9150614b2e8285614268565b9150614b3982614a13565b9150614b458284614268565b91508190509392505050565b6000602082019050614b666000830184614186565b92915050565b6000604082019050614b816000830185614186565b614b8e6020830184614186565b9392505050565b6000604082019050614baa6000830185614186565b614bb76020830184614af9565b9392505050565b6000602082019050614bd360008301846141f3565b92915050565b6000602082019050614bee6000830184614202565b92915050565b6000602082019050614c096000830184614211565b92915050565b6000602082019050614c246000830184614220565b92915050565b60006020820190508181036000830152614c44818461422f565b905092915050565b60006020820190508181036000830152614c6581614299565b9050919050565b60006020820190508181036000830152614c85816142d9565b9050919050565b60006020820190508181036000830152614ca58161433f565b9050919050565b60006020820190508181036000830152614cc5816143a5565b9050919050565b60006020820190508181036000830152614ce58161440b565b9050919050565b60006020820190508181036000830152614d0581614471565b9050919050565b60006020820190508181036000830152614d25816144d7565b9050919050565b60006020820190508181036000830152614d4581614517565b9050919050565b60006020820190508181036000830152614d658161457d565b9050919050565b60006020820190508181036000830152614d85816145bd565b9050919050565b60006020820190508181036000830152614da5816145fd565b9050919050565b60006020820190508181036000830152614dc581614663565b9050919050565b60006020820190508181036000830152614de5816146c9565b9050919050565b60006020820190508181036000830152614e058161472f565b9050919050565b60006020820190508181036000830152614e2581614795565b9050919050565b60006020820190508181036000830152614e45816147fb565b9050919050565b60006020820190508181036000830152614e6581614861565b9050919050565b60006020820190508181036000830152614e85816148c7565b9050919050565b60006020820190508181036000830152614ea581614947565b9050919050565b60006020820190508181036000830152614ec5816149ad565b9050919050565b60006020820190508181036000830152614ee581614a53565b9050919050565b60006020820190508181036000830152614f0581614ab9565b9050919050565b6000602082019050614f216000830184614af9565b92915050565b600060a082019050614f3c6000830188614af9565b614f496020830187614220565b8181036040830152614f5b8186614195565b9050614f6a6060830185614186565b614f776080830184614af9565b9695505050505050565b6000602082019050614f966000830184614b08565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061500782615185565b915061501283615185565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561504757615046615261565b5b828201905092915050565b600061505d82615185565b915061506883615185565b92508261507857615077615290565b5b828204905092915050565b600061508e82615185565b915061509983615185565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d2576150d1615261565b5b828202905092915050565b60006150e882615185565b91506150f383615185565b92508282101561510657615105615261565b5b828203905092915050565b600061511c82615165565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006151a7826151ae565b9050919050565b60006151b982615165565b9050919050565b60006151cb82615185565b9050919050565b60005b838110156151f05780820151818401526020810190506151d5565b838111156151ff576000848401525b50505050565b600061521082615185565b9150600082141561522457615223615261565b5b600182039050919050565b6000600282049050600182168061524757607f821691505b6020821081141561525b5761525a6152bf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61530881615111565b811461531357600080fd5b50565b61531f81615123565b811461532a57600080fd5b50565b6153368161512f565b811461534157600080fd5b50565b61534d81615139565b811461535857600080fd5b50565b61536481615185565b811461536f57600080fd5b5056fea26469706673582212207eec52f405bff4fcf9369093002ad2170ae53a642d1826d7d5df87479b71c7f564736f6c63430008000033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c8063715018a61161015a578063a9059cbb116100c1578063cf456ae71161007a578063cf456ae714610a21578063d257b34f14610a4a578063d539139314610a73578063d547741f14610a9e578063dd62ed3e14610ac7578063e0f83b1614610b0457610293565b8063a9059cbb14610901578063b304b2e11461093e578063b62496f514610969578063b78b52df146109a6578063c0246668146109cf578063c7f1c00c146109f857610293565b806395d89b411161011357806395d89b41146107f15780639a7a23d61461081c578063a1780c1814610845578063a217fddf1461085c578063a457c2d714610887578063a4f82f27146108c457610293565b8063715018a6146106f757806375829def1461070e57806379203dc4146107375780637929b27b14610762578063798e50361461078b57806391d14854146107b457610293565b80632f2ff15d116101fe57806349bd5a5e116101b757806349bd5a5e146105e95780634cd8cf11146106145780634fbee1931461063d578063683555561461067a5780636db794371461069157806370a08231146106ba57610293565b80632f2ff15d146104b5578063313ce567146104de57806336568abe14610509578063395093511461053257806340c10f191461056f57806342966c68146105ac57610293565b80630d895ee1116102505780630d895ee1146103915780631694505e146103ba57806318160ddd146103e557806323b872dd14610410578063248a9ca31461044d578063282c51f31461048a57610293565b806301ffc9a7146102985780630357371d146102d5578063047fc9aa146102fe57806306fdde0314610329578063095ea7b31461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba91906140d1565b610b1b565b6040516102cc9190614bbe565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190614007565b610b95565b005b34801561030a57600080fd5b50610313610da1565b6040516103209190614f0c565b60405180910390f35b34801561033557600080fd5b5061033e610dc5565b60405161034b9190614c2a565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190614007565b610e57565b6040516103889190614bbe565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613fcb565b610e75565b005b3480156103c657600080fd5b506103cf610f5f565b6040516103dc9190614bf4565b60405180910390f35b3480156103f157600080fd5b506103fa610f85565b6040516104079190614f0c565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613f7c565b610f8f565b6040516104449190614bbe565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f919061406c565b611087565b6040516104819190614bd9565b60405180910390f35b34801561049657600080fd5b5061049f6110a6565b6040516104ac9190614bd9565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190614095565b6110ca565b005b3480156104ea57600080fd5b506104f36110f3565b6040516105009190614f81565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190614095565b6110fc565b005b34801561053e57600080fd5b5061055960048036038101906105549190614007565b61117f565b6040516105669190614bbe565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190614007565b61122b565b6040516105a39190614bbe565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906140fa565b6113e8565b6040516105e09190614bbe565b60405180910390f35b3480156105f557600080fd5b506105fe6114ad565b60405161060b9190614b51565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906140fa565b6114d3565b005b34801561064957600080fd5b50610664600480360381019061065f9190613eee565b611530565b6040516106719190614bbe565b60405180910390f35b34801561068657600080fd5b5061068f611586565b005b34801561069d57600080fd5b506106b860048036038101906106b39190614123565b6119b6565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190613eee565b611a6c565b6040516106ee9190614f0c565b60405180910390f35b34801561070357600080fd5b5061070c611ab5565b005b34801561071a57600080fd5b5061073560048036038101906107309190613eee565b611ae1565b005b34801561074357600080fd5b5061074c611b8b565b6040516107599190614f0c565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190614007565b611b95565b005b34801561079757600080fd5b506107b260048036038101906107ad9190613eee565b611cee565b005b3480156107c057600080fd5b506107db60048036038101906107d69190614095565b611d85565b6040516107e89190614bbe565b60405180910390f35b3480156107fd57600080fd5b50610806611def565b6040516108139190614c2a565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613fcb565b611e81565b005b34801561085157600080fd5b5061085a611f73565b005b34801561086857600080fd5b50610871612010565b60405161087e9190614bd9565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190614007565b612017565b6040516108bb9190614bbe565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190613eee565b612102565b6040516108f89190614f0c565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190614007565b61214b565b6040516109359190614bbe565b60405180910390f35b34801561094a57600080fd5b50610953612169565b6040516109609190614f0c565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613eee565b61216f565b60405161099d9190614bbe565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190614007565b61218f565b005b3480156109db57600080fd5b506109f660048036038101906109f19190613fcb565b61239b565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613fcb565b612497565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613fcb565b6125d5565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906140fa565b6126bf565b005b348015610a7f57600080fd5b50610a8861271c565b604051610a959190614bd9565b60405180910390f35b348015610aaa57600080fd5b50610ac56004803603810190610ac09190614095565b612740565b005b348015610ad357600080fd5b50610aee6004803603810190610ae99190613f40565b612769565b604051610afb9190614f0c565b60405180910390f35b348015610b1057600080fd5b50610b196127f0565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8e5750610b8d826128ff565b5b9050919050565b6000801b610baa81610ba5612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190614d0c565b60405180910390fd5b60008211610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614ccc565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690614cac565b60405180910390fd5b81601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d2e91906150dd565b9250508190555081600f6000828254610d4791906150dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e83604051610d949190614f0c565b60405180910390a2505050565b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000081565b6060600d8054610dd49061522f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e009061522f565b8015610e4d5780601f10610e2257610100808354040283529160200191610e4d565b820191906000526020600020905b815481529060010190602001808311610e3057829003601f168201915b5050505050905090565b6000610e6b610e64612969565b8484612a0e565b6001905092915050565b6000801b610e8a81610e85612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190614d0c565b60405180910390fd5b8115610f2f57610f2a7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848846110ca565b610f5a565b610f597f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84884612740565b5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610f9c848484612bd9565b6000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fe7612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90614dec565b60405180910390fd5b61107b85611073612969565b858403612a0e565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6110d382611087565b6110e4816110df612969565b612971565b6110ee838361327c565b505050565b60006012905090565b611104612969565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890614ecc565b60405180910390fd5b61117b828261335c565b5050565b600061122161118c612969565b84846009600061119a612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461121c9190614ffc565b612a0e565b6001905092915050565b60007f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661125f8161125a612969565b612971565b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000083611289610f85565b6112939190614ffc565b11156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90614d8c565b60405180910390fd5b82601060006112e1612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561135d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135490614dac565b60405180910390fd5b611367848461343d565b8260106000611374612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113bd91906150dd565b9250508190555082600f60008282546113d691906150dd565b92505081905550600191505092915050565b60007f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861141c81611417612969565b612971565b61142d611427612969565b8461359e565b826010600061143a612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190614ffc565b9250508190555082600f600082825461149c9190614ffc565b925050819055506001915050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114e76000801b6114e2612969565b611d85565b611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90614d4c565b60405180910390fd5b8060068190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61159a6000801b611595612969565b611d85565b6115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614d4c565b60405180910390fd5b600260149054906101000a900460ff1615611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614e6c565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c957600080fd5b505afa1580156116dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117019190613f17565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561176357600080fd5b505afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190613f17565b6040518363ffffffff1660e01b81526004016117b8929190614b6c565b602060405180830381600087803b1580156117d257600080fd5b505af11580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a9190613f17565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611877600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613777565b6118a630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54612a0e565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611945929190614b95565b602060405180830381600087803b15801561195f57600080fd5b505af1158015611973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119979190614043565b506001600260146101000a81548160ff02191690831515021790555050565b6119ca6000801b6119c5612969565b611d85565b611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090614d4c565b60405180910390fd5b60058211158015611a1b575060058111155b611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190614e8c565b60405180910390fd5b81600381905550806004819055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000801b611aca81611ac5612969565b612971565b611ade6000801b611ad9612969565b6110fc565b50565b6000801b611af681611af1612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90614d0c565b60405180910390fd5b611b736000801b836110ca565b611b876000801b611b82612969565b6110fc565b5050565b6000600f54905090565b6000801b611baa81611ba5612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614d0c565b60405180910390fd5b60008211611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490614ccc565b60405180910390fd5b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000082600f54611c8a610f85565b611c949190614ffc565b611c9e9190614ffc565b1115611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614dcc565b60405180910390fd5b611ce9838361343d565b505050565b611d026000801b611cfd612969565b611d85565b611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614d4c565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600e8054611dfe9061522f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2a9061522f565b8015611e775780601f10611e4c57610100808354040283529160200191611e77565b820191906000526020600020905b815481529060010190602001808311611e5a57829003601f168201915b5050505050905090565b611e956000801b611e90612969565b611d85565b611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90614d4c565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c90614d2c565b60405180910390fd5b611f6f8282613777565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb4612969565b73ffffffffffffffffffffffffffffffffffffffff1614611fd457600080fd5b6000611fdf30611a6c565b90506000811115611ff457611ff381613818565b5b6000479050600081111561200c5761200b81613aeb565b5b5050565b6000801b81565b60008060096000612026612969565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614eac565b60405180910390fd5b6120f76120ee612969565b85858403612a0e565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061215f612158612969565b8484612bd9565b6001905092915050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000801b6121a48161219f612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614d0c565b60405180910390fd5b60008211612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ccc565b60405180910390fd5b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000082600f54612284610f85565b61228e9190614ffc565b6122989190614ffc565b11156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614dcc565b60405180910390fd5b81601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123289190614ffc565b9250508190555081600f60008282546123419190614ffc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f472f36e28bb47edb7c69c9e2ac00a77c66b505df54e9c818ac57110b0629e8c38360405161238e9190614f0c565b60405180910390a2505050565b6123af6000801b6123aa612969565b611d85565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614d4c565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161248b9190614bbe565b60405180910390a25050565b6000801b6124ac816124a7612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390614d0c565b60405180910390fd5b811561257b5761254c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846110ca565b6125767f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848846110ca565b6125d0565b6125a57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684612740565b6125cf7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84884612740565b5b505050565b6000801b6125ea816125e5612969565b612971565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265190614d0c565b60405180910390fd5b811561268f5761268a7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846110ca565b6126ba565b6126b97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684612740565b5b505050565b6126d36000801b6126ce612969565b611d85565b612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614d4c565b60405180910390fd5b8060058190555050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61274982611087565b61275a81612755612969565b612971565b612764838361335c565b505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612831612969565b73ffffffffffffffffffffffffffffffffffffffff161461285157600080fd5b60004711612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b90614d6c565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156128fc573d6000803e3d6000fd5b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b61297b8282611d85565b612a0a576129a08173ffffffffffffffffffffffffffffffffffffffff166014613b57565b6129ae8360001c6020613b57565b6040516020016129bf929190614b17565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a019190614c2a565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614e4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae590614cec565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bcc9190614f0c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4090614e2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb090614c6c565b60405180910390fd5b6000811415612d2d578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051612d209190614c0f565b60405180910390a3613277565b600080612d3930611a6c565b9050600047905060006005548310159050808015612d645750600260159054906101000a900460ff16155b8015612dba5750600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e105750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e665750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ebf576001600260156101000a81548160ff021916908315150217905550612e8f83613818565b600654821115612ea357612ea247613aeb565b5b6000600260156101000a81548160ff0219169083151502179055505b6000600260159054906101000a900460ff16159050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f755750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f7f57600090505b801561308557600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe057506000600354115b1561300657606460035487612ff59190615083565b612fff9190615052565b9450613084565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561306157506000600454115b15613083576064600454876130769190615083565b6130809190615052565b94505b5b5b600085111561314a5784600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130dd9190614ffc565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516131419190614f0c565b60405180910390a35b85600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461319991906150dd565b9250508190555084866131ac91906150dd565b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fa9190614ffc565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878961325c91906150dd565b6040516132699190614f0c565b60405180910390a350505050505b505050565b6132868282611d85565b61335857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506132fd612969565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6133668282611d85565b1561343957600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506133de612969565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a490614eec565b60405180910390fd5b6134b960008383613e51565b80600c60008282546134cb9190614ffc565b9250508190555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135219190614ffc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135869190614f0c565b60405180910390a361359a60008383613e56565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360590614e0c565b60405180910390fd5b61361a82600083613e51565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369890614c8c565b60405180910390fd5b818103600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600c60008282546136f991906150dd565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161375e9190614f0c565b60405180910390a361377283600084613e56565b505050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081141561382657613ae8565b6000600267ffffffffffffffff811115613869577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138975781602001602082028036833780820191505090505b50905030816000815181106138d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561397757600080fd5b505afa15801561398b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139af9190613f17565b816001815181106139e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a5030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a0e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ab4959493929190614f27565b600060405180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b50505050505b50565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b53573d6000803e3d6000fd5b5050565b606060006002836002613b6a9190615083565b613b749190614ffc565b67ffffffffffffffff811115613bb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613be55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613c43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002613d0d9190615083565b613d179190614ffc565b90505b6001811115613e03577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110613d7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110613dbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080613dfc90615205565b9050613d1a565b5060008414613e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e3e90614c4c565b60405180910390fd5b8091505092915050565b505050565b505050565b600081359050613e6a816152ff565b92915050565b600081519050613e7f816152ff565b92915050565b600081359050613e9481615316565b92915050565b600081519050613ea981615316565b92915050565b600081359050613ebe8161532d565b92915050565b600081359050613ed381615344565b92915050565b600081359050613ee88161535b565b92915050565b600060208284031215613f0057600080fd5b6000613f0e84828501613e5b565b91505092915050565b600060208284031215613f2957600080fd5b6000613f3784828501613e70565b91505092915050565b60008060408385031215613f5357600080fd5b6000613f6185828601613e5b565b9250506020613f7285828601613e5b565b9150509250929050565b600080600060608486031215613f9157600080fd5b6000613f9f86828701613e5b565b9350506020613fb086828701613e5b565b9250506040613fc186828701613ed9565b9150509250925092565b60008060408385031215613fde57600080fd5b6000613fec85828601613e5b565b9250506020613ffd85828601613e85565b9150509250929050565b6000806040838503121561401a57600080fd5b600061402885828601613e5b565b925050602061403985828601613ed9565b9150509250929050565b60006020828403121561405557600080fd5b600061406384828501613e9a565b91505092915050565b60006020828403121561407e57600080fd5b600061408c84828501613eaf565b91505092915050565b600080604083850312156140a857600080fd5b60006140b685828601613eaf565b92505060206140c785828601613e5b565b9150509250929050565b6000602082840312156140e357600080fd5b60006140f184828501613ec4565b91505092915050565b60006020828403121561410c57600080fd5b600061411a84828501613ed9565b91505092915050565b6000806040838503121561413657600080fd5b600061414485828601613ed9565b925050602061415585828601613ed9565b9150509250929050565b600061416b8383614177565b60208301905092915050565b61418081615111565b82525050565b61418f81615111565b82525050565b60006141a082614fac565b6141aa8185614fcf565b93506141b583614f9c565b8060005b838110156141e65781516141cd888261415f565b97506141d883614fc2565b9250506001810190506141b9565b5085935050505092915050565b6141fc81615123565b82525050565b61420b8161512f565b82525050565b61421a8161519c565b82525050565b614229816151c0565b82525050565b600061423a82614fb7565b6142448185614fe0565b93506142548185602086016151d2565b61425d816152ee565b840191505092915050565b600061427382614fb7565b61427d8185614ff1565b935061428d8185602086016151d2565b80840191505092915050565b60006142a6602083614fe0565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b60006142e6602383614fe0565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061434c602283614fe0565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143b2603283614fe0565b91507f455243323052656379636c61626c653a2052656c6561736520616d6f756e742060008301527f6578636565647320616c6c6f636174696f6e00000000000000000000000000006020830152604082019050919050565b6000614418602383614fe0565b91507f455243323052656379636c61626c653a20416d6f756e74206d7573742062652060008301527f3e203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061447e602283614fe0565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144e4602083614fe0565b91507f455243323052656379636c61626c653a20496e76616c696420616464726573736000830152602082019050919050565b6000614524603983614fe0565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061458a601d83614fe0565b91507f45524332303a2043616c6c6572206973206e6f7420616e2061646d696e0000006000830152602082019050919050565b60006145ca601683614fe0565b91507f546f6b656e3a206e6f2045544820746f20636c656172000000000000000000006000830152602082019050919050565b600061460a602a83614fe0565b91507f455243323052656379636c61626c653a20416d6f756e7420657863656564732060008301527f6d617820737570706c79000000000000000000000000000000000000000000006020830152604082019050919050565b6000614670602a83614fe0565b91507f455243323052656379636c61626c653a20416d6f756e7420657863656564732060008301527f616c6c6f636174696f6e000000000000000000000000000000000000000000006020830152604082019050919050565b60006146d6603183614fe0565b91507f455243323052656379636c61626c653a20546f74616c20737570706c7920616c60008301527f6c6f636174696f6e2065786365656465640000000000000000000000000000006020830152604082019050919050565b600061473c602883614fe0565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147a2602183614fe0565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614808602583614fe0565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061486e602483614fe0565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148d4601783614fe0565b91507f74726164696e6720697320616c7265616479206f70656e0000000000000000006000830152602082019050919050565b6000614914601783614ff1565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b6000614954602383614fe0565b91507f4665652070657263656e742063616e277420626520686967686572207468616e60008301527f20352500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006149ba602583614fe0565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a20601183614ff1565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000614a60602f83614fe0565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6000614ac6601f83614fe0565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b614b0281615185565b82525050565b614b118161518f565b82525050565b6000614b2282614907565b9150614b2e8285614268565b9150614b3982614a13565b9150614b458284614268565b91508190509392505050565b6000602082019050614b666000830184614186565b92915050565b6000604082019050614b816000830185614186565b614b8e6020830184614186565b9392505050565b6000604082019050614baa6000830185614186565b614bb76020830184614af9565b9392505050565b6000602082019050614bd360008301846141f3565b92915050565b6000602082019050614bee6000830184614202565b92915050565b6000602082019050614c096000830184614211565b92915050565b6000602082019050614c246000830184614220565b92915050565b60006020820190508181036000830152614c44818461422f565b905092915050565b60006020820190508181036000830152614c6581614299565b9050919050565b60006020820190508181036000830152614c85816142d9565b9050919050565b60006020820190508181036000830152614ca58161433f565b9050919050565b60006020820190508181036000830152614cc5816143a5565b9050919050565b60006020820190508181036000830152614ce58161440b565b9050919050565b60006020820190508181036000830152614d0581614471565b9050919050565b60006020820190508181036000830152614d25816144d7565b9050919050565b60006020820190508181036000830152614d4581614517565b9050919050565b60006020820190508181036000830152614d658161457d565b9050919050565b60006020820190508181036000830152614d85816145bd565b9050919050565b60006020820190508181036000830152614da5816145fd565b9050919050565b60006020820190508181036000830152614dc581614663565b9050919050565b60006020820190508181036000830152614de5816146c9565b9050919050565b60006020820190508181036000830152614e058161472f565b9050919050565b60006020820190508181036000830152614e2581614795565b9050919050565b60006020820190508181036000830152614e45816147fb565b9050919050565b60006020820190508181036000830152614e6581614861565b9050919050565b60006020820190508181036000830152614e85816148c7565b9050919050565b60006020820190508181036000830152614ea581614947565b9050919050565b60006020820190508181036000830152614ec5816149ad565b9050919050565b60006020820190508181036000830152614ee581614a53565b9050919050565b60006020820190508181036000830152614f0581614ab9565b9050919050565b6000602082019050614f216000830184614af9565b92915050565b600060a082019050614f3c6000830188614af9565b614f496020830187614220565b8181036040830152614f5b8186614195565b9050614f6a6060830185614186565b614f776080830184614af9565b9695505050505050565b6000602082019050614f966000830184614b08565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061500782615185565b915061501283615185565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561504757615046615261565b5b828201905092915050565b600061505d82615185565b915061506883615185565b92508261507857615077615290565b5b828204905092915050565b600061508e82615185565b915061509983615185565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d2576150d1615261565b5b828202905092915050565b60006150e882615185565b91506150f383615185565b92508282101561510657615105615261565b5b828203905092915050565b600061511c82615165565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006151a7826151ae565b9050919050565b60006151b982615165565b9050919050565b60006151cb82615185565b9050919050565b60005b838110156151f05780820151818401526020810190506151d5565b838111156151ff576000848401525b50505050565b600061521082615185565b9150600082141561522457615223615261565b5b600182039050919050565b6000600282049050600182168061524757607f821691505b6020821081141561525b5761525a6152bf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61530881615111565b811461531357600080fd5b50565b61531f81615123565b811461532a57600080fd5b50565b6153368161512f565b811461534157600080fd5b50565b61534d81615139565b811461535857600080fd5b50565b61536481615185565b811461536f57600080fd5b5056fea26469706673582212207eec52f405bff4fcf9369093002ad2170ae53a642d1826d7d5df87479b71c7f564736f6c63430008000033

Deployed Bytecode Sourcemap

30158:112:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5629:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27795:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16375:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17275:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26458:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15076:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16690:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17450:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6493:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25654:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6624:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16591:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6936:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17948:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28295:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28776:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15124:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23615:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22914:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21378:692;;;;;;;;;;;;;:::i;:::-;;23238:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16804:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29749:138;;;;;;;;;;;;;:::i;:::-;;29458:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30040:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29028:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23764:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5841:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16481:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22470:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22078:347;;;;;;;;;;;;;:::i;:::-;;5158:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18169:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29893:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16937:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25761:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15864:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27279:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23048:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26821:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26095:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23466:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25585:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6779:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17118:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21157:209;;;;;;;;;;;;;:::i;:::-;;5629:204;5714:4;5753:32;5738:47;;;:11;:47;;;;:87;;;;5789:36;5813:11;5789:23;:36::i;:::-;5738:87;5731:94;;5629:204;;;:::o;27795:494::-;5203:4;27897:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;27955:1:::1;27936:21;;:7;:21;;;;27928:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28022:1;28013:6;:10;28005:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28092:10;:19;28103:7;28092:19;;;;;;;;;;;;;;;;28082:6;:29;;28074:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;28202:6;28179:10;:19;28190:7;28179:19;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;28232:6;28219:9;;:19;;;;;;;:::i;:::-;;;;;;;;28265:7;28256:25;;;28274:6;28256:25;;;;;;:::i;:::-;;;;;;;;27795:494:::0;;;:::o;25723:31::-;;;:::o;16375:100::-;16429:13;16462:5;16455:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16375:100;:::o;17275:169::-;17358:4;17375:39;17384:12;:10;:12::i;:::-;17398:7;17407:6;17375:8;:39::i;:::-;17432:4;17425:11;;17275:169;;;;:::o;26458:357::-;5203:4;26562:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;26620:1:::1;26601:21;;:7;:21;;;;26593:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26674:9;26670:138;;;26700:31;25692:24;26723:7;26700:9;:31::i;:::-;26670:138;;;26764:32;25692:24;26788:7;26764:10;:32::i;:::-;26670:138;26458:357:::0;;;:::o;15076:41::-;;;;;;;;;;;;;:::o;16690:108::-;16751:7;16778:12;;16771:19;;16690:108;:::o;17450:492::-;17590:4;17607:36;17617:6;17625:9;17636:6;17607:9;:36::i;:::-;17656:24;17683:11;:19;17695:6;17683:19;;;;;;;;;;;;;;;:33;17703:12;:10;:12::i;:::-;17683:33;;;;;;;;;;;;;;;;17656:60;;17755:6;17735:16;:26;;17727:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;17842:57;17851:6;17859:12;:10;:12::i;:::-;17892:6;17873:16;:25;17842:8;:57::i;:::-;17930:4;17923:11;;;17450:492;;;;;:::o;6493:123::-;6559:7;6586:6;:12;6593:4;6586:12;;;;;;;;;;;:22;;;6579:29;;6493:123;;;:::o;25654:62::-;25692:24;25654:62;:::o;6624:147::-;6707:18;6720:4;6707:12;:18::i;:::-;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;6738:25:::1;6749:4;6755:7;6738:10;:25::i;:::-;6624:147:::0;;;:::o;16591:93::-;16649:5;16674:2;16667:9;;16591:93;:::o;6936:218::-;7043:12;:10;:12::i;:::-;7032:23;;:7;:23;;;7024:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;7120:26;7132:4;7138:7;7120:11;:26::i;:::-;6936:218;;:::o;17948:215::-;18036:4;18053:80;18062:12;:10;:12::i;:::-;18076:7;18122:10;18085:11;:25;18097:12;:10;:12::i;:::-;18085:25;;;;;;;;;;;;;;;:34;18111:7;18085:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18053:8;:80::i;:::-;18151:4;18144:11;;17948:215;;;;:::o;28295:475::-;28416:4;25623:24;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;28467:6:::1;28457;28441:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:32;;28433:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28567:6;28539:10;:24;28550:12;:10;:12::i;:::-;28539:24;;;;;;;;;;;;;;;;:34;;28531:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;28641:22;28647:7;28656:6;28641:5;:22::i;:::-;28702:6;28674:10;:24;28685:12;:10;:12::i;:::-;28674:24;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;28732:6;28719:9;;:19;;;;;;;:::i;:::-;;;;;;;;28758:4;28751:11;;28295:475:::0;;;;;:::o;28776:246::-;28871:4;25692:24;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;28888:27:::1;28894:12;:10;:12::i;:::-;28908:6;28888:5;:27::i;:::-;28954:6;28926:10;:24;28937:12;:10;:12::i;:::-;28926:24;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;28984:6;28971:9;;:19;;;;;;;:::i;:::-;;;;;;;;29010:4;29003:11;;28776:246:::0;;;;:::o;15124:28::-;;;;;;;;;;;;;:::o;23615:141::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23729:19:::1;23708:18;:40;;;;23615:141:::0;:::o;22914:126::-;22980:4;23004:19;:28;23024:7;23004:28;;;;;;;;;;;;;;;;;;;;;;;;;22997:35;;22914:126;;;:::o;21378:692::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21447:11:::1;;;;;;;;;;;21446:12;21438:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21496:35;21566:42;21496:123;;21648:16;21630:15;;:34;;;;;;;;;;;;;;;;;;21709:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21691:70;;;21770:4;21777:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21691:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21675:13;;:126;;;;;;;;;;;;;;;;;;21812:58;21849:13;;;;;;;;;;;21865:4;21812:28;:58::i;:::-;21881:63;21898:4;21913:15;;;;;;;;;;;21931:12;;21881:8;:63::i;:::-;21962:13;;;;;;;;;;;21955:29;;;21993:15;;;;;;;;;;;22011:14;21955:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22051:4;22037:11;;:18;;;;;;;;;;;;;;;;;;21140:1;21378:692::o:0;23238:220::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:1:::1;23325:7;:12;;:29;;;;;23353:1;23341:8;:13;;23325:29;23317:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23414:7;23405:6;:16;;;;23442:8;23432:7;:18;;;;23238:220:::0;;:::o;16804:127::-;16878:7;16905:9;:18;16915:7;16905:18;;;;;;;;;;;;;;;;16898:25;;16804:127;;;:::o;29749:138::-;5203:4;29802:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;29833:46:::1;5203:4;29846:18:::0;::::1;29866:12;:10;:12::i;:::-;29833;:46::i;:::-;29749:138:::0;:::o;29458:285::-;5203:4;29532:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;29590:1:::1;29571:21;;:7;:21;;;;29563:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29640:38;5203:4;29650:18:::0;::::1;29670:7;29640:9;:38::i;:::-;29689:46;5203:4;29702:18:::0;::::1;29722:12;:10;:12::i;:::-;29689;:46::i;:::-;29458:285:::0;;:::o;30040:109::-;30105:7;30132:9;;30125:16;;30040:109;:::o;29028:424::-;5203:4;29126:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;29184:1:::1;29165:21;;:7;:21;;;;29157:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29251:1;29242:6;:10;29234:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29349:6;29339;29327:9;;29311:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:34;;;;:::i;:::-;:44;;29303:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;29422:22;29428:7;29437:6;29422:5;:22::i;:::-;29028:424:::0;;;:::o;23764:104::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23852:7:::1;23832:9;;:28;;;;;;;;;;;;;;;;;;23764:104:::0;:::o;5841:139::-;5919:4;5943:6;:12;5950:4;5943:12;;;;;;;;;;;:20;;:29;5964:7;5943:29;;;;;;;;;;;;;;;;;;;;;;;;;5936:36;;5841:139;;;;:::o;16481:104::-;16537:13;16570:7;16563:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16481:104;:::o;22470:242::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22577:13:::1;;;;;;;;;;;22569:21;;:4;:21;;;;22560:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;22663:41;22692:4;22698:5;22663:28;:41::i;:::-;22470:242:::0;;:::o;22078:347::-;22142:9;;;;;;;;;;;22128:23;;:12;:10;:12::i;:::-;:23;;;22120:32;;;;;;22163:20;22184:24;22202:4;22184:9;:24::i;:::-;22163:45;;22235:1;22222:12;:14;22219:73;;;22250:30;22267:12;22250:16;:30::i;:::-;22219:73;22302:18;22321:21;22302:40;;22367:1;22356:10;:12;22353:65;;;22382:24;22395:10;22382:12;:24::i;:::-;22353:65;22078:347;;:::o;5158:49::-;5203:4;5158:49;;;:::o;18169:413::-;18262:4;18279:24;18306:11;:25;18318:12;:10;:12::i;:::-;18306:25;;;;;;;;;;;;;;;:34;18332:7;18306:34;;;;;;;;;;;;;;;;18279:61;;18379:15;18359:16;:35;;18351:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18472:67;18481:12;:10;:12::i;:::-;18495:7;18523:15;18504:16;:34;18472:8;:67::i;:::-;18570:4;18563:11;;;18169:413;;;;:::o;29893:141::-;29980:7;30007:10;:19;30018:7;30007:19;;;;;;;;;;;;;;;;30000:26;;29893:141;;;:::o;16937:175::-;17023:4;17040:42;17050:12;:10;:12::i;:::-;17064:9;17075:6;17040:9;:42::i;:::-;17100:4;17093:11;;16937:175;;;;:::o;25761:24::-;;;;:::o;15864:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27279:510::-;5203:4;27382:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;27440:1:::1;27421:21;;:7;:21;;;;27413:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27507:1;27498:6;:10;27490:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27605:6;27595;27583:9;;27567:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:34;;;;:::i;:::-;:44;;27559:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;27701:6;27678:10;:19;27689:7;27678:19;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;27731:6;27718:9;;:19;;;;;;;:::i;:::-;;;;;;;;27765:7;27755:26;;;27774:6;27755:26;;;;;;:::i;:::-;;;;;;;;27279:510:::0;;;:::o;23048:182::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23164:8:::1;23133:19;:28;23153:7;23133:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23204:7;23188:34;;;23213:8;23188:34;;;;;;:::i;:::-;;;;;;;;23048:182:::0;;:::o;26821:452::-;5203:4;26927:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;26985:1:::1;26966:21;;:7;:21;;;;26958:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27039:9;27035:231;;;27065:31;25623:24;27088:7;27065:9;:31::i;:::-;27111;25692:24;27134:7;27111:9;:31::i;:::-;27035:231;;;27175:32;25623:24;27199:7;27175:10;:32::i;:::-;27222;25692:24;27246:7;27222:10;:32::i;:::-;27035:231;26821:452:::0;;;:::o;26095:357::-;5203:4;26199:18;;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;26257:1:::1;26238:21;;:7;:21;;;;26230:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26311:9;26307:138;;;26337:31;25623:24;26360:7;26337:9;:31::i;:::-;26307:138;;;26401:32;25623:24;26425:7;26401:10;:32::i;:::-;26307:138;26095:357:::0;;;:::o;23466:141::-;21054:41;5203:4;21062:18;;21082:12;:10;:12::i;:::-;21054:7;:41::i;:::-;21046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23580:19:::1;23559:18;:40;;;;23466:141:::0;:::o;25585:62::-;25623:24;25585:62;:::o;6779:149::-;6863:18;6876:4;6863:12;:18::i;:::-;5571:30;5582:4;5588:12;:10;:12::i;:::-;5571:10;:30::i;:::-;6894:26:::1;6906:4;6912:7;6894:11;:26::i;:::-;6779:149:::0;;;:::o;17118:151::-;17207:7;17234:11;:18;17246:5;17234:18;;;;;;;;;;;;;;;:27;17253:7;17234:27;;;;;;;;;;;;;;;;17227:34;;17118:151;;;;:::o;21157:209::-;21225:9;;;;;;;;;;;21211:23;;:12;:10;:12::i;:::-;:23;;;21203:32;;;;;;21278:1;21254:21;:25;21246:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21317:9;;;;;;;;;;;:18;;:41;21336:21;21317:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21157:209::o;2689:157::-;2774:4;2813:25;2798:40;;;:11;:40;;;;2791:47;;2689:157;;;:::o;2886:98::-;2939:7;2966:10;2959:17;;2886:98;:::o;5988:497::-;6069:22;6077:4;6083:7;6069;:22::i;:::-;6064:414;;6257:41;6285:7;6257:41;;6295:2;6257:19;:41::i;:::-;6371:38;6399:4;6391:13;;6406:2;6371:19;:38::i;:::-;6162:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6108:358;;;;;;;;;;;:::i;:::-;;;;;;;;6064:414;5988:497;;:::o;24878:380::-;25031:1;25014:19;;:5;:19;;;;25006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25112:1;25093:21;;:7;:21;;;;25085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25196:6;25166:11;:18;25178:5;25166:18;;;;;;;;;;;;;;;:27;25185:7;25166:27;;;;;;;;;;;;;;;:36;;;;25234:7;25218:32;;25227:5;25218:32;;;25243:6;25218:32;;;;;;:::i;:::-;;;;;;;;24878:380;;;:::o;18592:1799::-;18739:1;18723:18;;:4;:18;;;;18715:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18816:1;18802:16;;:2;:16;;;;18794:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18885:1;18875:6;:11;18871:91;;;18923:2;18908:21;;18917:4;18908:21;;;18927:1;18908:21;;;;;;:::i;:::-;;;;;;;;18944:7;;18871:91;18974:17;19004:28;19035:24;19053:4;19035:9;:24::i;:::-;19004:55;;19070:26;19099:21;19070:50;;19131:12;19170:18;;19146:20;:42;;19131:57;;19219:7;:33;;;;;19244:8;;;;;;;;;;;19243:9;19219:33;:82;;;;;19270:25;:31;19296:4;19270:31;;;;;;;;;;;;;;;;;;;;;;;;;19269:32;19219:82;:126;;;;;19320:19;:25;19340:4;19320:25;;;;;;;;;;;;;;;;;;;;;;;;;19319:26;19219:126;:167;;;;;19363:19;:23;19383:2;19363:23;;;;;;;;;;;;;;;;;;;;;;;;;19362:24;19219:167;19201:451;;;19424:4;19413:8;;:15;;;;;;;;;;;;;;;;;;19443:38;19460:20;19443:16;:38::i;:::-;19520:18;;19499;:39;19496:114;;;19559:35;19572:21;19559:12;:35::i;:::-;19496:114;19635:5;19624:8;;:16;;;;;;;;;;;;;;;;;;19201:451;19664:12;19680:8;;;;;;;;;;;19679:9;19664:24;;19705:19;:25;19725:4;19705:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19734:19;:23;19754:2;19734:23;;;;;;;;;;;;;;;;;;;;;;;;;19705:52;19701:100;;;19784:5;19774:15;;19701:100;19817:7;19813:288;;;19845:25;:31;19871:4;19845:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;19889:1;19880:6;;:10;19845:45;19841:248;;;19943:3;19933:6;;19924;:15;;;;:::i;:::-;19923:23;;;;:::i;:::-;19911:35;;19841:248;;;19972:25;:29;19998:2;19972:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;20015:1;20005:7;;:11;19972:44;19968:121;;;20070:3;20059:7;;20050:6;:16;;;;:::i;:::-;20049:24;;;;:::i;:::-;20037:36;;19968:121;19841:248;19813:288;20127:1;20115:9;:13;20111:135;;;20169:9;20141;:24;20159:4;20141:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;20217:4;20194:40;;20203:4;20194:40;;;20224:9;20194:40;;;;;;:::i;:::-;;;;;;;;20111:135;20275:6;20256:9;:15;20266:4;20256:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;20319:9;20310:6;:18;;;;:::i;:::-;20292:9;:13;20302:2;20292:13;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;20360:2;20345:38;;20354:4;20345:38;;;20373:9;20364:6;:18;;;;:::i;:::-;20345:38;;;;;;:::i;:::-;;;;;;;;18592:1799;;;;;;;;;:::o;7485:229::-;7560:22;7568:4;7574:7;7560;:22::i;:::-;7555:152;;7631:4;7599:6;:12;7606:4;7599:12;;;;;;;;;;;:20;;:29;7620:7;7599:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7682:12;:10;:12::i;:::-;7655:40;;7673:7;7655:40;;7667:4;7655:40;;;;;;;;;;7555:152;7485:229;;:::o;7722:230::-;7797:22;7805:4;7811:7;7797;:22::i;:::-;7793:152;;;7868:5;7836:6;:12;7843:4;7836:12;;;;;;;;;;;:20;;:29;7857:7;7836:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;7920:12;:10;:12::i;:::-;7893:40;;7911:7;7893:40;;7905:4;7893:40;;;;;;;;;;7793:152;7722:230;;:::o;23876:399::-;23979:1;23960:21;;:7;:21;;;;23952:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24030:49;24059:1;24063:7;24072:6;24030:20;:49::i;:::-;24108:6;24092:12;;:22;;;;;;;:::i;:::-;;;;;;;;24147:6;24125:9;:18;24135:7;24125:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;24190:7;24169:37;;24186:1;24169:37;;;24199:6;24169:37;;;;;;:::i;:::-;;;;;;;;24219:48;24247:1;24251:7;24260:6;24219:19;:48::i;:::-;23876:399;;:::o;24281:591::-;24384:1;24365:21;;:7;:21;;;;24357:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24437:49;24458:7;24475:1;24479:6;24437:20;:49::i;:::-;24499:22;24524:9;:18;24534:7;24524:18;;;;;;;;;;;;;;;;24499:43;;24579:6;24561:14;:24;;24553:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24698:6;24681:14;:23;24660:9;:18;24670:7;24660:18;;;;;;;;;;;;;;;:44;;;;24742:6;24726:12;;:22;;;;;;;:::i;:::-;;;;;;;;24792:1;24766:37;;24775:7;24766:37;;;24796:6;24766:37;;;;;;:::i;:::-;;;;;;;;24816:48;24836:7;24853:1;24857:6;24816:19;:48::i;:::-;24281:591;;;:::o;22720:186::-;22837:5;22803:25;:31;22829:4;22803:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22892:5;22858:40;;22886:4;22858:40;;;;;;;;;;;;22720:186;;:::o;20399:508::-;20481:1;20468:11;:14;20465:27;;;20484:7;;20465:27;20502:21;20540:1;20526:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20502:40;;20571:4;20553;20558:1;20553:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;20597:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20587:4;20592:1;20587:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;20630:62;20647:4;20662:15;;;;;;;;;;;20680:11;20630:8;:62::i;:::-;20703:15;;;;;;;;;;;:66;;;20784:11;20810:1;20826:4;20853;20873:15;20703:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20399:508;;;:::o;20915:91::-;20972:9;;;;;;;;;;;:18;;:26;20991:6;20972:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20915:91;:::o;4074:451::-;4149:13;4175:19;4220:1;4211:6;4207:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;4197:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4175:47;;4233:15;:6;4240:1;4233:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;4259;:6;4266:1;4259:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;4290:9;4315:1;4306:6;4302:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;4290:26;;4285:135;4322:1;4318;:5;4285:135;;;4357:12;4378:3;4370:5;:11;4357:25;;;;;;;;;;;;;;;;;;4345:6;4352:1;4345:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;4407:1;4397:11;;;;;4325:3;;;;:::i;:::-;;;4285:135;;;;4447:1;4438:5;:10;4430:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4510:6;4496:21;;;4074:451;;;;:::o;25264:125::-;;;;:::o;25395:124::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:137::-;;811:6;798:20;789:29;;827:32;853:5;827:32;:::i;:::-;779:86;;;;:::o;871:139::-;;955:6;942:20;933:29;;971:33;998:5;971:33;:::i;:::-;923:87;;;;:::o;1016:262::-;;1124:2;1112:9;1103:7;1099:23;1095:32;1092:2;;;1140:1;1137;1130:12;1092:2;1183:1;1208:53;1253:7;1244:6;1233:9;1229:22;1208:53;:::i;:::-;1198:63;;1154:117;1082:196;;;;:::o;1284:284::-;;1403:2;1391:9;1382:7;1378:23;1374:32;1371:2;;;1419:1;1416;1409:12;1371:2;1462:1;1487:64;1543:7;1534:6;1523:9;1519:22;1487:64;:::i;:::-;1477:74;;1433:128;1361:207;;;;:::o;1574:407::-;;;1699:2;1687:9;1678:7;1674:23;1670:32;1667:2;;;1715:1;1712;1705:12;1667:2;1758:1;1783:53;1828:7;1819:6;1808:9;1804:22;1783:53;:::i;:::-;1773:63;;1729:117;1885:2;1911:53;1956:7;1947:6;1936:9;1932:22;1911:53;:::i;:::-;1901:63;;1856:118;1657:324;;;;;:::o;1987:552::-;;;;2129:2;2117:9;2108:7;2104:23;2100:32;2097:2;;;2145:1;2142;2135:12;2097:2;2188:1;2213:53;2258:7;2249:6;2238:9;2234:22;2213:53;:::i;:::-;2203:63;;2159:117;2315:2;2341:53;2386:7;2377:6;2366:9;2362:22;2341:53;:::i;:::-;2331:63;;2286:118;2443:2;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2414:118;2087:452;;;;;:::o;2545:401::-;;;2667:2;2655:9;2646:7;2642:23;2638:32;2635:2;;;2683:1;2680;2673:12;2635:2;2726:1;2751:53;2796:7;2787:6;2776:9;2772:22;2751:53;:::i;:::-;2741:63;;2697:117;2853:2;2879:50;2921:7;2912:6;2901:9;2897:22;2879:50;:::i;:::-;2869:60;;2824:115;2625:321;;;;;:::o;2952:407::-;;;3077:2;3065:9;3056:7;3052:23;3048:32;3045:2;;;3093:1;3090;3083:12;3045:2;3136:1;3161:53;3206:7;3197:6;3186:9;3182:22;3161:53;:::i;:::-;3151:63;;3107:117;3263:2;3289:53;3334:7;3325:6;3314:9;3310:22;3289:53;:::i;:::-;3279:63;;3234:118;3035:324;;;;;:::o;3365:278::-;;3481:2;3469:9;3460:7;3456:23;3452:32;3449:2;;;3497:1;3494;3487:12;3449:2;3540:1;3565:61;3618:7;3609:6;3598:9;3594:22;3565:61;:::i;:::-;3555:71;;3511:125;3439:204;;;;:::o;3649:262::-;;3757:2;3745:9;3736:7;3732:23;3728:32;3725:2;;;3773:1;3770;3763:12;3725:2;3816:1;3841:53;3886:7;3877:6;3866:9;3862:22;3841:53;:::i;:::-;3831:63;;3787:117;3715:196;;;;:::o;3917:407::-;;;4042:2;4030:9;4021:7;4017:23;4013:32;4010:2;;;4058:1;4055;4048:12;4010:2;4101:1;4126:53;4171:7;4162:6;4151:9;4147:22;4126:53;:::i;:::-;4116:63;;4072:117;4228:2;4254:53;4299:7;4290:6;4279:9;4275:22;4254:53;:::i;:::-;4244:63;;4199:118;4000:324;;;;;:::o;4330:260::-;;4437:2;4425:9;4416:7;4412:23;4408:32;4405:2;;;4453:1;4450;4443:12;4405:2;4496:1;4521:52;4565:7;4556:6;4545:9;4541:22;4521:52;:::i;:::-;4511:62;;4467:116;4395:195;;;;:::o;4596:262::-;;4704:2;4692:9;4683:7;4679:23;4675:32;4672:2;;;4720:1;4717;4710:12;4672:2;4763:1;4788:53;4833:7;4824:6;4813:9;4809:22;4788:53;:::i;:::-;4778:63;;4734:117;4662:196;;;;:::o;4864:407::-;;;4989:2;4977:9;4968:7;4964:23;4960:32;4957:2;;;5005:1;5002;4995:12;4957:2;5048:1;5073:53;5118:7;5109:6;5098:9;5094:22;5073:53;:::i;:::-;5063:63;;5019:117;5175:2;5201:53;5246:7;5237:6;5226:9;5222:22;5201:53;:::i;:::-;5191:63;;5146:118;4947:324;;;;;:::o;5277:179::-;;5367:46;5409:3;5401:6;5367:46;:::i;:::-;5445:4;5440:3;5436:14;5422:28;;5357:99;;;;:::o;5462:108::-;5539:24;5557:5;5539:24;:::i;:::-;5534:3;5527:37;5517:53;;:::o;5576:118::-;5663:24;5681:5;5663:24;:::i;:::-;5658:3;5651:37;5641:53;;:::o;5730:732::-;;5878:54;5926:5;5878:54;:::i;:::-;5948:86;6027:6;6022:3;5948:86;:::i;:::-;5941:93;;6058:56;6108:5;6058:56;:::i;:::-;6137:7;6168:1;6153:284;6178:6;6175:1;6172:13;6153:284;;;6254:6;6248:13;6281:63;6340:3;6325:13;6281:63;:::i;:::-;6274:70;;6367:60;6420:6;6367:60;:::i;:::-;6357:70;;6213:224;6200:1;6197;6193:9;6188:14;;6153:284;;;6157:14;6453:3;6446:10;;5854:608;;;;;;;:::o;6468:109::-;6549:21;6564:5;6549:21;:::i;:::-;6544:3;6537:34;6527:50;;:::o;6583:118::-;6670:24;6688:5;6670:24;:::i;:::-;6665:3;6658:37;6648:53;;:::o;6707:185::-;6821:64;6879:5;6821:64;:::i;:::-;6816:3;6809:77;6799:93;;:::o;6898:147::-;6993:45;7032:5;6993:45;:::i;:::-;6988:3;6981:58;6971:74;;:::o;7051:364::-;;7167:39;7200:5;7167:39;:::i;:::-;7222:71;7286:6;7281:3;7222:71;:::i;:::-;7215:78;;7302:52;7347:6;7342:3;7335:4;7328:5;7324:16;7302:52;:::i;:::-;7379:29;7401:6;7379:29;:::i;:::-;7374:3;7370:39;7363:46;;7143:272;;;;;:::o;7421:377::-;;7555:39;7588:5;7555:39;:::i;:::-;7610:89;7692:6;7687:3;7610:89;:::i;:::-;7603:96;;7708:52;7753:6;7748:3;7741:4;7734:5;7730:16;7708:52;:::i;:::-;7785:6;7780:3;7776:16;7769:23;;7531:267;;;;;:::o;7804:330::-;;7967:67;8031:2;8026:3;7967:67;:::i;:::-;7960:74;;8064:34;8060:1;8055:3;8051:11;8044:55;8125:2;8120:3;8116:12;8109:19;;7950:184;;;:::o;8140:367::-;;8303:67;8367:2;8362:3;8303:67;:::i;:::-;8296:74;;8400:34;8396:1;8391:3;8387:11;8380:55;8466:5;8461:2;8456:3;8452:12;8445:27;8498:2;8493:3;8489:12;8482:19;;8286:221;;;:::o;8513:366::-;;8676:67;8740:2;8735:3;8676:67;:::i;:::-;8669:74;;8773:34;8769:1;8764:3;8760:11;8753:55;8839:4;8834:2;8829:3;8825:12;8818:26;8870:2;8865:3;8861:12;8854:19;;8659:220;;;:::o;8885:382::-;;9048:67;9112:2;9107:3;9048:67;:::i;:::-;9041:74;;9145:34;9141:1;9136:3;9132:11;9125:55;9211:20;9206:2;9201:3;9197:12;9190:42;9258:2;9253:3;9249:12;9242:19;;9031:236;;;:::o;9273:367::-;;9436:67;9500:2;9495:3;9436:67;:::i;:::-;9429:74;;9533:34;9529:1;9524:3;9520:11;9513:55;9599:5;9594:2;9589:3;9585:12;9578:27;9631:2;9626:3;9622:12;9615:19;;9419:221;;;:::o;9646:366::-;;9809:67;9873:2;9868:3;9809:67;:::i;:::-;9802:74;;9906:34;9902:1;9897:3;9893:11;9886:55;9972:4;9967:2;9962:3;9958:12;9951:26;10003:2;9998:3;9994:12;9987:19;;9792:220;;;:::o;10018:330::-;;10181:67;10245:2;10240:3;10181:67;:::i;:::-;10174:74;;10278:34;10274:1;10269:3;10265:11;10258:55;10339:2;10334:3;10330:12;10323:19;;10164:184;;;:::o;10354:389::-;;10517:67;10581:2;10576:3;10517:67;:::i;:::-;10510:74;;10614:34;10610:1;10605:3;10601:11;10594:55;10680:27;10675:2;10670:3;10666:12;10659:49;10734:2;10729:3;10725:12;10718:19;;10500:243;;;:::o;10749:327::-;;10912:67;10976:2;10971:3;10912:67;:::i;:::-;10905:74;;11009:31;11005:1;11000:3;10996:11;10989:52;11067:2;11062:3;11058:12;11051:19;;10895:181;;;:::o;11082:320::-;;11245:67;11309:2;11304:3;11245:67;:::i;:::-;11238:74;;11342:24;11338:1;11333:3;11329:11;11322:45;11393:2;11388:3;11384:12;11377:19;;11228:174;;;:::o;11408:374::-;;11571:67;11635:2;11630:3;11571:67;:::i;:::-;11564:74;;11668:34;11664:1;11659:3;11655:11;11648:55;11734:12;11729:2;11724:3;11720:12;11713:34;11773:2;11768:3;11764:12;11757:19;;11554:228;;;:::o;11788:374::-;;11951:67;12015:2;12010:3;11951:67;:::i;:::-;11944:74;;12048:34;12044:1;12039:3;12035:11;12028:55;12114:12;12109:2;12104:3;12100:12;12093:34;12153:2;12148:3;12144:12;12137:19;;11934:228;;;:::o;12168:381::-;;12331:67;12395:2;12390:3;12331:67;:::i;:::-;12324:74;;12428:34;12424:1;12419:3;12415:11;12408:55;12494:19;12489:2;12484:3;12480:12;12473:41;12540:2;12535:3;12531:12;12524:19;;12314:235;;;:::o;12555:372::-;;12718:67;12782:2;12777:3;12718:67;:::i;:::-;12711:74;;12815:34;12811:1;12806:3;12802:11;12795:55;12881:10;12876:2;12871:3;12867:12;12860:32;12918:2;12913:3;12909:12;12902:19;;12701:226;;;:::o;12933:365::-;;13096:67;13160:2;13155:3;13096:67;:::i;:::-;13089:74;;13193:34;13189:1;13184:3;13180:11;13173:55;13259:3;13254:2;13249:3;13245:12;13238:25;13289:2;13284:3;13280:12;13273:19;;13079:219;;;:::o;13304:369::-;;13467:67;13531:2;13526:3;13467:67;:::i;:::-;13460:74;;13564:34;13560:1;13555:3;13551:11;13544:55;13630:7;13625:2;13620:3;13616:12;13609:29;13664:2;13659:3;13655:12;13648:19;;13450:223;;;:::o;13679:368::-;;13842:67;13906:2;13901:3;13842:67;:::i;:::-;13835:74;;13939:34;13935:1;13930:3;13926:11;13919:55;14005:6;14000:2;13995:3;13991:12;13984:28;14038:2;14033:3;14029:12;14022:19;;13825:222;;;:::o;14053:321::-;;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14313:25;14309:1;14304:3;14300:11;14293:46;14365:2;14360:3;14356:12;14349:19;;14199:175;;;:::o;14380:357::-;;14561:85;14643:2;14638:3;14561:85;:::i;:::-;14554:92;;14676:25;14672:1;14667:3;14663:11;14656:46;14728:2;14723:3;14719:12;14712:19;;14544:193;;;:::o;14743:367::-;;14906:67;14970:2;14965:3;14906:67;:::i;:::-;14899:74;;15003:34;14999:1;14994:3;14990:11;14983:55;15069:5;15064:2;15059:3;15055:12;15048:27;15101:2;15096:3;15092:12;15085:19;;14889:221;;;:::o;15116:369::-;;15279:67;15343:2;15338:3;15279:67;:::i;:::-;15272:74;;15376:34;15372:1;15367:3;15363:11;15356:55;15442:7;15437:2;15432:3;15428:12;15421:29;15476:2;15471:3;15467:12;15460:19;;15262:223;;;:::o;15491:351::-;;15672:85;15754:2;15749:3;15672:85;:::i;:::-;15665:92;;15787:19;15783:1;15778:3;15774:11;15767:40;15833:2;15828:3;15824:12;15817:19;;15655:187;;;:::o;15848:379::-;;16011:67;16075:2;16070:3;16011:67;:::i;:::-;16004:74;;16108:34;16104:1;16099:3;16095:11;16088:55;16174:17;16169:2;16164:3;16160:12;16153:39;16218:2;16213:3;16209:12;16202:19;;15994:233;;;:::o;16233:329::-;;16396:67;16460:2;16455:3;16396:67;:::i;:::-;16389:74;;16493:33;16489:1;16484:3;16480:11;16473:54;16553:2;16548:3;16544:12;16537:19;;16379:183;;;:::o;16568:118::-;16655:24;16673:5;16655:24;:::i;:::-;16650:3;16643:37;16633:53;;:::o;16692:112::-;16775:22;16791:5;16775:22;:::i;:::-;16770:3;16763:35;16753:51;;:::o;16810:967::-;;17214:148;17358:3;17214:148;:::i;:::-;17207:155;;17379:95;17470:3;17461:6;17379:95;:::i;:::-;17372:102;;17491:148;17635:3;17491:148;:::i;:::-;17484:155;;17656:95;17747:3;17738:6;17656:95;:::i;:::-;17649:102;;17768:3;17761:10;;17196:581;;;;;:::o;17783:222::-;;17914:2;17903:9;17899:18;17891:26;;17927:71;17995:1;17984:9;17980:17;17971:6;17927:71;:::i;:::-;17881:124;;;;:::o;18011:332::-;;18170:2;18159:9;18155:18;18147:26;;18183:71;18251:1;18240:9;18236:17;18227:6;18183:71;:::i;:::-;18264:72;18332:2;18321:9;18317:18;18308:6;18264:72;:::i;:::-;18137:206;;;;;:::o;18349:332::-;;18508:2;18497:9;18493:18;18485:26;;18521:71;18589:1;18578:9;18574:17;18565:6;18521:71;:::i;:::-;18602:72;18670:2;18659:9;18655:18;18646:6;18602:72;:::i;:::-;18475:206;;;;;:::o;18687:210::-;;18812:2;18801:9;18797:18;18789:26;;18825:65;18887:1;18876:9;18872:17;18863:6;18825:65;:::i;:::-;18779:118;;;;:::o;18903:222::-;;19034:2;19023:9;19019:18;19011:26;;19047:71;19115:1;19104:9;19100:17;19091:6;19047:71;:::i;:::-;19001:124;;;;:::o;19131:276::-;;19289:2;19278:9;19274:18;19266:26;;19302:98;19397:1;19386:9;19382:17;19373:6;19302:98;:::i;:::-;19256:151;;;;:::o;19413:238::-;;19552:2;19541:9;19537:18;19529:26;;19565:79;19641:1;19630:9;19626:17;19617:6;19565:79;:::i;:::-;19519:132;;;;:::o;19657:313::-;;19808:2;19797:9;19793:18;19785:26;;19857:9;19851:4;19847:20;19843:1;19832:9;19828:17;19821:47;19885:78;19958:4;19949:6;19885:78;:::i;:::-;19877:86;;19775:195;;;;:::o;19976:419::-;;20180:2;20169:9;20165:18;20157:26;;20229:9;20223:4;20219:20;20215:1;20204:9;20200:17;20193:47;20257:131;20383:4;20257:131;:::i;:::-;20249:139;;20147:248;;;:::o;20401:419::-;;20605:2;20594:9;20590:18;20582:26;;20654:9;20648:4;20644:20;20640:1;20629:9;20625:17;20618:47;20682:131;20808:4;20682:131;:::i;:::-;20674:139;;20572:248;;;:::o;20826:419::-;;21030:2;21019:9;21015:18;21007:26;;21079:9;21073:4;21069:20;21065:1;21054:9;21050:17;21043:47;21107:131;21233:4;21107:131;:::i;:::-;21099:139;;20997:248;;;:::o;21251:419::-;;21455:2;21444:9;21440:18;21432:26;;21504:9;21498:4;21494:20;21490:1;21479:9;21475:17;21468:47;21532:131;21658:4;21532:131;:::i;:::-;21524:139;;21422:248;;;:::o;21676:419::-;;21880:2;21869:9;21865:18;21857:26;;21929:9;21923:4;21919:20;21915:1;21904:9;21900:17;21893:47;21957:131;22083:4;21957:131;:::i;:::-;21949:139;;21847:248;;;:::o;22101:419::-;;22305:2;22294:9;22290:18;22282:26;;22354:9;22348:4;22344:20;22340:1;22329:9;22325:17;22318:47;22382:131;22508:4;22382:131;:::i;:::-;22374:139;;22272:248;;;:::o;22526:419::-;;22730:2;22719:9;22715:18;22707:26;;22779:9;22773:4;22769:20;22765:1;22754:9;22750:17;22743:47;22807:131;22933:4;22807:131;:::i;:::-;22799:139;;22697:248;;;:::o;22951:419::-;;23155:2;23144:9;23140:18;23132:26;;23204:9;23198:4;23194:20;23190:1;23179:9;23175:17;23168:47;23232:131;23358:4;23232:131;:::i;:::-;23224:139;;23122:248;;;:::o;23376:419::-;;23580:2;23569:9;23565:18;23557:26;;23629:9;23623:4;23619:20;23615:1;23604:9;23600:17;23593:47;23657:131;23783:4;23657:131;:::i;:::-;23649:139;;23547:248;;;:::o;23801:419::-;;24005:2;23994:9;23990:18;23982:26;;24054:9;24048:4;24044:20;24040:1;24029:9;24025:17;24018:47;24082:131;24208:4;24082:131;:::i;:::-;24074:139;;23972:248;;;:::o;24226:419::-;;24430:2;24419:9;24415:18;24407:26;;24479:9;24473:4;24469:20;24465:1;24454:9;24450:17;24443:47;24507:131;24633:4;24507:131;:::i;:::-;24499:139;;24397:248;;;:::o;24651:419::-;;24855:2;24844:9;24840:18;24832:26;;24904:9;24898:4;24894:20;24890:1;24879:9;24875:17;24868:47;24932:131;25058:4;24932:131;:::i;:::-;24924:139;;24822:248;;;:::o;25076:419::-;;25280:2;25269:9;25265:18;25257:26;;25329:9;25323:4;25319:20;25315:1;25304:9;25300:17;25293:47;25357:131;25483:4;25357:131;:::i;:::-;25349:139;;25247:248;;;:::o;25501:419::-;;25705:2;25694:9;25690:18;25682:26;;25754:9;25748:4;25744:20;25740:1;25729:9;25725:17;25718:47;25782:131;25908:4;25782:131;:::i;:::-;25774:139;;25672:248;;;:::o;25926:419::-;;26130:2;26119:9;26115:18;26107:26;;26179:9;26173:4;26169:20;26165:1;26154:9;26150:17;26143:47;26207:131;26333:4;26207:131;:::i;:::-;26199:139;;26097:248;;;:::o;26351:419::-;;26555:2;26544:9;26540:18;26532:26;;26604:9;26598:4;26594:20;26590:1;26579:9;26575:17;26568:47;26632:131;26758:4;26632:131;:::i;:::-;26624:139;;26522:248;;;:::o;26776:419::-;;26980:2;26969:9;26965:18;26957:26;;27029:9;27023:4;27019:20;27015:1;27004:9;27000:17;26993:47;27057:131;27183:4;27057:131;:::i;:::-;27049:139;;26947:248;;;:::o;27201:419::-;;27405:2;27394:9;27390:18;27382:26;;27454:9;27448:4;27444:20;27440:1;27429:9;27425:17;27418:47;27482:131;27608:4;27482:131;:::i;:::-;27474:139;;27372:248;;;:::o;27626:419::-;;27830:2;27819:9;27815:18;27807:26;;27879:9;27873:4;27869:20;27865:1;27854:9;27850:17;27843:47;27907:131;28033:4;27907:131;:::i;:::-;27899:139;;27797:248;;;:::o;28051:419::-;;28255:2;28244:9;28240:18;28232:26;;28304:9;28298:4;28294:20;28290:1;28279:9;28275:17;28268:47;28332:131;28458:4;28332:131;:::i;:::-;28324:139;;28222:248;;;:::o;28476:419::-;;28680:2;28669:9;28665:18;28657:26;;28729:9;28723:4;28719:20;28715:1;28704:9;28700:17;28693:47;28757:131;28883:4;28757:131;:::i;:::-;28749:139;;28647:248;;;:::o;28901:419::-;;29105:2;29094:9;29090:18;29082:26;;29154:9;29148:4;29144:20;29140:1;29129:9;29125:17;29118:47;29182:131;29308:4;29182:131;:::i;:::-;29174:139;;29072:248;;;:::o;29326:222::-;;29457:2;29446:9;29442:18;29434:26;;29470:71;29538:1;29527:9;29523:17;29514:6;29470:71;:::i;:::-;29424:124;;;;:::o;29554:831::-;;29855:3;29844:9;29840:19;29832:27;;29869:71;29937:1;29926:9;29922:17;29913:6;29869:71;:::i;:::-;29950:80;30026:2;30015:9;30011:18;30002:6;29950:80;:::i;:::-;30077:9;30071:4;30067:20;30062:2;30051:9;30047:18;30040:48;30105:108;30208:4;30199:6;30105:108;:::i;:::-;30097:116;;30223:72;30291:2;30280:9;30276:18;30267:6;30223:72;:::i;:::-;30305:73;30373:3;30362:9;30358:19;30349:6;30305:73;:::i;:::-;29822:563;;;;;;;;:::o;30391:214::-;;30518:2;30507:9;30503:18;30495:26;;30531:67;30595:1;30584:9;30580:17;30571:6;30531:67;:::i;:::-;30485:120;;;;:::o;30611:132::-;;30701:3;30693:11;;30731:4;30726:3;30722:14;30714:22;;30683:60;;;:::o;30749:114::-;;30850:5;30844:12;30834:22;;30823:40;;;:::o;30869:99::-;;30955:5;30949:12;30939:22;;30928:40;;;:::o;30974:113::-;;31076:4;31071:3;31067:14;31059:22;;31049:38;;;:::o;31093:184::-;;31226:6;31221:3;31214:19;31266:4;31261:3;31257:14;31242:29;;31204:73;;;;:::o;31283:169::-;;31401:6;31396:3;31389:19;31441:4;31436:3;31432:14;31417:29;;31379:73;;;;:::o;31458:148::-;;31597:3;31582:18;;31572:34;;;;:::o;31612:305::-;;31671:20;31689:1;31671:20;:::i;:::-;31666:25;;31705:20;31723:1;31705:20;:::i;:::-;31700:25;;31859:1;31791:66;31787:74;31784:1;31781:81;31778:2;;;31865:18;;:::i;:::-;31778:2;31909:1;31906;31902:9;31895:16;;31656:261;;;;:::o;31923:185::-;;31980:20;31998:1;31980:20;:::i;:::-;31975:25;;32014:20;32032:1;32014:20;:::i;:::-;32009:25;;32053:1;32043:2;;32058:18;;:::i;:::-;32043:2;32100:1;32097;32093:9;32088:14;;31965:143;;;;:::o;32114:348::-;;32177:20;32195:1;32177:20;:::i;:::-;32172:25;;32211:20;32229:1;32211:20;:::i;:::-;32206:25;;32399:1;32331:66;32327:74;32324:1;32321:81;32316:1;32309:9;32302:17;32298:105;32295:2;;;32406:18;;:::i;:::-;32295:2;32454:1;32451;32447:9;32436:20;;32162:300;;;;:::o;32468:191::-;;32528:20;32546:1;32528:20;:::i;:::-;32523:25;;32562:20;32580:1;32562:20;:::i;:::-;32557:25;;32601:1;32598;32595:8;32592:2;;;32606:18;;:::i;:::-;32592:2;32651:1;32648;32644:9;32636:17;;32513:146;;;;:::o;32665:96::-;;32731:24;32749:5;32731:24;:::i;:::-;32720:35;;32710:51;;;:::o;32767:90::-;;32844:5;32837:13;32830:21;32819:32;;32809:48;;;:::o;32863:77::-;;32929:5;32918:16;;32908:32;;;:::o;32946:149::-;;33022:66;33015:5;33011:78;33000:89;;32990:105;;;:::o;33101:126::-;;33178:42;33171:5;33167:54;33156:65;;33146:81;;;:::o;33233:77::-;;33299:5;33288:16;;33278:32;;;:::o;33316:86::-;;33391:4;33384:5;33380:16;33369:27;;33359:43;;;:::o;33408:180::-;;33518:64;33576:5;33518:64;:::i;:::-;33505:77;;33495:93;;;:::o;33594:140::-;;33704:24;33722:5;33704:24;:::i;:::-;33691:37;;33681:53;;;:::o;33740:121::-;;33831:24;33849:5;33831:24;:::i;:::-;33818:37;;33808:53;;;:::o;33867:307::-;33935:1;33945:113;33959:6;33956:1;33953:13;33945:113;;;34044:1;34039:3;34035:11;34029:18;34025:1;34020:3;34016:11;34009:39;33981:2;33978:1;33974:10;33969:15;;33945:113;;;34076:6;34073:1;34070:13;34067:2;;;34156:1;34147:6;34142:3;34138:16;34131:27;34067:2;33916:258;;;;:::o;34180:171::-;;34242:24;34260:5;34242:24;:::i;:::-;34233:33;;34288:4;34281:5;34278:15;34275:2;;;34296:18;;:::i;:::-;34275:2;34343:1;34336:5;34332:13;34325:20;;34223:128;;;:::o;34357:320::-;;34438:1;34432:4;34428:12;34418:22;;34485:1;34479:4;34475:12;34506:18;34496:2;;34562:4;34554:6;34550:17;34540:27;;34496:2;34624;34616:6;34613:14;34593:18;34590:38;34587:2;;;34643:18;;:::i;:::-;34587:2;34408:269;;;;:::o;34683:180::-;34731:77;34728:1;34721:88;34828:4;34825:1;34818:15;34852:4;34849:1;34842:15;34869:180;34917:77;34914:1;34907:88;35014:4;35011:1;35004:15;35038:4;35035:1;35028:15;35055:180;35103:77;35100:1;35093:88;35200:4;35197:1;35190:15;35224:4;35221:1;35214:15;35241:102;;35333:2;35329:7;35324:2;35317:5;35313:14;35309:28;35299:38;;35289:54;;;:::o;35349:122::-;35422:24;35440:5;35422:24;:::i;:::-;35415:5;35412:35;35402:2;;35461:1;35458;35451:12;35402:2;35392:79;:::o;35477:116::-;35547:21;35562:5;35547:21;:::i;:::-;35540:5;35537:32;35527:2;;35583:1;35580;35573:12;35527:2;35517:76;:::o;35599:122::-;35672:24;35690:5;35672:24;:::i;:::-;35665:5;35662:35;35652:2;;35711:1;35708;35701:12;35652:2;35642:79;:::o;35727:120::-;35799:23;35816:5;35799:23;:::i;:::-;35792:5;35789:34;35779:2;;35837:1;35834;35827:12;35779:2;35769:78;:::o;35853:122::-;35926:24;35944:5;35926:24;:::i;:::-;35919:5;35916:35;35906:2;;35965:1;35962;35955:12;35906:2;35896:79;:::o

Swarm Source

ipfs://7eec52f405bff4fcf9369093002ad2170ae53a642d1826d7d5df87479b71c7f5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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