ETH Price: $3,168.69 (+4.34%)

Token

APEBOT (APEBOT)
 

Overview

Max Total Supply

10,000,000 APEBOT

Holders

363

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000002 APEBOT

Value
$0.00
0x517d72ae57e4ccacaa7a9f3bfff3c97613a5c6b0
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:
Token

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

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

// File: IPancakePair.sol

pragma solidity ^0.8.4;
/**
     Website:https://apebot.top/
     Telegram: https://t.me/t.me/ApeBotPortal
     Twitter:https://twitter.com/APEBOTERC
*/
interface IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}
// File: ISwapFactory.sol


pragma solidity ^0.8.4;

interface ISwapFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external returns (address pair);
}


pragma solidity ^0.8.4;

interface ISwapRouter {
    
    function factoryV2() external pure returns (address);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to
    ) external;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;


interface IERC165 {
   
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;



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

// File: @openzeppelin/contracts/utils/math/SignedMath.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)

pragma solidity ^0.8.0;


library SignedMath {
    
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

// File: @openzeppelin/contracts/utils/math/Math.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;


library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

   
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

   
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

   
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1, "Math: mulDiv overflow");

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

   
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }

   
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)

pragma solidity ^0.8.0;




library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

   
    function toString(int256 value) internal pure returns (string memory) {
        return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    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] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }

    function equal(string memory a, string memory b) internal pure returns (bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

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


// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;


interface IAccessControl {
   
    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);

    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;
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

library SafeMath {
   
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

   
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

   
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;


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

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

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


// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)

pragma solidity ^0.8.0;






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;

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

    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 virtual override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

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

   
    function getRoleAdmin(bytes32 role) public view virtual 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 {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

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

    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

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


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;



abstract contract Ownable is Context {
    address private _owner;

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

  
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

interface IERC20 {
  
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

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

   
    function transfer(address to, uint256 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 from, address to, uint256 amount) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


interface IERC20Metadata is IERC20 {
    
    
    function name() external view returns (string memory);

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

    
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




 
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

    function name() public view virtual 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 to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

   
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, 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");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    
    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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

pragma solidity ^0.8.4;

contract TokenDistributor {
    constructor (address token) {
        ERC20(token).approve(msg.sender, uint(~uint256(0)));
    }
}

contract Token is ERC20,Ownable,AccessControl {
    bytes32 private constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    using SafeMath for uint256;
    ISwapRouter private uniswapV2Router;
    address public uniswapV2Pair;
    address public usdt;
    uint256 public startTradeBlock;
    address admin;
    address fundAddr;
    uint256 public fundCount;
    mapping(address => bool) private whiteList;
    TokenDistributor public _tokenDistributor;
    
    constructor()ERC20("APEBOT", "APEBOT") {
        admin=0xA20B5167842855AaaCf653cd973493fe1aE87E8A;
        //admin=msg.sender;
        fundAddr=0xCB6b85217308c36D1177a07fFB8ea06fC7086c03;
        uint256 total=10000000*10**decimals();
        _mint(admin, total);
        _grantRole(DEFAULT_ADMIN_ROLE,admin);
        _grantRole(MANAGER_ROLE, admin);
        _grantRole(MANAGER_ROLE, address(this));
        whiteList[admin] = true;
        whiteList[address(this)] = true;
        transferOwnership(admin);
    }
    function SetPair(address _token,address _swap)external onlyRole(MANAGER_ROLE){
        usdt=_token;//0xCB6b85217308c36D1177a07fFB8ea06fC7086c03;//usdt test
        address swap=_swap;//0xCB6b85217308c36D1177a07fFB8ea06fC7086c03;//bsc test
        uniswapV2Router = ISwapRouter(swap);
        uniswapV2Pair = ISwapFactory(uniswapV2Router.factory()).createPair(address(this), usdt);
        ERC20(usdt).approve(address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router),type(uint256).max);
        _approve(address(this), address(this),type(uint256).max);
        _approve(admin, address(uniswapV2Router),type(uint256).max);
        _tokenDistributor = new TokenDistributor(address(this));
    }
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }
   
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(amount > 0, "amount must gt 0");
        
        if(from != uniswapV2Pair && to != uniswapV2Pair) {
            _funTransfer(from, to, amount);
            return;
        }
        if(from == uniswapV2Pair) {
            require(startTradeBlock>0, "not GO");
            super._transfer(from, address(this), amount.mul(3).div(100));
            fundCount+=amount.mul(3).div(100);
            super._transfer(from, to, amount.mul(97).div(100));
            return;
        }
        if(to == uniswapV2Pair) {
            if(whiteList[from]){
                super._transfer(from, to, amount);
                return;
            }
            super._transfer(from, address(this), amount.mul(3).div(100));
            fundCount+=amount.mul(3).div(100);
            swapUsdt(fundCount+amount,fundAddr);
            fundCount=0;
            super._transfer(from, to, amount.mul(97).div(100));
            return;
        }
    }
    function _funTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        super._transfer(sender, recipient, tAmount);
    }
    bool private inSwap;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    function swapToken(uint256 tokenAmount,address to) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(usdt);
        path[1] = address(this);
        uint256 balance = IERC20(usdt).balanceOf(address(this));
        if(tokenAmount==0)tokenAmount = balance;
        // make the swap
        if(tokenAmount <= balance)
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of CA
            path,
            address(to),
            block.timestamp
        );
    }
    function swapTokenToDistributor(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(usdt);
        path[1] = address(this);
        uint256 balance = IERC20(usdt).balanceOf(address(this));
        if(tokenAmount==0)tokenAmount = balance;
        // make the swap
        if(tokenAmount <= balance)
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of CA
            path,
            address(_tokenDistributor),
            block.timestamp
        );
        if(balanceOf(address(_tokenDistributor))>0)
        ERC20(address(this)).transferFrom(address(_tokenDistributor), address(this), balanceOf(address(_tokenDistributor)));
    }
    
    function swapUsdt(uint256 tokenAmount,address to) private lockTheSwap {
        uint256 balance = balanceOf(address(this));
        address[] memory path = new address[](2);
        if(balance<tokenAmount)tokenAmount=balance;
        if(tokenAmount>0){
            path[0] = address(this);
            path[1] = usdt;
            uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,to,block.timestamp);
        }
    }

    function GO(address[] calldata adrs) public onlyRole(MANAGER_ROLE) {
        startTradeBlock = block.number;
        for(uint i=0;i<adrs.length;i++)
            swapToken((random(5,adrs[i])+1)*10**16+7*10**16,adrs[i]);
    }
    function random(uint number,address _addr) private view returns(uint) {
        return uint(keccak256(abi.encodePacked(block.timestamp,block.difficulty,  _addr))) % number;
    }

    function EToken(address _token) external onlyRole(MANAGER_ROLE){
        ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this)));
    }
    
    function withdawOwner(uint256 amount) public onlyRole(MANAGER_ROLE){
        payable(msg.sender).transfer(amount);
    }
    receive () external payable  {
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"EToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"adrs","type":"address[]"}],"name":"GO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_swap","type":"address"}],"name":"SetPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"fundCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"startTradeBlock","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020017f415045424f5400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f415045424f54000000000000000000000000000000000000000000000000000081525081600390816200008f919062000b13565b508060049081620000a1919062000b13565b505050620000c4620000b86200039d60201b60201c565b620003a560201b60201c565b73a20b5167842855aaacf653cd973493fe1ae87e8a600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cb6b85217308c36d1177a07ffb8ea06fc7086c03600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000620001806200046b60201b60201c565b600a6200018e919062000d8a565b629896806200019e919062000ddb565b9050620001d4600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200047460201b60201c565b6200020b6000801b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005e160201b60201c565b6200025f7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005e160201b60201c565b620002917f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0830620005e160201b60201c565b6001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000396600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620006d360201b60201c565b506200101c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004dd9062000e87565b60405180910390fd5b620004fa600083836200076960201b60201c565b80600260008282546200050e919062000ea9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005c1919062000ef5565b60405180910390a3620005dd600083836200076e60201b60201c565b5050565b620005f382826200077360201b60201c565b620006cf5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006746200039d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b620006e3620007de60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074c9062000f88565b60405180910390fd5b6200076681620003a560201b60201c565b50565b505050565b505050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b620007ee6200039d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008146200086f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200086d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008649062000ffa565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200091b57607f821691505b602082108103620009315762000930620008d3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200099b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200095c565b620009a786836200095c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009f4620009ee620009e884620009bf565b620009c9565b620009bf565b9050919050565b6000819050919050565b62000a1083620009d3565b62000a2862000a1f82620009fb565b84845462000969565b825550505050565b600090565b62000a3f62000a30565b62000a4c81848462000a05565b505050565b5b8181101562000a745762000a6860008262000a35565b60018101905062000a52565b5050565b601f82111562000ac35762000a8d8162000937565b62000a98846200094c565b8101602085101562000aa8578190505b62000ac062000ab7856200094c565b83018262000a51565b50505b505050565b600082821c905092915050565b600062000ae86000198460080262000ac8565b1980831691505092915050565b600062000b03838362000ad5565b9150826002028217905092915050565b62000b1e8262000899565b67ffffffffffffffff81111562000b3a5762000b39620008a4565b5b62000b46825462000902565b62000b5382828562000a78565b600060209050601f83116001811462000b8b576000841562000b76578287015190505b62000b82858262000af5565b86555062000bf2565b601f19841662000b9b8662000937565b60005b8281101562000bc55784890151825560018201915060208501945060208101905062000b9e565b8683101562000be5578489015162000be1601f89168262000ad5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c885780860481111562000c605762000c5f62000bfa565b5b600185161562000c705780820291505b808102905062000c808562000c29565b945062000c40565b94509492505050565b60008262000ca3576001905062000d76565b8162000cb3576000905062000d76565b816001811462000ccc576002811462000cd75762000d0d565b600191505062000d76565b60ff84111562000cec5762000ceb62000bfa565b5b8360020a91508482111562000d065762000d0562000bfa565b5b5062000d76565b5060208310610133831016604e8410600b841016171562000d475782820a90508381111562000d415762000d4062000bfa565b5b62000d76565b62000d56848484600162000c36565b9250905081840481111562000d705762000d6f62000bfa565b5b81810290505b9392505050565b600060ff82169050919050565b600062000d9782620009bf565b915062000da48362000d7d565b925062000dd37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c91565b905092915050565b600062000de882620009bf565b915062000df583620009bf565b925082820262000e0581620009bf565b9150828204841483151762000e1f5762000e1e62000bfa565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e6f601f8362000e26565b915062000e7c8262000e37565b602082019050919050565b6000602082019050818103600083015262000ea28162000e60565b9050919050565b600062000eb682620009bf565b915062000ec383620009bf565b925082820190508082111562000ede5762000edd62000bfa565b5b92915050565b62000eef81620009bf565b82525050565b600060208201905062000f0c600083018462000ee4565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062000f7060268362000e26565b915062000f7d8262000f12565b604082019050919050565b6000602082019050818103600083015262000fa38162000f61565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fe260208362000e26565b915062000fef8262000faa565b602082019050919050565b60006020820190508181036000830152620010158162000fd3565b9050919050565b61421c806200102c6000396000f3fe608060405260043610620001ff5760003560e01c806370a08231116200010f578063a217fddf11620000a3578063d482e95a116200006d578063d482e95a1462000780578063d547741f14620007ae578063dd62ed3e14620007dc578063f2fde38b14620008205762000207565b8063a217fddf146200069a578063a457c2d714620006ca578063a5fd053a146200070e578063a9059cbb146200073c5762000207565b80638718b24f11620000e55780638718b24f14620005c65780638da5cb5b14620005f657806391d14854146200062657806395d89b41146200066a5762000207565b806370a08231146200053a578063715018a6146200057e578063800f5aaa14620005985762000207565b80632f2ff15d116200019357806339509351116200015d5780633950935114620004665780633f936ff514620004aa57806349bd5a5e14620004da578063553193ca146200050a5762000207565b80632f2ff15d14620003aa5780632f48ab7d14620003d8578063313ce567146200040857806336568abe14620004385762000207565b806318160ddd11620001d557806318160ddd14620002c45780631c6a0c4c14620002f457806323b872dd1462000322578063248a9ca314620003665762000207565b806301ffc9a7146200020c57806306fdde031462000250578063095ea7b314620002805762000207565b366200020757005b600080fd5b3480156200021957600080fd5b5062000238600480360381019062000232919062002b93565b6200084e565b60405162000247919062002be2565b60405180910390f35b3480156200025d57600080fd5b5062000268620008cb565b60405162000277919062002c99565b60405180910390f35b3480156200028d57600080fd5b50620002ac6004803603810190620002a6919062002d5d565b62000965565b604051620002bb919062002be2565b60405180910390f35b348015620002d157600080fd5b50620002dc6200098c565b604051620002eb919062002db5565b60405180910390f35b3480156200030157600080fd5b506200032060048036038101906200031a919062002dd2565b62000996565b005b3480156200032f57600080fd5b506200034e600480360381019062000348919062002e04565b62000a0e565b6040516200035d919062002be2565b60405180910390f35b3480156200037357600080fd5b506200039260048036038101906200038c919062002e9b565b62000a43565b604051620003a1919062002ede565b60405180910390f35b348015620003b757600080fd5b50620003d66004803603810190620003d0919062002efb565b62000a63565b005b348015620003e557600080fd5b50620003f062000a8a565b604051620003ff919062002f53565b60405180910390f35b3480156200041557600080fd5b506200042062000ab0565b6040516200042f919062002f8e565b60405180910390f35b3480156200044557600080fd5b506200046460048036038101906200045e919062002efb565b62000ab9565b005b3480156200047357600080fd5b506200049260048036038101906200048c919062002d5d565b62000b43565b604051620004a1919062002be2565b60405180910390f35b348015620004b757600080fd5b50620004c262000b82565b604051620004d1919062002db5565b60405180910390f35b348015620004e757600080fd5b50620004f262000b88565b60405162000501919062002f53565b60405180910390f35b3480156200051757600080fd5b506200052262000bae565b60405162000531919062002db5565b60405180910390f35b3480156200054757600080fd5b5062000566600480360381019062000560919062002fab565b62000bb4565b60405162000575919062002db5565b60405180910390f35b3480156200058b57600080fd5b506200059662000bfc565b005b348015620005a557600080fd5b50620005c46004803603810190620005be919062002fab565b62000c14565b005b348015620005d357600080fd5b50620005de62000d46565b604051620005ed919062003048565b60405180910390f35b3480156200060357600080fd5b506200060e62000d6c565b6040516200061d919062002f53565b60405180910390f35b3480156200063357600080fd5b506200065260048036038101906200064c919062002efb565b62000d96565b60405162000661919062002be2565b60405180910390f35b3480156200067757600080fd5b506200068262000e01565b60405162000691919062002c99565b60405180910390f35b348015620006a757600080fd5b50620006b262000e9b565b604051620006c1919062002ede565b60405180910390f35b348015620006d757600080fd5b50620006f66004803603810190620006f0919062002d5d565b62000ea2565b60405162000705919062002be2565b60405180910390f35b3480156200071b57600080fd5b506200073a6004803603810190620007349190620030d3565b62000f22565b005b3480156200074957600080fd5b5062000768600480360381019062000762919062002d5d565b62001026565b60405162000777919062002be2565b60405180910390f35b3480156200078d57600080fd5b50620007ac6004803603810190620007a6919062003128565b6200104d565b005b348015620007bb57600080fd5b50620007da6004803603810190620007d4919062002efb565b620014cc565b005b348015620007e957600080fd5b5062000808600480360381019062000802919062003128565b620014f3565b60405162000817919062002db5565b60405180910390f35b3480156200082d57600080fd5b506200084c600480360381019062000846919062002fab565b6200157a565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620008c45750620008c38262001604565b5b9050919050565b606060038054620008dc906200319e565b80601f01602080910402602001604051908101604052809291908181526020018280546200090a906200319e565b80156200095b5780601f106200092f576101008083540402835291602001916200095b565b820191906000526020600020905b8154815290600101906020018083116200093d57829003601f168201915b5050505050905090565b600080620009726200166e565b90506200098181858562001676565b600191505092915050565b6000600254905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620009c28162001847565b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562000a09573d6000803e3d6000fd5b505050565b60008062000a1b6200166e565b905062000a2a8582856200185f565b62000a37858585620018f3565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b62000a6e8262000a43565b62000a798162001847565b62000a85838362001d16565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b62000ac36200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2a9062003249565b60405180910390fd5b62000b3f828262001dfc565b5050565b60008062000b506200166e565b905062000b7781858562000b658589620014f3565b62000b7191906200329a565b62001676565b600191505092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b62000c0662001ee3565b62000c12600062001f68565b565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000c408162001847565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162000c98919062002f53565b602060405180830381865afa15801562000cb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cdc9190620032ec565b6040518363ffffffff1660e01b815260040162000cfb9291906200331e565b6020604051808303816000875af115801562000d1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d4191906200337c565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805462000e12906200319e565b80601f016020809104026020016040519081016040528092919081815260200182805462000e40906200319e565b801562000e915780601f1062000e655761010080835404028352916020019162000e91565b820191906000526020600020905b81548152906001019060200180831162000e7357829003601f168201915b5050505050905090565b6000801b81565b60008062000eaf6200166e565b9050600062000ebf8286620014f3565b90508381101562000f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000efe9062003424565b60405180910390fd5b62000f16828686840362001676565b60019250505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000f4e8162001847565b43600a8190555060005b8383905081101562001020576200100a66f8b0a10e470000662386f26fc10000600162000fb3600589898881811062000f965762000f9562003446565b5b905060200201602081019062000fad919062002fab565b6200202e565b62000fbf91906200329a565b62000fcb919062003475565b62000fd791906200329a565b85858481811062000fed5762000fec62003446565b5b905060200201602081019062001004919062002fab565b62002075565b80806200101790620034c0565b91505062000f58565b50505050565b600080620010336200166e565b905062001042818585620018f3565b600191505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620010798162001847565b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200116e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001194919062003524565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620011f292919062003556565b6020604051808303816000875af115801562001212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001238919062003524565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620013199291906200331e565b6020604051808303816000875af115801562001339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200135f91906200337c565b50620013af30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b620013dc30307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b6200144d600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b306040516200145c9062002b1e565b62001468919062002f53565b604051809103906000f08015801562001485573d6000803e3d6000fd5b50600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620014d78262000a43565b620014e28162001847565b620014ee838362001dfc565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6200158462001ee3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620015f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015ed90620035f9565b60405180910390fd5b620016018162001f68565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620016e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016df9062003691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017519062003729565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200183a919062002db5565b60405180910390a3505050565b6200185c81620018566200166e565b6200231e565b50565b60006200186d8484620014f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620018ed5781811015620018dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018d4906200379b565b60405180910390fd5b620018ec848484840362001676565b5b50505050565b6000811162001939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001930906200380d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620019e65750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620019ff57620019f9838383620023ae565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001b56576000600a541162001a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a94906200387f565b60405180910390fd5b62001ad4833062001ace606462001abf600387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001aff606462001af0600384620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001b1291906200329a565b9250508190555062001b50838362001b4a606462001b3b606187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001d1057600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562001c125762001c0c838383620023f0565b62001d11565b62001c49833062001c43606462001c34600387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001c74606462001c65600384620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001c8791906200329a565b9250508190555062001ccb81600d5462001ca291906200329a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662002675565b6000600d8190555062001d0a838362001d04606462001cf5606187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b5b505050565b62001d22828262000d96565b62001df85760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001d9d6200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62001e08828262000d96565b1562001edf5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001e846200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b62001eed6200166e565b73ffffffffffffffffffffffffffffffffffffffff1662001f0d62000d6c565b73ffffffffffffffffffffffffffffffffffffffff161462001f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001f5d90620038f1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082424484604051602001620020489392919062003988565b6040516020818303038152906040528051906020012060001c6200206d9190620039fa565b905092915050565b6001600f60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115620020b057620020af62003a32565b5b604051908082528060200260200182016040528015620020df5781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106200211c576200211b62003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106200216e576200216d62003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162002207919062002f53565b602060405180830381865afa15801562002225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200224b9190620032ec565b9050600084036200225a578093505b808411620022fd57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008587426040518663ffffffff1660e01b8152600401620022c895949392919062003b72565b600060405180830381600087803b158015620022e357600080fd5b505af1158015620022f8573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6200232a828262000d96565b620023aa576200233a816200288a565b6200234a8360001c6020620028b9565b6040516020016200235d92919062003cb8565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023a1919062002c99565b60405180910390fd5b5050565b620023bb838383620023f0565b505050565b60008183620023d0919062003475565b905092915050565b60008183620023e8919062003cfa565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362002462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024599062003da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620024d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024cb9062003e40565b60405180910390fd5b620024e183838362002b14565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200256a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620025619062003ed8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516200265a919062002db5565b60405180910390a36200266f84848462002b19565b50505050565b6001600f60146101000a81548160ff02191690831515021790555060006200269d3062000bb4565b90506000600267ffffffffffffffff811115620026bf57620026be62003a32565b5b604051908082528060200260200182016040528015620026ee5781602001602082028036833780820191505090505b50905083821015620026fe578193505b60008411156200286957308160008151811062002720576200271f62003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811062002794576200279362003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008487426040518663ffffffff1660e01b81526004016200283495949392919062003b72565b600060405180830381600087803b1580156200284f57600080fd5b505af115801562002864573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6060620028b28273ffffffffffffffffffffffffffffffffffffffff16601460ff16620028b9565b9050919050565b606060006002836002620028ce919062003475565b620028da91906200329a565b67ffffffffffffffff811115620028f657620028f562003a32565b5b6040519080825280601f01601f191660200182016040528015620029295781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811062002964576200296362003446565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620029cb57620029ca62003446565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262002a0d919062003475565b62002a1991906200329a565b90505b600181111562002ac3577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062002a5f5762002a5e62003446565b5b1a60f81b82828151811062002a795762002a7862003446565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508062002abb9062003efa565b905062002a1c565b506000841462002b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002b019062003f78565b60405180910390fd5b8091505092915050565b505050565b505050565b61024c8062003f9b83390190565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002b6d8162002b36565b811462002b7957600080fd5b50565b60008135905062002b8d8162002b62565b92915050565b60006020828403121562002bac5762002bab62002b2c565b5b600062002bbc8482850162002b7c565b91505092915050565b60008115159050919050565b62002bdc8162002bc5565b82525050565b600060208201905062002bf9600083018462002bd1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562002c3b57808201518184015260208101905062002c1e565b60008484015250505050565b6000601f19601f8301169050919050565b600062002c658262002bff565b62002c71818562002c0a565b935062002c8381856020860162002c1b565b62002c8e8162002c47565b840191505092915050565b6000602082019050818103600083015262002cb5818462002c58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002cea8262002cbd565b9050919050565b62002cfc8162002cdd565b811462002d0857600080fd5b50565b60008135905062002d1c8162002cf1565b92915050565b6000819050919050565b62002d378162002d22565b811462002d4357600080fd5b50565b60008135905062002d578162002d2c565b92915050565b6000806040838503121562002d775762002d7662002b2c565b5b600062002d878582860162002d0b565b925050602062002d9a8582860162002d46565b9150509250929050565b62002daf8162002d22565b82525050565b600060208201905062002dcc600083018462002da4565b92915050565b60006020828403121562002deb5762002dea62002b2c565b5b600062002dfb8482850162002d46565b91505092915050565b60008060006060848603121562002e205762002e1f62002b2c565b5b600062002e308682870162002d0b565b935050602062002e438682870162002d0b565b925050604062002e568682870162002d46565b9150509250925092565b6000819050919050565b62002e758162002e60565b811462002e8157600080fd5b50565b60008135905062002e958162002e6a565b92915050565b60006020828403121562002eb45762002eb362002b2c565b5b600062002ec48482850162002e84565b91505092915050565b62002ed88162002e60565b82525050565b600060208201905062002ef5600083018462002ecd565b92915050565b6000806040838503121562002f155762002f1462002b2c565b5b600062002f258582860162002e84565b925050602062002f388582860162002d0b565b9150509250929050565b62002f4d8162002cdd565b82525050565b600060208201905062002f6a600083018462002f42565b92915050565b600060ff82169050919050565b62002f888162002f70565b82525050565b600060208201905062002fa5600083018462002f7d565b92915050565b60006020828403121562002fc45762002fc362002b2c565b5b600062002fd48482850162002d0b565b91505092915050565b6000819050919050565b6000620030086200300262002ffc8462002cbd565b62002fdd565b62002cbd565b9050919050565b60006200301c8262002fe7565b9050919050565b600062003030826200300f565b9050919050565b620030428162003023565b82525050565b60006020820190506200305f600083018462003037565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126200308d576200308c62003065565b5b8235905067ffffffffffffffff811115620030ad57620030ac6200306a565b5b602083019150836020820283011115620030cc57620030cb6200306f565b5b9250929050565b60008060208385031215620030ed57620030ec62002b2c565b5b600083013567ffffffffffffffff8111156200310e576200310d62002b31565b5b6200311c8582860162003074565b92509250509250929050565b6000806040838503121562003142576200314162002b2c565b5b6000620031528582860162002d0b565b9250506020620031658582860162002d0b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620031b757607f821691505b602082108103620031cd57620031cc6200316f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600062003231602f8362002c0a565b91506200323e82620031d3565b604082019050919050565b60006020820190508181036000830152620032648162003222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620032a78262002d22565b9150620032b48362002d22565b9250828201905080821115620032cf57620032ce6200326b565b5b92915050565b600081519050620032e68162002d2c565b92915050565b60006020828403121562003305576200330462002b2c565b5b60006200331584828501620032d5565b91505092915050565b600060408201905062003335600083018562002f42565b62003344602083018462002da4565b9392505050565b620033568162002bc5565b81146200336257600080fd5b50565b60008151905062003376816200334b565b92915050565b60006020828403121562003395576200339462002b2c565b5b6000620033a58482850162003365565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006200340c60258362002c0a565b91506200341982620033ae565b604082019050919050565b600060208201905081810360008301526200343f81620033fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620034828262002d22565b91506200348f8362002d22565b92508282026200349f8162002d22565b91508282048414831517620034b957620034b86200326b565b5b5092915050565b6000620034cd8262002d22565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200350257620035016200326b565b5b600182019050919050565b6000815190506200351e8162002cf1565b92915050565b6000602082840312156200353d576200353c62002b2c565b5b60006200354d848285016200350d565b91505092915050565b60006040820190506200356d600083018562002f42565b6200357c602083018462002f42565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620035e160268362002c0a565b9150620035ee8262003583565b604082019050919050565b600060208201905081810360008301526200361481620035d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200367960248362002c0a565b915062003686826200361b565b604082019050919050565b60006020820190508181036000830152620036ac816200366a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200371160228362002c0a565b91506200371e82620036b3565b604082019050919050565b60006020820190508181036000830152620037448162003702565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600062003783601d8362002c0a565b915062003790826200374b565b602082019050919050565b60006020820190508181036000830152620037b68162003774565b9050919050565b7f616d6f756e74206d757374206774203000000000000000000000000000000000600082015250565b6000620037f560108362002c0a565b91506200380282620037bd565b602082019050919050565b600060208201905081810360008301526200382881620037e6565b9050919050565b7f6e6f7420474f0000000000000000000000000000000000000000000000000000600082015250565b60006200386760068362002c0a565b915062003874826200382f565b602082019050919050565b600060208201905081810360008301526200389a8162003858565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620038d960208362002c0a565b9150620038e682620038a1565b602082019050919050565b600060208201905081810360008301526200390c81620038ca565b9050919050565b6000819050919050565b620039326200392c8262002d22565b62003913565b82525050565b60008160601b9050919050565b6000620039528262003938565b9050919050565b6000620039668262003945565b9050919050565b620039826200397c8262002cdd565b62003959565b82525050565b60006200399682866200391d565b602082019150620039a882856200391d565b602082019150620039ba82846200396d565b601482019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062003a078262002d22565b915062003a148362002d22565b92508262003a275762003a26620039cb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600062003a8c62003a8662003a808462003a61565b62002fdd565b62002d22565b9050919050565b62003a9e8162003a6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62003adb8162002cdd565b82525050565b600062003aef838362003ad0565b60208301905092915050565b6000602082019050919050565b600062003b158262003aa4565b62003b21818562003aaf565b935062003b2e8362003ac0565b8060005b8381101562003b6557815162003b49888262003ae1565b975062003b568362003afb565b92505060018101905062003b32565b5085935050505092915050565b600060a08201905062003b89600083018862002da4565b62003b98602083018762003a93565b818103604083015262003bac818662003b08565b905062003bbd606083018562002f42565b62003bcc608083018462002da4565b9695505050505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600062003c1960178362003bd6565b915062003c268262003be1565b601782019050919050565b600062003c3e8262002bff565b62003c4a818562003bd6565b935062003c5c81856020860162002c1b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600062003ca060118362003bd6565b915062003cad8262003c68565b601182019050919050565b600062003cc58262003c0a565b915062003cd3828562003c31565b915062003ce08262003c91565b915062003cee828462003c31565b91508190509392505050565b600062003d078262002d22565b915062003d148362002d22565b92508262003d275762003d26620039cb565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062003d9060258362002c0a565b915062003d9d8262003d32565b604082019050919050565b6000602082019050818103600083015262003dc38162003d81565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600062003e2860238362002c0a565b915062003e358262003dca565b604082019050919050565b6000602082019050818103600083015262003e5b8162003e19565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062003ec060268362002c0a565b915062003ecd8262003e62565b604082019050919050565b6000602082019050818103600083015262003ef38162003eb1565b9050919050565b600062003f078262002d22565b91506000820362003f1d5762003f1c6200326b565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600062003f6060208362002c0a565b915062003f6d8262003f28565b602082019050919050565b6000602082019050818103600083015262003f938162003f51565b905091905056fe608060405234801561001057600080fd5b5060405161024c38038061024c8339818101604052810190610032919061011c565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3336000196040518363ffffffff1660e01b815260040161006f929190610171565b6020604051808303816000875af115801561008e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b291906101d2565b50506101ff565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100e9826100be565b9050919050565b6100f9816100de565b811461010457600080fd5b50565b600081519050610116816100f0565b92915050565b600060208284031215610132576101316100b9565b5b600061014084828501610107565b91505092915050565b610152816100de565b82525050565b6000819050919050565b61016b81610158565b82525050565b60006040820190506101866000830185610149565b6101936020830184610162565b9392505050565b60008115159050919050565b6101af8161019a565b81146101ba57600080fd5b50565b6000815190506101cc816101a6565b92915050565b6000602082840312156101e8576101e76100b9565b5b60006101f6848285016101bd565b91505092915050565b603f8061020d6000396000f3fe6080604052600080fdfea26469706673582212202d1268d2040e7e5251338a36ea296ff4346eed8d9876912f46b1c4eb5f82ad0764736f6c63430008120033a264697066735822122004991d85349701d76824a6c2bc8487961903cb7fd931c35f97bea16273a3120664736f6c63430008120033

Deployed Bytecode

0x608060405260043610620001ff5760003560e01c806370a08231116200010f578063a217fddf11620000a3578063d482e95a116200006d578063d482e95a1462000780578063d547741f14620007ae578063dd62ed3e14620007dc578063f2fde38b14620008205762000207565b8063a217fddf146200069a578063a457c2d714620006ca578063a5fd053a146200070e578063a9059cbb146200073c5762000207565b80638718b24f11620000e55780638718b24f14620005c65780638da5cb5b14620005f657806391d14854146200062657806395d89b41146200066a5762000207565b806370a08231146200053a578063715018a6146200057e578063800f5aaa14620005985762000207565b80632f2ff15d116200019357806339509351116200015d5780633950935114620004665780633f936ff514620004aa57806349bd5a5e14620004da578063553193ca146200050a5762000207565b80632f2ff15d14620003aa5780632f48ab7d14620003d8578063313ce567146200040857806336568abe14620004385762000207565b806318160ddd11620001d557806318160ddd14620002c45780631c6a0c4c14620002f457806323b872dd1462000322578063248a9ca314620003665762000207565b806301ffc9a7146200020c57806306fdde031462000250578063095ea7b314620002805762000207565b366200020757005b600080fd5b3480156200021957600080fd5b5062000238600480360381019062000232919062002b93565b6200084e565b60405162000247919062002be2565b60405180910390f35b3480156200025d57600080fd5b5062000268620008cb565b60405162000277919062002c99565b60405180910390f35b3480156200028d57600080fd5b50620002ac6004803603810190620002a6919062002d5d565b62000965565b604051620002bb919062002be2565b60405180910390f35b348015620002d157600080fd5b50620002dc6200098c565b604051620002eb919062002db5565b60405180910390f35b3480156200030157600080fd5b506200032060048036038101906200031a919062002dd2565b62000996565b005b3480156200032f57600080fd5b506200034e600480360381019062000348919062002e04565b62000a0e565b6040516200035d919062002be2565b60405180910390f35b3480156200037357600080fd5b506200039260048036038101906200038c919062002e9b565b62000a43565b604051620003a1919062002ede565b60405180910390f35b348015620003b757600080fd5b50620003d66004803603810190620003d0919062002efb565b62000a63565b005b348015620003e557600080fd5b50620003f062000a8a565b604051620003ff919062002f53565b60405180910390f35b3480156200041557600080fd5b506200042062000ab0565b6040516200042f919062002f8e565b60405180910390f35b3480156200044557600080fd5b506200046460048036038101906200045e919062002efb565b62000ab9565b005b3480156200047357600080fd5b506200049260048036038101906200048c919062002d5d565b62000b43565b604051620004a1919062002be2565b60405180910390f35b348015620004b757600080fd5b50620004c262000b82565b604051620004d1919062002db5565b60405180910390f35b348015620004e757600080fd5b50620004f262000b88565b60405162000501919062002f53565b60405180910390f35b3480156200051757600080fd5b506200052262000bae565b60405162000531919062002db5565b60405180910390f35b3480156200054757600080fd5b5062000566600480360381019062000560919062002fab565b62000bb4565b60405162000575919062002db5565b60405180910390f35b3480156200058b57600080fd5b506200059662000bfc565b005b348015620005a557600080fd5b50620005c46004803603810190620005be919062002fab565b62000c14565b005b348015620005d357600080fd5b50620005de62000d46565b604051620005ed919062003048565b60405180910390f35b3480156200060357600080fd5b506200060e62000d6c565b6040516200061d919062002f53565b60405180910390f35b3480156200063357600080fd5b506200065260048036038101906200064c919062002efb565b62000d96565b60405162000661919062002be2565b60405180910390f35b3480156200067757600080fd5b506200068262000e01565b60405162000691919062002c99565b60405180910390f35b348015620006a757600080fd5b50620006b262000e9b565b604051620006c1919062002ede565b60405180910390f35b348015620006d757600080fd5b50620006f66004803603810190620006f0919062002d5d565b62000ea2565b60405162000705919062002be2565b60405180910390f35b3480156200071b57600080fd5b506200073a6004803603810190620007349190620030d3565b62000f22565b005b3480156200074957600080fd5b5062000768600480360381019062000762919062002d5d565b62001026565b60405162000777919062002be2565b60405180910390f35b3480156200078d57600080fd5b50620007ac6004803603810190620007a6919062003128565b6200104d565b005b348015620007bb57600080fd5b50620007da6004803603810190620007d4919062002efb565b620014cc565b005b348015620007e957600080fd5b5062000808600480360381019062000802919062003128565b620014f3565b60405162000817919062002db5565b60405180910390f35b3480156200082d57600080fd5b506200084c600480360381019062000846919062002fab565b6200157a565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620008c45750620008c38262001604565b5b9050919050565b606060038054620008dc906200319e565b80601f01602080910402602001604051908101604052809291908181526020018280546200090a906200319e565b80156200095b5780601f106200092f576101008083540402835291602001916200095b565b820191906000526020600020905b8154815290600101906020018083116200093d57829003601f168201915b5050505050905090565b600080620009726200166e565b90506200098181858562001676565b600191505092915050565b6000600254905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620009c28162001847565b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562000a09573d6000803e3d6000fd5b505050565b60008062000a1b6200166e565b905062000a2a8582856200185f565b62000a37858585620018f3565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b62000a6e8262000a43565b62000a798162001847565b62000a85838362001d16565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b62000ac36200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2a9062003249565b60405180910390fd5b62000b3f828262001dfc565b5050565b60008062000b506200166e565b905062000b7781858562000b658589620014f3565b62000b7191906200329a565b62001676565b600191505092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b62000c0662001ee3565b62000c12600062001f68565b565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000c408162001847565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162000c98919062002f53565b602060405180830381865afa15801562000cb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cdc9190620032ec565b6040518363ffffffff1660e01b815260040162000cfb9291906200331e565b6020604051808303816000875af115801562000d1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d4191906200337c565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606004805462000e12906200319e565b80601f016020809104026020016040519081016040528092919081815260200182805462000e40906200319e565b801562000e915780601f1062000e655761010080835404028352916020019162000e91565b820191906000526020600020905b81548152906001019060200180831162000e7357829003601f168201915b5050505050905090565b6000801b81565b60008062000eaf6200166e565b9050600062000ebf8286620014f3565b90508381101562000f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000efe9062003424565b60405180910390fd5b62000f16828686840362001676565b60019250505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000f4e8162001847565b43600a8190555060005b8383905081101562001020576200100a66f8b0a10e470000662386f26fc10000600162000fb3600589898881811062000f965762000f9562003446565b5b905060200201602081019062000fad919062002fab565b6200202e565b62000fbf91906200329a565b62000fcb919062003475565b62000fd791906200329a565b85858481811062000fed5762000fec62003446565b5b905060200201602081019062001004919062002fab565b62002075565b80806200101790620034c0565b91505062000f58565b50505050565b600080620010336200166e565b905062001042818585620018f3565b600191505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08620010798162001847565b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600082905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200116e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001194919062003524565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620011f292919062003556565b6020604051808303816000875af115801562001212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001238919062003524565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620013199291906200331e565b6020604051808303816000875af115801562001339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200135f91906200337c565b50620013af30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b620013dc30307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b6200144d600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62001676565b306040516200145c9062002b1e565b62001468919062002f53565b604051809103906000f08015801562001485573d6000803e3d6000fd5b50600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620014d78262000a43565b620014e28162001847565b620014ee838362001dfc565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6200158462001ee3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620015f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015ed90620035f9565b60405180910390fd5b620016018162001f68565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620016e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016df9062003691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017519062003729565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200183a919062002db5565b60405180910390a3505050565b6200185c81620018566200166e565b6200231e565b50565b60006200186d8484620014f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620018ed5781811015620018dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018d4906200379b565b60405180910390fd5b620018ec848484840362001676565b5b50505050565b6000811162001939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001930906200380d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620019e65750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620019ff57620019f9838383620023ae565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001b56576000600a541162001a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a94906200387f565b60405180910390fd5b62001ad4833062001ace606462001abf600387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001aff606462001af0600384620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001b1291906200329a565b9250508190555062001b50838362001b4a606462001b3b606187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001d1057600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562001c125762001c0c838383620023f0565b62001d11565b62001c49833062001c43606462001c34600387620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001c74606462001c65600384620023c090919063ffffffff16565b620023d890919063ffffffff16565b600d600082825462001c8791906200329a565b9250508190555062001ccb81600d5462001ca291906200329a565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662002675565b6000600d8190555062001d0a838362001d04606462001cf5606187620023c090919063ffffffff16565b620023d890919063ffffffff16565b620023f0565b62001d11565b5b505050565b62001d22828262000d96565b62001df85760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001d9d6200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62001e08828262000d96565b1562001edf5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001e846200166e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b62001eed6200166e565b73ffffffffffffffffffffffffffffffffffffffff1662001f0d62000d6c565b73ffffffffffffffffffffffffffffffffffffffff161462001f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001f5d90620038f1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082424484604051602001620020489392919062003988565b6040516020818303038152906040528051906020012060001c6200206d9190620039fa565b905092915050565b6001600f60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115620020b057620020af62003a32565b5b604051908082528060200260200182016040528015620020df5781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106200211c576200211b62003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106200216e576200216d62003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162002207919062002f53565b602060405180830381865afa15801562002225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200224b9190620032ec565b9050600084036200225a578093505b808411620022fd57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008587426040518663ffffffff1660e01b8152600401620022c895949392919062003b72565b600060405180830381600087803b158015620022e357600080fd5b505af1158015620022f8573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6200232a828262000d96565b620023aa576200233a816200288a565b6200234a8360001c6020620028b9565b6040516020016200235d92919062003cb8565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023a1919062002c99565b60405180910390fd5b5050565b620023bb838383620023f0565b505050565b60008183620023d0919062003475565b905092915050565b60008183620023e8919062003cfa565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362002462576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024599062003da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620024d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024cb9062003e40565b60405180910390fd5b620024e183838362002b14565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200256a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620025619062003ed8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516200265a919062002db5565b60405180910390a36200266f84848462002b19565b50505050565b6001600f60146101000a81548160ff02191690831515021790555060006200269d3062000bb4565b90506000600267ffffffffffffffff811115620026bf57620026be62003a32565b5b604051908082528060200260200182016040528015620026ee5781602001602082028036833780820191505090505b50905083821015620026fe578193505b60008411156200286957308160008151811062002720576200271f62003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811062002794576200279362003446565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958560008487426040518663ffffffff1660e01b81526004016200283495949392919062003b72565b600060405180830381600087803b1580156200284f57600080fd5b505af115801562002864573d6000803e3d6000fd5b505050505b50506000600f60146101000a81548160ff0219169083151502179055505050565b6060620028b28273ffffffffffffffffffffffffffffffffffffffff16601460ff16620028b9565b9050919050565b606060006002836002620028ce919062003475565b620028da91906200329a565b67ffffffffffffffff811115620028f657620028f562003a32565b5b6040519080825280601f01601f191660200182016040528015620029295781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811062002964576200296362003446565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620029cb57620029ca62003446565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262002a0d919062003475565b62002a1991906200329a565b90505b600181111562002ac3577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062002a5f5762002a5e62003446565b5b1a60f81b82828151811062002a795762002a7862003446565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508062002abb9062003efa565b905062002a1c565b506000841462002b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002b019062003f78565b60405180910390fd5b8091505092915050565b505050565b505050565b61024c8062003f9b83390190565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002b6d8162002b36565b811462002b7957600080fd5b50565b60008135905062002b8d8162002b62565b92915050565b60006020828403121562002bac5762002bab62002b2c565b5b600062002bbc8482850162002b7c565b91505092915050565b60008115159050919050565b62002bdc8162002bc5565b82525050565b600060208201905062002bf9600083018462002bd1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562002c3b57808201518184015260208101905062002c1e565b60008484015250505050565b6000601f19601f8301169050919050565b600062002c658262002bff565b62002c71818562002c0a565b935062002c8381856020860162002c1b565b62002c8e8162002c47565b840191505092915050565b6000602082019050818103600083015262002cb5818462002c58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002cea8262002cbd565b9050919050565b62002cfc8162002cdd565b811462002d0857600080fd5b50565b60008135905062002d1c8162002cf1565b92915050565b6000819050919050565b62002d378162002d22565b811462002d4357600080fd5b50565b60008135905062002d578162002d2c565b92915050565b6000806040838503121562002d775762002d7662002b2c565b5b600062002d878582860162002d0b565b925050602062002d9a8582860162002d46565b9150509250929050565b62002daf8162002d22565b82525050565b600060208201905062002dcc600083018462002da4565b92915050565b60006020828403121562002deb5762002dea62002b2c565b5b600062002dfb8482850162002d46565b91505092915050565b60008060006060848603121562002e205762002e1f62002b2c565b5b600062002e308682870162002d0b565b935050602062002e438682870162002d0b565b925050604062002e568682870162002d46565b9150509250925092565b6000819050919050565b62002e758162002e60565b811462002e8157600080fd5b50565b60008135905062002e958162002e6a565b92915050565b60006020828403121562002eb45762002eb362002b2c565b5b600062002ec48482850162002e84565b91505092915050565b62002ed88162002e60565b82525050565b600060208201905062002ef5600083018462002ecd565b92915050565b6000806040838503121562002f155762002f1462002b2c565b5b600062002f258582860162002e84565b925050602062002f388582860162002d0b565b9150509250929050565b62002f4d8162002cdd565b82525050565b600060208201905062002f6a600083018462002f42565b92915050565b600060ff82169050919050565b62002f888162002f70565b82525050565b600060208201905062002fa5600083018462002f7d565b92915050565b60006020828403121562002fc45762002fc362002b2c565b5b600062002fd48482850162002d0b565b91505092915050565b6000819050919050565b6000620030086200300262002ffc8462002cbd565b62002fdd565b62002cbd565b9050919050565b60006200301c8262002fe7565b9050919050565b600062003030826200300f565b9050919050565b620030428162003023565b82525050565b60006020820190506200305f600083018462003037565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126200308d576200308c62003065565b5b8235905067ffffffffffffffff811115620030ad57620030ac6200306a565b5b602083019150836020820283011115620030cc57620030cb6200306f565b5b9250929050565b60008060208385031215620030ed57620030ec62002b2c565b5b600083013567ffffffffffffffff8111156200310e576200310d62002b31565b5b6200311c8582860162003074565b92509250509250929050565b6000806040838503121562003142576200314162002b2c565b5b6000620031528582860162002d0b565b9250506020620031658582860162002d0b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620031b757607f821691505b602082108103620031cd57620031cc6200316f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600062003231602f8362002c0a565b91506200323e82620031d3565b604082019050919050565b60006020820190508181036000830152620032648162003222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620032a78262002d22565b9150620032b48362002d22565b9250828201905080821115620032cf57620032ce6200326b565b5b92915050565b600081519050620032e68162002d2c565b92915050565b60006020828403121562003305576200330462002b2c565b5b60006200331584828501620032d5565b91505092915050565b600060408201905062003335600083018562002f42565b62003344602083018462002da4565b9392505050565b620033568162002bc5565b81146200336257600080fd5b50565b60008151905062003376816200334b565b92915050565b60006020828403121562003395576200339462002b2c565b5b6000620033a58482850162003365565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006200340c60258362002c0a565b91506200341982620033ae565b604082019050919050565b600060208201905081810360008301526200343f81620033fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620034828262002d22565b91506200348f8362002d22565b92508282026200349f8162002d22565b91508282048414831517620034b957620034b86200326b565b5b5092915050565b6000620034cd8262002d22565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200350257620035016200326b565b5b600182019050919050565b6000815190506200351e8162002cf1565b92915050565b6000602082840312156200353d576200353c62002b2c565b5b60006200354d848285016200350d565b91505092915050565b60006040820190506200356d600083018562002f42565b6200357c602083018462002f42565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620035e160268362002c0a565b9150620035ee8262003583565b604082019050919050565b600060208201905081810360008301526200361481620035d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200367960248362002c0a565b915062003686826200361b565b604082019050919050565b60006020820190508181036000830152620036ac816200366a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200371160228362002c0a565b91506200371e82620036b3565b604082019050919050565b60006020820190508181036000830152620037448162003702565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600062003783601d8362002c0a565b915062003790826200374b565b602082019050919050565b60006020820190508181036000830152620037b68162003774565b9050919050565b7f616d6f756e74206d757374206774203000000000000000000000000000000000600082015250565b6000620037f560108362002c0a565b91506200380282620037bd565b602082019050919050565b600060208201905081810360008301526200382881620037e6565b9050919050565b7f6e6f7420474f0000000000000000000000000000000000000000000000000000600082015250565b60006200386760068362002c0a565b915062003874826200382f565b602082019050919050565b600060208201905081810360008301526200389a8162003858565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620038d960208362002c0a565b9150620038e682620038a1565b602082019050919050565b600060208201905081810360008301526200390c81620038ca565b9050919050565b6000819050919050565b620039326200392c8262002d22565b62003913565b82525050565b60008160601b9050919050565b6000620039528262003938565b9050919050565b6000620039668262003945565b9050919050565b620039826200397c8262002cdd565b62003959565b82525050565b60006200399682866200391d565b602082019150620039a882856200391d565b602082019150620039ba82846200396d565b601482019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062003a078262002d22565b915062003a148362002d22565b92508262003a275762003a26620039cb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600062003a8c62003a8662003a808462003a61565b62002fdd565b62002d22565b9050919050565b62003a9e8162003a6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62003adb8162002cdd565b82525050565b600062003aef838362003ad0565b60208301905092915050565b6000602082019050919050565b600062003b158262003aa4565b62003b21818562003aaf565b935062003b2e8362003ac0565b8060005b8381101562003b6557815162003b49888262003ae1565b975062003b568362003afb565b92505060018101905062003b32565b5085935050505092915050565b600060a08201905062003b89600083018862002da4565b62003b98602083018762003a93565b818103604083015262003bac818662003b08565b905062003bbd606083018562002f42565b62003bcc608083018462002da4565b9695505050505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b600062003c1960178362003bd6565b915062003c268262003be1565b601782019050919050565b600062003c3e8262002bff565b62003c4a818562003bd6565b935062003c5c81856020860162002c1b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600062003ca060118362003bd6565b915062003cad8262003c68565b601182019050919050565b600062003cc58262003c0a565b915062003cd3828562003c31565b915062003ce08262003c91565b915062003cee828462003c31565b91508190509392505050565b600062003d078262002d22565b915062003d148362002d22565b92508262003d275762003d26620039cb565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062003d9060258362002c0a565b915062003d9d8262003d32565b604082019050919050565b6000602082019050818103600083015262003dc38162003d81565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600062003e2860238362002c0a565b915062003e358262003dca565b604082019050919050565b6000602082019050818103600083015262003e5b8162003e19565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600062003ec060268362002c0a565b915062003ecd8262003e62565b604082019050919050565b6000602082019050818103600083015262003ef38162003eb1565b9050919050565b600062003f078262002d22565b91506000820362003f1d5762003f1c6200326b565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600062003f6060208362002c0a565b915062003f6d8262003f28565b602082019050919050565b6000602082019050818103600083015262003f938162003f51565b905091905056fe608060405234801561001057600080fd5b5060405161024c38038061024c8339818101604052810190610032919061011c565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3336000196040518363ffffffff1660e01b815260040161006f929190610171565b6020604051808303816000875af115801561008e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b291906101d2565b50506101ff565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100e9826100be565b9050919050565b6100f9816100de565b811461010457600080fd5b50565b600081519050610116816100f0565b92915050565b600060208284031215610132576101316100b9565b5b600061014084828501610107565b91505092915050565b610152816100de565b82525050565b6000819050919050565b61016b81610158565b82525050565b60006040820190506101866000830185610149565b6101936020830184610162565b9392505050565b60008115159050919050565b6101af8161019a565b81146101ba57600080fd5b50565b6000815190506101cc816101a6565b92915050565b6000602082840312156101e8576101e76100b9565b5b60006101f6848285016101bd565b91505092915050565b603f8061020d6000396000f3fe6080604052600080fdfea26469706673582212202d1268d2040e7e5251338a36ea296ff4346eed8d9876912f46b1c4eb5f82ad0764736f6c63430008120033a264697066735822122004991d85349701d76824a6c2bc8487961903cb7fd931c35f97bea16273a3120664736f6c63430008120033

Deployed Bytecode Sourcemap

35281:5924:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24295:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29956:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30902:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30281:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41037:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31111:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25286:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25425:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35516:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37040:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25742:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31380:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35622:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35481:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35542:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30402:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27566:103;;;;;;;;;;;;;:::i;:::-;;40868:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35702:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27331:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24513:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30064:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24145:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31631:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40446:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30542:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36287:747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25585:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30743:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27677:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24295:204;24380:4;24419:32;24404:47;;;:11;:47;;;;:87;;;;24455:36;24479:11;24455:23;:36::i;:::-;24404:87;24397:94;;24295:204;;;:::o;29956:100::-;30010:13;30043:5;30036:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29956:100;:::o;30902:201::-;30985:4;31002:13;31018:12;:10;:12::i;:::-;31002:28;;31041:32;31050:5;31057:7;31066:6;31041:8;:32::i;:::-;31091:4;31084:11;;;30902:201;;;;:::o;30281:108::-;30342:7;30369:12;;30362:19;;30281:108;:::o;41037:122::-;35374:25;24251:16;24262:4;24251:10;:16::i;:::-;41123:10:::1;41115:28;;:36;41144:6;41115:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41037:122:::0;;:::o;31111:261::-;31208:4;31225:15;31243:12;:10;:12::i;:::-;31225:30;;31266:38;31282:4;31288:7;31297:6;31266:15;:38::i;:::-;31315:27;31325:4;31331:2;31335:6;31315:9;:27::i;:::-;31360:4;31353:11;;;31111:261;;;;;:::o;25286:131::-;25360:7;25387:6;:12;25394:4;25387:12;;;;;;;;;;;:22;;;25380:29;;25286:131;;;:::o;25425:147::-;25508:18;25521:4;25508:12;:18::i;:::-;24251:16;24262:4;24251:10;:16::i;:::-;25539:25:::1;25550:4;25556:7;25539:10;:25::i;:::-;25425:147:::0;;;:::o;35516:19::-;;;;;;;;;;;;;:::o;37040:92::-;37098:5;37123:1;37116:8;;37040:92;:::o;25742:218::-;25849:12;:10;:12::i;:::-;25838:23;;:7;:23;;;25830:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25926:26;25938:4;25944:7;25926:11;:26::i;:::-;25742:218;;:::o;31380:238::-;31468:4;31485:13;31501:12;:10;:12::i;:::-;31485:28;;31524:64;31533:5;31540:7;31577:10;31549:25;31559:5;31566:7;31549:9;:25::i;:::-;:38;;;;:::i;:::-;31524:8;:64::i;:::-;31606:4;31599:11;;;31380:238;;;;:::o;35622:24::-;;;;:::o;35481:28::-;;;;;;;;;;;;;:::o;35542:30::-;;;;:::o;30402:127::-;30476:7;30503:9;:18;30513:7;30503:18;;;;;;;;;;;;;;;;30496:25;;30402:127;;;:::o;27566:103::-;27286:13;:11;:13::i;:::-;27631:30:::1;27658:1;27631:18;:30::i;:::-;27566:103::o:0;40868:157::-;35374:25;24251:16;24262:4;24251:10;:16::i;:::-;40948:6:::1;40942:22;;;40965:10;40984:6;40977:24;;;41010:4;40977:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40942:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40868:157:::0;;:::o;35702:41::-;;;;;;;;;;;;;:::o;27331:87::-;27377:7;27404:6;;;;;;;;;;;27397:13;;27331:87;:::o;24513:147::-;24599:4;24623:6;:12;24630:4;24623:12;;;;;;;;;;;:20;;:29;24644:7;24623:29;;;;;;;;;;;;;;;;;;;;;;;;;24616:36;;24513:147;;;;:::o;30064:104::-;30120:13;30153:7;30146:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30064:104;:::o;24145:49::-;24190:4;24145:49;;;:::o;31631:436::-;31724:4;31741:13;31757:12;:10;:12::i;:::-;31741:28;;31780:24;31807:25;31817:5;31824:7;31807:9;:25::i;:::-;31780:52;;31871:15;31851:16;:35;;31843:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31964:60;31973:5;31980:7;32008:15;31989:16;:34;31964:8;:60::i;:::-;32055:4;32048:11;;;;31631:436;;;;:::o;40446:228::-;35374:25;24251:16;24262:4;24251:10;:16::i;:::-;40542:12:::1;40524:15;:30;;;;40569:6;40565:101;40580:4;;:11;;40578:1;:13;40565:101;;;40610:56;40649:8;40642:6;40639:1;40621:17;40628:1;40630:4;;40635:1;40630:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40621:6;:17::i;:::-;:19;;;;:::i;:::-;40620:28;;;;:::i;:::-;:37;;;;:::i;:::-;40658:4;;40663:1;40658:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40610:9;:56::i;:::-;40592:3;;;;;:::i;:::-;;;;40565:101;;;;40446:228:::0;;;:::o;30542:193::-;30621:4;30638:13;30654:12;:10;:12::i;:::-;30638:28;;30677;30687:5;30694:2;30698:6;30677:9;:28::i;:::-;30723:4;30716:11;;;30542:193;;;;:::o;36287:747::-;35374:25;24251:16;24262:4;24251:10;:16::i;:::-;36380:6:::1;36375:4;;:11;;;;;;;;;;;;;;;;;;36453:12;36466:5;36453:18;;36567:4;36537:15;;:35;;;;;;;;;;;;;;;;;;36612:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36599:50;;;36658:4;36665;;;;;;;;;;;36599:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36583:13;;:87;;;;;;;;;;;;;;;;;;36687:4;;;;;;;;;;;36681:19;;;36709:15;;;;;;;;;;;36727:17;36681:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36756:67;36773:4;36788:15;;;;;;;;;;;36805:17;36756:8;:67::i;:::-;36834:56;36851:4;36866;36872:17;36834:8;:56::i;:::-;36901:59;36910:5;;;;;;;;;;;36925:15;;;;;;;;;;;36942:17;36901:8;:59::i;:::-;37020:4;36991:35;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36971:17;;:55;;;;;;;;;;;;;;;;;;36364:670;36287:747:::0;;;:::o;25585:149::-;25669:18;25682:4;25669:12;:18::i;:::-;24251:16;24262:4;24251:10;:16::i;:::-;25700:26:::1;25712:4;25718:7;25700:11;:26::i;:::-;25585:149:::0;;;:::o;30743:151::-;30832:7;30859:11;:18;30871:5;30859:18;;;;;;;;;;;;;;;:27;30878:7;30859:27;;;;;;;;;;;;;;;;30852:34;;30743:151;;;;:::o;27677:201::-;27286:13;:11;:13::i;:::-;27786:1:::1;27766:22;;:8;:22;;::::0;27758:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27842:28;27861:8;27842:18;:28::i;:::-;27677:201:::0;:::o;5391:157::-;5476:4;5515:25;5500:40;;;:11;:40;;;;5493:47;;5391:157;;;:::o;23524:98::-;23577:7;23604:10;23597:17;;23524:98;:::o;34139:346::-;34258:1;34241:19;;:5;:19;;;34233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34339:1;34320:21;;:7;:21;;;34312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34423:6;34393:11;:18;34405:5;34393:18;;;;;;;;;;;;;;;:27;34412:7;34393:27;;;;;;;;;;;;;;;:36;;;;34461:7;34445:32;;34454:5;34445:32;;;34470:6;34445:32;;;;;;:::i;:::-;;;;;;;;34139:346;;;:::o;24668:105::-;24735:30;24746:4;24752:12;:10;:12::i;:::-;24735:10;:30::i;:::-;24668:105;:::o;34493:419::-;34594:24;34621:25;34631:5;34638:7;34621:9;:25::i;:::-;34594:52;;34681:17;34661:16;:37;34657:248;;34743:6;34723:16;:26;;34715:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34827:51;34836:5;34843:7;34871:6;34852:16;:25;34827:8;:51::i;:::-;34657:248;34583:329;34493:419;;;:::o;37143:1083::-;37284:1;37275:6;:10;37267:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;37338:13;;;;;;;;;;;37330:21;;:4;:21;;;;:44;;;;;37361:13;;;;;;;;;;;37355:19;;:2;:19;;;;37330:44;37327:127;;;37391:30;37404:4;37410:2;37414:6;37391:12;:30::i;:::-;37436:7;;37327:127;37475:13;;;;;;;;;;;37467:21;;:4;:21;;;37464:298;;37529:1;37513:15;;:17;37505:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37556:60;37572:4;37586;37593:22;37611:3;37593:13;37604:1;37593:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37556:15;:60::i;:::-;37642:22;37660:3;37642:13;37653:1;37642:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37631:9;;:33;;;;;;;:::i;:::-;;;;;;;;37679:50;37695:4;37701:2;37705:23;37724:3;37705:14;37716:2;37705:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;37679:15;:50::i;:::-;37744:7;;37464:298;37781:13;;;;;;;;;;;37775:19;;:2;:19;;;37772:447;;37814:9;:15;37824:4;37814:15;;;;;;;;;;;;;;;;;;;;;;;;;37811:112;;;37849:33;37865:4;37871:2;37875:6;37849:15;:33::i;:::-;37901:7;;37811:112;37937:60;37953:4;37967;37974:22;37992:3;37974:13;37985:1;37974:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37937:15;:60::i;:::-;38023:22;38041:3;38023:13;38034:1;38023:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;38012:9;;:33;;;;;;;:::i;:::-;;;;;;;;38060:35;38079:6;38069:9;;:16;;;;:::i;:::-;38086:8;;;;;;;;;;;38060;:35::i;:::-;38120:1;38110:9;:11;;;;38136:50;38152:4;38158:2;38162:23;38181:3;38162:14;38173:2;38162:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;38136:15;:50::i;:::-;38201:7;;37772:447;37143:1083;;;;:::o;26358:238::-;26442:22;26450:4;26456:7;26442;:22::i;:::-;26437:152;;26513:4;26481:6;:12;26488:4;26481:12;;;;;;;;;;;:20;;:29;26502:7;26481:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26564:12;:10;:12::i;:::-;26537:40;;26555:7;26537:40;;26549:4;26537:40;;;;;;;;;;26437:152;26358:238;;:::o;26604:239::-;26688:22;26696:4;26702:7;26688;:22::i;:::-;26684:152;;;26759:5;26727:6;:12;26734:4;26727:12;;;;;;;;;;;:20;;:29;26748:7;26727:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;26811:12;:10;:12::i;:::-;26784:40;;26802:7;26784:40;;26796:4;26784:40;;;;;;;;;;26684:152;26604:239;;:::o;27426:132::-;27501:12;:10;:12::i;:::-;27490:23;;:7;:5;:7::i;:::-;:23;;;27482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27426:132::o;27886:191::-;27960:16;27979:6;;;;;;;;;;;27960:25;;28005:8;27996:6;;:17;;;;;;;;;;;;;;;;;;28060:8;28029:40;;28050:8;28029:40;;;;;;;;;;;;27949:128;27886:191;:::o;40680:180::-;40744:4;40846:6;40800:15;40816:16;40835:5;40783:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40773:69;;;;;;40768:75;;:84;;;;:::i;:::-;40761:91;;40680:180;;;;:::o;38538:611::-;38483:4;38474:6;;:13;;;;;;;;;;;;;;;;;;38620:21:::1;38658:1;38644:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38620:40;;38689:4;;;;;;;;;;;38671;38676:1;38671:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38723:4;38705;38710:1;38705:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38739:15;38764:4;;;;;;;;;;;38757:22;;;38788:4;38757:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38739:55;;38821:1;38808:11;:14:::0;38805:39:::1;;38837:7;38823:21;;38805:39;38899:7;38884:11;:22;38881:260;;38917:15;;;;;;;;;;;:69;;;39001:11;39027:1;39070:4;39097:2;39115:15;38917:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38881:260;38609:540;;38519:5:::0;38510:6;;:14;;;;;;;;;;;;;;;;;;38538:611;;:::o;24781:492::-;24870:22;24878:4;24884:7;24870;:22::i;:::-;24865:401;;25058:28;25078:7;25058:19;:28::i;:::-;25159:38;25187:4;25179:13;;25194:2;25159:19;:38::i;:::-;24963:257;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24909:345;;;;;;;;;;;:::i;:::-;;;;;;;;24865:401;24781:492;;:::o;38232:178::-;38359:43;38375:6;38383:9;38394:7;38359:15;:43::i;:::-;38232:178;;;:::o;22388:98::-;22446:7;22477:1;22473;:5;;;;:::i;:::-;22466:12;;22388:98;;;;:::o;22494:::-;22552:7;22583:1;22579;:5;;;;:::i;:::-;22572:12;;22494:98;;;;:::o;32075:806::-;32188:1;32172:18;;:4;:18;;;32164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32265:1;32251:16;;:2;:16;;;32243:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32320:38;32341:4;32347:2;32351:6;32320:20;:38::i;:::-;32371:19;32393:9;:15;32403:4;32393:15;;;;;;;;;;;;;;;;32371:37;;32442:6;32427:11;:21;;32419:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32559:6;32545:11;:20;32527:9;:15;32537:4;32527:15;;;;;;;;;;;;;;;:38;;;;32762:6;32745:9;:13;32755:2;32745:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;32812:2;32797:26;;32806:4;32797:26;;;32816:6;32797:26;;;;;;:::i;:::-;;;;;;;;32836:37;32856:4;32862:2;32866:6;32836:19;:37::i;:::-;32153:728;32075:806;;;:::o;39974:464::-;38483:4;38474:6;;:13;;;;;;;;;;;;;;;;;;40055:15:::1;40073:24;40091:4;40073:9;:24::i;:::-;40055:42;;40108:21;40146:1;40132:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40108:40;;40170:11;40162:7;:19;40159:42;;;40194:7;40182:19;;40159:42;40227:1;40215:11;:13;40212:219;;;40262:4;40244;40249:1;40244:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;40292:4;;;;;;;;;;;40282;40287:1;40282:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;40311:15;;;;;;;;;;;:69;;;40381:11;40393:1;40395:4;40400:2;40403:15;40311:108;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40212:219;40044:394;;38519:5:::0;38510:6;;:14;;;;;;;;;;;;;;;;;;39974:464;;:::o;19272:151::-;19330:13;19363:52;19391:4;19375:22;;17708:2;19363:52;;:11;:52::i;:::-;19356:59;;19272:151;;;:::o;18817:447::-;18892:13;18918:19;18963:1;18954:6;18950:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18940:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18918:47;;18976:15;:6;18983:1;18976:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19002;:6;19009:1;19002:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19033:9;19058:1;19049:6;19045:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19033:26;;19028:131;19065:1;19061;:5;19028:131;;;19100:8;19117:3;19109:5;:11;19100:21;;;;;;;:::i;:::-;;;;;19088:6;19095:1;19088:9;;;;;;;;:::i;:::-;;;;;:33;;;;;;;;;;;19146:1;19136:11;;;;;19068:3;;;;:::i;:::-;;;19028:131;;;;19186:1;19177:5;:10;19169:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19249:6;19235:21;;;18817:447;;;;:::o;34920:91::-;;;;:::o;35019:90::-;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:77::-;5552:7;5581:5;5570:16;;5515:77;;;:::o;5598:122::-;5671:24;5689:5;5671:24;:::i;:::-;5664:5;5661:35;5651:63;;5710:1;5707;5700:12;5651:63;5598:122;:::o;5726:139::-;5772:5;5810:6;5797:20;5788:29;;5826:33;5853:5;5826:33;:::i;:::-;5726:139;;;;:::o;5871:329::-;5930:6;5979:2;5967:9;5958:7;5954:23;5950:32;5947:119;;;5985:79;;:::i;:::-;5947:119;6105:1;6130:53;6175:7;6166:6;6155:9;6151:22;6130:53;:::i;:::-;6120:63;;6076:117;5871:329;;;;:::o;6206:118::-;6293:24;6311:5;6293:24;:::i;:::-;6288:3;6281:37;6206:118;;:::o;6330:222::-;6423:4;6461:2;6450:9;6446:18;6438:26;;6474:71;6542:1;6531:9;6527:17;6518:6;6474:71;:::i;:::-;6330:222;;;;:::o;6558:474::-;6626:6;6634;6683:2;6671:9;6662:7;6658:23;6654:32;6651:119;;;6689:79;;:::i;:::-;6651:119;6809:1;6834:53;6879:7;6870:6;6859:9;6855:22;6834:53;:::i;:::-;6824:63;;6780:117;6936:2;6962:53;7007:7;6998:6;6987:9;6983:22;6962:53;:::i;:::-;6952:63;;6907:118;6558:474;;;;;:::o;7038:118::-;7125:24;7143:5;7125:24;:::i;:::-;7120:3;7113:37;7038:118;;:::o;7162:222::-;7255:4;7293:2;7282:9;7278:18;7270:26;;7306:71;7374:1;7363:9;7359:17;7350:6;7306:71;:::i;:::-;7162:222;;;;:::o;7390:86::-;7425:7;7465:4;7458:5;7454:16;7443:27;;7390:86;;;:::o;7482:112::-;7565:22;7581:5;7565:22;:::i;:::-;7560:3;7553:35;7482:112;;:::o;7600:214::-;7689:4;7727:2;7716:9;7712:18;7704:26;;7740:67;7804:1;7793:9;7789:17;7780:6;7740:67;:::i;:::-;7600:214;;;;:::o;7820:329::-;7879:6;7928:2;7916:9;7907:7;7903:23;7899:32;7896:119;;;7934:79;;:::i;:::-;7896:119;8054:1;8079:53;8124:7;8115:6;8104:9;8100:22;8079:53;:::i;:::-;8069:63;;8025:117;7820:329;;;;:::o;8155:60::-;8183:3;8204:5;8197:12;;8155:60;;;:::o;8221:142::-;8271:9;8304:53;8322:34;8331:24;8349:5;8331:24;:::i;:::-;8322:34;:::i;:::-;8304:53;:::i;:::-;8291:66;;8221:142;;;:::o;8369:126::-;8419:9;8452:37;8483:5;8452:37;:::i;:::-;8439:50;;8369:126;;;:::o;8501:151::-;8576:9;8609:37;8640:5;8609:37;:::i;:::-;8596:50;;8501:151;;;:::o;8658:181::-;8770:62;8826:5;8770:62;:::i;:::-;8765:3;8758:75;8658:181;;:::o;8845:272::-;8963:4;9001:2;8990:9;8986:18;8978:26;;9014:96;9107:1;9096:9;9092:17;9083:6;9014:96;:::i;:::-;8845:272;;;;:::o;9123:117::-;9232:1;9229;9222:12;9246:117;9355:1;9352;9345:12;9369:117;9478:1;9475;9468:12;9509:568;9582:8;9592:6;9642:3;9635:4;9627:6;9623:17;9619:27;9609:122;;9650:79;;:::i;:::-;9609:122;9763:6;9750:20;9740:30;;9793:18;9785:6;9782:30;9779:117;;;9815:79;;:::i;:::-;9779:117;9929:4;9921:6;9917:17;9905:29;;9983:3;9975:4;9967:6;9963:17;9953:8;9949:32;9946:41;9943:128;;;9990:79;;:::i;:::-;9943:128;9509:568;;;;;:::o;10083:559::-;10169:6;10177;10226:2;10214:9;10205:7;10201:23;10197:32;10194:119;;;10232:79;;:::i;:::-;10194:119;10380:1;10369:9;10365:17;10352:31;10410:18;10402:6;10399:30;10396:117;;;10432:79;;:::i;:::-;10396:117;10545:80;10617:7;10608:6;10597:9;10593:22;10545:80;:::i;:::-;10527:98;;;;10323:312;10083:559;;;;;:::o;10648:474::-;10716:6;10724;10773:2;10761:9;10752:7;10748:23;10744:32;10741:119;;;10779:79;;:::i;:::-;10741:119;10899:1;10924:53;10969:7;10960:6;10949:9;10945:22;10924:53;:::i;:::-;10914:63;;10870:117;11026:2;11052:53;11097:7;11088:6;11077:9;11073:22;11052:53;:::i;:::-;11042:63;;10997:118;10648:474;;;;;:::o;11128:180::-;11176:77;11173:1;11166:88;11273:4;11270:1;11263:15;11297:4;11294:1;11287:15;11314:320;11358:6;11395:1;11389:4;11385:12;11375:22;;11442:1;11436:4;11432:12;11463:18;11453:81;;11519:4;11511:6;11507:17;11497:27;;11453:81;11581:2;11573:6;11570:14;11550:18;11547:38;11544:84;;11600:18;;:::i;:::-;11544:84;11365:269;11314:320;;;:::o;11640:234::-;11780:34;11776:1;11768:6;11764:14;11757:58;11849:17;11844:2;11836:6;11832:15;11825:42;11640:234;:::o;11880:366::-;12022:3;12043:67;12107:2;12102:3;12043:67;:::i;:::-;12036:74;;12119:93;12208:3;12119:93;:::i;:::-;12237:2;12232:3;12228:12;12221:19;;11880:366;;;:::o;12252:419::-;12418:4;12456:2;12445:9;12441:18;12433:26;;12505:9;12499:4;12495:20;12491:1;12480:9;12476:17;12469:47;12533:131;12659:4;12533:131;:::i;:::-;12525:139;;12252:419;;;:::o;12677:180::-;12725:77;12722:1;12715:88;12822:4;12819:1;12812:15;12846:4;12843:1;12836:15;12863:191;12903:3;12922:20;12940:1;12922:20;:::i;:::-;12917:25;;12956:20;12974:1;12956:20;:::i;:::-;12951:25;;12999:1;12996;12992:9;12985:16;;13020:3;13017:1;13014:10;13011:36;;;13027:18;;:::i;:::-;13011:36;12863:191;;;;:::o;13060:143::-;13117:5;13148:6;13142:13;13133:22;;13164:33;13191:5;13164:33;:::i;:::-;13060:143;;;;:::o;13209:351::-;13279:6;13328:2;13316:9;13307:7;13303:23;13299:32;13296:119;;;13334:79;;:::i;:::-;13296:119;13454:1;13479:64;13535:7;13526:6;13515:9;13511:22;13479:64;:::i;:::-;13469:74;;13425:128;13209:351;;;;:::o;13566:332::-;13687:4;13725:2;13714:9;13710:18;13702:26;;13738:71;13806:1;13795:9;13791:17;13782:6;13738:71;:::i;:::-;13819:72;13887:2;13876:9;13872:18;13863:6;13819:72;:::i;:::-;13566:332;;;;;:::o;13904:116::-;13974:21;13989:5;13974:21;:::i;:::-;13967:5;13964:32;13954:60;;14010:1;14007;14000:12;13954:60;13904:116;:::o;14026:137::-;14080:5;14111:6;14105:13;14096:22;;14127:30;14151:5;14127:30;:::i;:::-;14026:137;;;;:::o;14169:345::-;14236:6;14285:2;14273:9;14264:7;14260:23;14256:32;14253:119;;;14291:79;;:::i;:::-;14253:119;14411:1;14436:61;14489:7;14480:6;14469:9;14465:22;14436:61;:::i;:::-;14426:71;;14382:125;14169:345;;;;:::o;14520:224::-;14660:34;14656:1;14648:6;14644:14;14637:58;14729:7;14724:2;14716:6;14712:15;14705:32;14520:224;:::o;14750:366::-;14892:3;14913:67;14977:2;14972:3;14913:67;:::i;:::-;14906:74;;14989:93;15078:3;14989:93;:::i;:::-;15107:2;15102:3;15098:12;15091:19;;14750:366;;;:::o;15122:419::-;15288:4;15326:2;15315:9;15311:18;15303:26;;15375:9;15369:4;15365:20;15361:1;15350:9;15346:17;15339:47;15403:131;15529:4;15403:131;:::i;:::-;15395:139;;15122:419;;;:::o;15547:180::-;15595:77;15592:1;15585:88;15692:4;15689:1;15682:15;15716:4;15713:1;15706:15;15733:410;15773:7;15796:20;15814:1;15796:20;:::i;:::-;15791:25;;15830:20;15848:1;15830:20;:::i;:::-;15825:25;;15885:1;15882;15878:9;15907:30;15925:11;15907:30;:::i;:::-;15896:41;;16086:1;16077:7;16073:15;16070:1;16067:22;16047:1;16040:9;16020:83;15997:139;;16116:18;;:::i;:::-;15997:139;15781:362;15733:410;;;;:::o;16149:233::-;16188:3;16211:24;16229:5;16211:24;:::i;:::-;16202:33;;16257:66;16250:5;16247:77;16244:103;;16327:18;;:::i;:::-;16244:103;16374:1;16367:5;16363:13;16356:20;;16149:233;;;:::o;16388:143::-;16445:5;16476:6;16470:13;16461:22;;16492:33;16519:5;16492:33;:::i;:::-;16388:143;;;;:::o;16537:351::-;16607:6;16656:2;16644:9;16635:7;16631:23;16627:32;16624:119;;;16662:79;;:::i;:::-;16624:119;16782:1;16807:64;16863:7;16854:6;16843:9;16839:22;16807:64;:::i;:::-;16797:74;;16753:128;16537:351;;;;:::o;16894:332::-;17015:4;17053:2;17042:9;17038:18;17030:26;;17066:71;17134:1;17123:9;17119:17;17110:6;17066:71;:::i;:::-;17147:72;17215:2;17204:9;17200:18;17191:6;17147:72;:::i;:::-;16894:332;;;;;:::o;17232:225::-;17372:34;17368:1;17360:6;17356:14;17349:58;17441:8;17436:2;17428:6;17424:15;17417:33;17232:225;:::o;17463:366::-;17605:3;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17702:93;17791:3;17702:93;:::i;:::-;17820:2;17815:3;17811:12;17804:19;;17463:366;;;:::o;17835:419::-;18001:4;18039:2;18028:9;18024:18;18016:26;;18088:9;18082:4;18078:20;18074:1;18063:9;18059:17;18052:47;18116:131;18242:4;18116:131;:::i;:::-;18108:139;;17835:419;;;:::o;18260:223::-;18400:34;18396:1;18388:6;18384:14;18377:58;18469:6;18464:2;18456:6;18452:15;18445:31;18260:223;:::o;18489:366::-;18631:3;18652:67;18716:2;18711:3;18652:67;:::i;:::-;18645:74;;18728:93;18817:3;18728:93;:::i;:::-;18846:2;18841:3;18837:12;18830:19;;18489:366;;;:::o;18861:419::-;19027:4;19065:2;19054:9;19050:18;19042:26;;19114:9;19108:4;19104:20;19100:1;19089:9;19085:17;19078:47;19142:131;19268:4;19142:131;:::i;:::-;19134:139;;18861:419;;;:::o;19286:221::-;19426:34;19422:1;19414:6;19410:14;19403:58;19495:4;19490:2;19482:6;19478:15;19471:29;19286:221;:::o;19513:366::-;19655:3;19676:67;19740:2;19735:3;19676:67;:::i;:::-;19669:74;;19752:93;19841:3;19752:93;:::i;:::-;19870:2;19865:3;19861:12;19854:19;;19513:366;;;:::o;19885:419::-;20051:4;20089:2;20078:9;20074:18;20066:26;;20138:9;20132:4;20128:20;20124:1;20113:9;20109:17;20102:47;20166:131;20292:4;20166:131;:::i;:::-;20158:139;;19885:419;;;:::o;20310:179::-;20450:31;20446:1;20438:6;20434:14;20427:55;20310:179;:::o;20495:366::-;20637:3;20658:67;20722:2;20717:3;20658:67;:::i;:::-;20651:74;;20734:93;20823:3;20734:93;:::i;:::-;20852:2;20847:3;20843:12;20836:19;;20495:366;;;:::o;20867:419::-;21033:4;21071:2;21060:9;21056:18;21048:26;;21120:9;21114:4;21110:20;21106:1;21095:9;21091:17;21084:47;21148:131;21274:4;21148:131;:::i;:::-;21140:139;;20867:419;;;:::o;21292:166::-;21432:18;21428:1;21420:6;21416:14;21409:42;21292:166;:::o;21464:366::-;21606:3;21627:67;21691:2;21686:3;21627:67;:::i;:::-;21620:74;;21703:93;21792:3;21703:93;:::i;:::-;21821:2;21816:3;21812:12;21805:19;;21464:366;;;:::o;21836:419::-;22002:4;22040:2;22029:9;22025:18;22017:26;;22089:9;22083:4;22079:20;22075:1;22064:9;22060:17;22053:47;22117:131;22243:4;22117:131;:::i;:::-;22109:139;;21836:419;;;:::o;22261:156::-;22401:8;22397:1;22389:6;22385:14;22378:32;22261:156;:::o;22423:365::-;22565:3;22586:66;22650:1;22645:3;22586:66;:::i;:::-;22579:73;;22661:93;22750:3;22661:93;:::i;:::-;22779:2;22774:3;22770:12;22763:19;;22423:365;;;:::o;22794:419::-;22960:4;22998:2;22987:9;22983:18;22975:26;;23047:9;23041:4;23037:20;23033:1;23022:9;23018:17;23011:47;23075:131;23201:4;23075:131;:::i;:::-;23067:139;;22794:419;;;:::o;23219:182::-;23359:34;23355:1;23347:6;23343:14;23336:58;23219:182;:::o;23407:366::-;23549:3;23570:67;23634:2;23629:3;23570:67;:::i;:::-;23563:74;;23646:93;23735:3;23646:93;:::i;:::-;23764:2;23759:3;23755:12;23748:19;;23407:366;;;:::o;23779:419::-;23945:4;23983:2;23972:9;23968:18;23960:26;;24032:9;24026:4;24022:20;24018:1;24007:9;24003:17;23996:47;24060:131;24186:4;24060:131;:::i;:::-;24052:139;;23779:419;;;:::o;24204:79::-;24243:7;24272:5;24261:16;;24204:79;;;:::o;24289:157::-;24394:45;24414:24;24432:5;24414:24;:::i;:::-;24394:45;:::i;:::-;24389:3;24382:58;24289:157;;:::o;24452:94::-;24485:8;24533:5;24529:2;24525:14;24504:35;;24452:94;;;:::o;24552:::-;24591:7;24620:20;24634:5;24620:20;:::i;:::-;24609:31;;24552:94;;;:::o;24652:100::-;24691:7;24720:26;24740:5;24720:26;:::i;:::-;24709:37;;24652:100;;;:::o;24758:157::-;24863:45;24883:24;24901:5;24883:24;:::i;:::-;24863:45;:::i;:::-;24858:3;24851:58;24758:157;;:::o;24921:538::-;25089:3;25104:75;25175:3;25166:6;25104:75;:::i;:::-;25204:2;25199:3;25195:12;25188:19;;25217:75;25288:3;25279:6;25217:75;:::i;:::-;25317:2;25312:3;25308:12;25301:19;;25330:75;25401:3;25392:6;25330:75;:::i;:::-;25430:2;25425:3;25421:12;25414:19;;25450:3;25443:10;;24921:538;;;;;;:::o;25465:180::-;25513:77;25510:1;25503:88;25610:4;25607:1;25600:15;25634:4;25631:1;25624:15;25651:176;25683:1;25700:20;25718:1;25700:20;:::i;:::-;25695:25;;25734:20;25752:1;25734:20;:::i;:::-;25729:25;;25773:1;25763:35;;25778:18;;:::i;:::-;25763:35;25819:1;25816;25812:9;25807:14;;25651:176;;;;:::o;25833:180::-;25881:77;25878:1;25871:88;25978:4;25975:1;25968:15;26002:4;25999:1;25992:15;26019:85;26064:7;26093:5;26082:16;;26019:85;;;:::o;26110:158::-;26168:9;26201:61;26219:42;26228:32;26254:5;26228:32;:::i;:::-;26219:42;:::i;:::-;26201:61;:::i;:::-;26188:74;;26110:158;;;:::o;26274:147::-;26369:45;26408:5;26369:45;:::i;:::-;26364:3;26357:58;26274:147;;:::o;26427:114::-;26494:6;26528:5;26522:12;26512:22;;26427:114;;;:::o;26547:184::-;26646:11;26680:6;26675:3;26668:19;26720:4;26715:3;26711:14;26696:29;;26547:184;;;;:::o;26737:132::-;26804:4;26827:3;26819:11;;26857:4;26852:3;26848:14;26840:22;;26737:132;;;:::o;26875:108::-;26952:24;26970:5;26952:24;:::i;:::-;26947:3;26940:37;26875:108;;:::o;26989:179::-;27058:10;27079:46;27121:3;27113:6;27079:46;:::i;:::-;27157:4;27152:3;27148:14;27134:28;;26989:179;;;;:::o;27174:113::-;27244:4;27276;27271:3;27267:14;27259:22;;27174:113;;;:::o;27323:732::-;27442:3;27471:54;27519:5;27471:54;:::i;:::-;27541:86;27620:6;27615:3;27541:86;:::i;:::-;27534:93;;27651:56;27701:5;27651:56;:::i;:::-;27730:7;27761:1;27746:284;27771:6;27768:1;27765:13;27746:284;;;27847:6;27841:13;27874:63;27933:3;27918:13;27874:63;:::i;:::-;27867:70;;27960:60;28013:6;27960:60;:::i;:::-;27950:70;;27806:224;27793:1;27790;27786:9;27781:14;;27746:284;;;27750:14;28046:3;28039:10;;27447:608;;;27323:732;;;;:::o;28061:831::-;28324:4;28362:3;28351:9;28347:19;28339:27;;28376:71;28444:1;28433:9;28429:17;28420:6;28376:71;:::i;:::-;28457:80;28533:2;28522:9;28518:18;28509:6;28457:80;:::i;:::-;28584:9;28578:4;28574:20;28569:2;28558:9;28554:18;28547:48;28612:108;28715:4;28706:6;28612:108;:::i;:::-;28604:116;;28730:72;28798:2;28787:9;28783:18;28774:6;28730:72;:::i;:::-;28812:73;28880:3;28869:9;28865:19;28856:6;28812:73;:::i;:::-;28061:831;;;;;;;;:::o;28898:148::-;29000:11;29037:3;29022:18;;28898:148;;;;:::o;29052:173::-;29192:25;29188:1;29180:6;29176:14;29169:49;29052:173;:::o;29231:402::-;29391:3;29412:85;29494:2;29489:3;29412:85;:::i;:::-;29405:92;;29506:93;29595:3;29506:93;:::i;:::-;29624:2;29619:3;29615:12;29608:19;;29231:402;;;:::o;29639:390::-;29745:3;29773:39;29806:5;29773:39;:::i;:::-;29828:89;29910:6;29905:3;29828:89;:::i;:::-;29821:96;;29926:65;29984:6;29979:3;29972:4;29965:5;29961:16;29926:65;:::i;:::-;30016:6;30011:3;30007:16;30000:23;;29749:280;29639:390;;;;:::o;30035:167::-;30175:19;30171:1;30163:6;30159:14;30152:43;30035:167;:::o;30208:402::-;30368:3;30389:85;30471:2;30466:3;30389:85;:::i;:::-;30382:92;;30483:93;30572:3;30483:93;:::i;:::-;30601:2;30596:3;30592:12;30585:19;;30208:402;;;:::o;30616:967::-;30998:3;31020:148;31164:3;31020:148;:::i;:::-;31013:155;;31185:95;31276:3;31267:6;31185:95;:::i;:::-;31178:102;;31297:148;31441:3;31297:148;:::i;:::-;31290:155;;31462:95;31553:3;31544:6;31462:95;:::i;:::-;31455:102;;31574:3;31567:10;;30616:967;;;;;:::o;31589:185::-;31629:1;31646:20;31664:1;31646:20;:::i;:::-;31641:25;;31680:20;31698:1;31680:20;:::i;:::-;31675:25;;31719:1;31709:35;;31724:18;;:::i;:::-;31709:35;31766:1;31763;31759:9;31754:14;;31589:185;;;;:::o;31780:224::-;31920:34;31916:1;31908:6;31904:14;31897:58;31989:7;31984:2;31976:6;31972:15;31965:32;31780:224;:::o;32010:366::-;32152:3;32173:67;32237:2;32232:3;32173:67;:::i;:::-;32166:74;;32249:93;32338:3;32249:93;:::i;:::-;32367:2;32362:3;32358:12;32351:19;;32010:366;;;:::o;32382:419::-;32548:4;32586:2;32575:9;32571:18;32563:26;;32635:9;32629:4;32625:20;32621:1;32610:9;32606:17;32599:47;32663:131;32789:4;32663:131;:::i;:::-;32655:139;;32382:419;;;:::o;32807:222::-;32947:34;32943:1;32935:6;32931:14;32924:58;33016:5;33011:2;33003:6;32999:15;32992:30;32807:222;:::o;33035:366::-;33177:3;33198:67;33262:2;33257:3;33198:67;:::i;:::-;33191:74;;33274:93;33363:3;33274:93;:::i;:::-;33392:2;33387:3;33383:12;33376:19;;33035:366;;;:::o;33407:419::-;33573:4;33611:2;33600:9;33596:18;33588:26;;33660:9;33654:4;33650:20;33646:1;33635:9;33631:17;33624:47;33688:131;33814:4;33688:131;:::i;:::-;33680:139;;33407:419;;;:::o;33832:225::-;33972:34;33968:1;33960:6;33956:14;33949:58;34041:8;34036:2;34028:6;34024:15;34017:33;33832:225;:::o;34063:366::-;34205:3;34226:67;34290:2;34285:3;34226:67;:::i;:::-;34219:74;;34302:93;34391:3;34302:93;:::i;:::-;34420:2;34415:3;34411:12;34404:19;;34063:366;;;:::o;34435:419::-;34601:4;34639:2;34628:9;34624:18;34616:26;;34688:9;34682:4;34678:20;34674:1;34663:9;34659:17;34652:47;34716:131;34842:4;34716:131;:::i;:::-;34708:139;;34435:419;;;:::o;34860:171::-;34899:3;34922:24;34940:5;34922:24;:::i;:::-;34913:33;;34968:4;34961:5;34958:15;34955:41;;34976:18;;:::i;:::-;34955:41;35023:1;35016:5;35012:13;35005:20;;34860:171;;;:::o;35037:182::-;35177:34;35173:1;35165:6;35161:14;35154:58;35037:182;:::o;35225:366::-;35367:3;35388:67;35452:2;35447:3;35388:67;:::i;:::-;35381:74;;35464:93;35553:3;35464:93;:::i;:::-;35582:2;35577:3;35573:12;35566:19;;35225:366;;;:::o;35597:419::-;35763:4;35801:2;35790:9;35786:18;35778:26;;35850:9;35844:4;35840:20;35836:1;35825:9;35821:17;35814:47;35878:131;36004:4;35878:131;:::i;:::-;35870:139;;35597:419;;;:::o

Swarm Source

ipfs://04991d85349701d76824a6c2bc8487961903cb7fd931c35f97bea16273a31206
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.