false
true
0

Contract Address Details

0x7ad6C38056bAfaBE51212A102C03caC8F3CD40A5

Contract Name
SyndicateFarmer
Creator
0xb2e1be–200990 at 0x4269c5–8cd3df
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
9 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26032871
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
SyndicateFarmer




Optimization enabled
false
Compiler version
v0.8.20+commit.a1b79de6




EVM Version
default




Verified at
2024-04-29T02:50:11.298098Z

Contract source code

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

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

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

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

interface IWPLS is IERC20 {
    function deposit() external payable;
    function withdraw(uint256) external;
}

interface IMasterChef {
    function deposit(uint256 _pid, uint256 _amount) external;
    function withdraw(uint256 _pid, uint256 _amount) external;
    function emergencyWithdraw(uint256 _pid) external;

    function pendingInc(uint256 _pid, address _user) external view returns (uint256);
    function userInfo(uint256 _pid, address _user) external view returns (uint256 amount, uint256 rewardDebt);
    function poolInfo(uint256 _pid) external view returns (IERC20 lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accCakePerShare);
}

interface ISwapRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    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 removeLiquidity(address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);

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

interface ISwapRouter is ISwapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface ISwapPair {
    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;
}

interface IAccessControl {
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
    error AccessControlBadConfirmation();

    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 callerConfirmation) external;
}

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

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

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

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

    mapping(bytes32 role => 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 returns (bool) {
        return _roles[role].hasRole[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 AccessControlUnauthorizedAccount(account, role);
        }
    }

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

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

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

    function renounceRole(bytes32 role, address callerConfirmation) public virtual {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }

        _revokeRole(role, callerConfirmation);
    }

    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 returns (bool) {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

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

contract SyndicateFarmer is AccessControl, ReentrancyGuard {

    IWPLS public constant WPLS = IWPLS(0xA1077a294dDE1B09bB078844df40758a5D0f9a27);

    IERC20 public constant DAI = IERC20(0xefD766cCb38EaF1dfd701853BFCe31359239F305);
    IERC20 public constant INC = IERC20(0x2fa878Ab3F87CC1C9737Fc071108F904c0B0C95d);

    IMasterChef public constant masterchef = IMasterChef(0xB2Ca4A66d3e57a5a9A12043B6bAD28249fE302d4);
    ISwapRouter public constant swapRouterV1 = ISwapRouter(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
    ISwapRouter public constant swapRouterV2 = ISwapRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);

    bytes32 public constant AUTHORIZED_ROLE = keccak256("AUTHORIZED_ROLE");

    uint256 public constant FST = 3 minutes;

    address public outputRecipient;

    uint16 public claimPerc;

    constructor () {
        WPLS.approve(address(swapRouterV1), type(uint256).max);
        WPLS.approve(address(swapRouterV2), type(uint256).max);

        INC.approve(address(swapRouterV1), type(uint256).max);
        INC.approve(address(swapRouterV2), type(uint256).max);
        outputRecipient = msg.sender;

        _grantRole(AUTHORIZED_ROLE, msg.sender);

        claimPerc = 9600; // 96%
    }

    receive () payable external {
        WPLS.deposit{value: msg.value}();
    }

    ////////////////////
    // VIEW FUNCTIONS //
    ////////////////////

    // Get the addresses of tokens required to make LP
    function tokensFor(uint256 _pid) public view returns (IERC20 token0, IERC20 token1) {
        (IERC20 lpToken, , ,) = masterchef.poolInfo(_pid);
        ISwapPair lp = ISwapPair(address(lpToken));

        token0 = IERC20(lp.token0());
        token1 = IERC20(lp.token1());
    }

    // Get the swap path from one token to another
    function swapPath(address from, address to) public pure returns (address[] memory path) {
        if (from == address(WPLS) || to == address(WPLS)) {
            path = new address[](2);
            path[0] = from;
            path[1] = to;
        } else {
            path = new address[](3);
            path[0] = from;
            path[1] = address(WPLS);
            path[2] = to;
        }
    }

    // Get the current earnings in a pool
    function earningsInPool(uint256 _pid) public view returns (uint256 incEarnings) {
        incEarnings = masterchef.pendingInc(_pid, address(this));
    }

    // Get the current staked LP in a pool
    function stakedLP(uint256 _pid) public view returns (uint256 stakedTotal) {
        (stakedTotal, ) = masterchef.userInfo(_pid, address(this));
    }

    // Get price of token0 in token1
    function getTokenPrice(address token0, address token1) public view returns (uint256 tokenPrice) {
        address[] memory path = swapPath(address(token0), address(token1));

        uint256[] memory amountsOut0 = swapRouterV2.getAmountsOut(1e18, path);

        tokenPrice = amountsOut0[path.length - 1];
    }

    /////////////////////   //////////////////////////
    // WRITE FUNCTIONS //   // RESTRICTED FUNCTIONS //
    /////////////////////   //////////////////////////

    // Turn any token in this contract into WPLS, then add it to 'pendingForFarming'
    function prepare(address _have) external nonReentrant() onlyRole(AUTHORIZED_ROLE) returns (bool success) {
        IERC20(_have).approve(address(swapRouterV2), type(uint256).max);

        uint256 bal = IERC20(_have).balanceOf(address(this));
        swapRouterV2.swapExactTokensForTokensSupportingFeeOnTransferTokens(bal, 0, swapPath(_have, address(WPLS)), address(this), block.timestamp + 3 minutes);

        return true;
    }

    // Deposit PLS, buy tokens for the Farmer
    function deposit(uint256 _pid, uint256 _amount) external payable nonReentrant() onlyRole(AUTHORIZED_ROLE) returns (bool success) {
        
        // Receive WPLS from caller
        WPLS.transferFrom(msg.sender, address(this), _amount);

        // Buy the 2nd token for this PID
        _buyTokens(_pid);

        // Make the LP required
        _createLP(_pid);

        // Stake the LP tokens
        _stakeLP(_pid);

        return true;
    }

    // Harvest Rewards to set destination
    function harvest(uint256 _pid) external nonReentrant() onlyRole(AUTHORIZED_ROLE) returns (bool success) {
        _harvest(_pid);

        return true;
    }

    // Retrieve from this contract
    function retrieve() external onlyRole(AUTHORIZED_ROLE) {
        payable(msg.sender).transfer(address(this).balance);
    }

    // Retrieve tokens from this contract
    function retrieveToken(address _token) external onlyRole(AUTHORIZED_ROLE) {
        uint256 bal = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(msg.sender, bal);
    }

    // Break LP into two tokens
    function breakLP(uint256 _pid) external onlyRole(AUTHORIZED_ROLE) returns (bool) {
        (IERC20 token0, IERC20 token1) = tokensFor(_pid);
        (IERC20 lpToken, , ,) = masterchef.poolInfo(_pid);

        uint256 liquidity = lpToken.balanceOf(address(this));

        swapRouterV1.removeLiquidity(address(token0), address(token1), liquidity, 0, 0, address(this), block.timestamp + FST);

        return true;
    }

    // Unstake LP from a farm
    function unstakeLP(uint256 _pid) external onlyRole(AUTHORIZED_ROLE) returns (bool) {
        (uint256 bal, ) = masterchef.userInfo(_pid, address(this));
        masterchef.withdraw(_pid, bal);
        return true;
    }

    // Set recipient of WPLS after INC is sold
    function setRecipient(address _recipient) external onlyRole(AUTHORIZED_ROLE) returns (bool success) {
        outputRecipient = _recipient;
        return true;
    }

    // Set Claim Percentage (what to take on harvest)
    function setClaimPerc(uint16 _claimPerc) external onlyRole(AUTHORIZED_ROLE) returns (bool success) {
        claimPerc = _claimPerc;
        return true;
    }

    ////////////////////////
    // INTERNAL FUNCTIONS //
    ////////////////////////

    // Buy the 2nd token required to make LP for a PID
    function _buyTokens(uint256 _pid) internal returns (bool success) {

        // Get the tokens for a specific PID
        (IERC20 token0, IERC20 token1) = tokensFor(_pid);

        // Get available WPLS amount
        uint256 wplsBal = WPLS.balanceOf(address(this));

        // Calculate half that amount
        uint256 half = wplsBal / 2;

        // Find the other token we need to make LP
        address want = (address(token0) != address(WPLS) ? address(token0) : address(token1));

        // Swap half the available WPLS for the token we need
        swapRouterV2.swapExactTokensForTokens(half, 0, swapPath(address(WPLS), address(want)), address(this), block.timestamp + FST);

        return true;
    }

    // Approve Tokens, create LP
    function _createLP(uint256 _pid) internal returns (bool success) {

        // Get tokens for a specific PID
        (IERC20 token0, IERC20 token1) = tokensFor(_pid);

        // Approve both tokens to be used by the swap router
        token0.approve(address(swapRouterV1), type(uint256).max);
        token1.approve(address(swapRouterV1), type(uint256).max);

        // Get the amount of both tokens available
        uint256 amountADesired = token0.balanceOf(address(this));
        uint256 amountBDesired = token1.balanceOf(address(this));

        // Add Liquidity for token-WPLS LP on V1 Swap Router
        swapRouterV1.addLiquidity(address(token0), address(token1), amountADesired, amountBDesired, 0, 0, address(this), block.timestamp + FST);

        return true;
    }

    // Approve Farm to use LP, and stake LP
    function _stakeLP(uint256 _pid) internal returns (bool success) {

        // Get the LP Token address required for a PID
        (IERC20 lpToken, , ,) = masterchef.poolInfo(_pid);

        // Approve LP Token to be staked
        lpToken.approve(address(masterchef), type(uint256).max);

        // Get LP Token balance of the Farmer
        uint256 amountIn = lpToken.balanceOf(address(this));

        // Deposit those LP tokens to earn INC
        masterchef.deposit(_pid, amountIn);

        return true;
    }

    // Harvest Farm Rewards
    function _harvest(uint256 _pid) internal returns (bool success) {
        
        // Harvest INC
        masterchef.deposit(_pid, 0);

        // Approve INC to be spent by Swap Router
        INC.approve(address(swapRouterV2), type(uint256).max);

        // Get total INC Balance
        uint256 incBal = INC.balanceOf(address(this));

        // Swap INC for WPLS
        swapRouterV2.swapExactTokensForTokens(
            incBal, 
            0, 
            swapPath(address(INC), 
            address(WPLS)), 
            address(this), 
            block.timestamp + FST
        );

        // Get WPLS Balance
        uint256 wplsBal = WPLS.balanceOf(address(this));

        // Calculate auto-compound percentage
        uint256 amountOut = (wplsBal * (10000 - claimPerc)) / 10000;

        // Send everything else to rewards processor
        WPLS.transfer(outputRecipient, amountOut);

        return true;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bytes32","name":"neededRole","internalType":"bytes32"}]},{"type":"event","name":"RoleAdminChanged","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"previousAdminRole","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"newAdminRole","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"AUTHORIZED_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"DAI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DEFAULT_ADMIN_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"FST","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"INC","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IWPLS"}],"name":"WPLS","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"breakLP","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"claimPerc","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"deposit","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"incEarnings","internalType":"uint256"}],"name":"earningsInPool","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRoleAdmin","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"tokenPrice","internalType":"uint256"}],"name":"getTokenPrice","inputs":[{"type":"address","name":"token0","internalType":"address"},{"type":"address","name":"token1","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grantRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"harvest","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IMasterChef"}],"name":"masterchef","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"outputRecipient","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"prepare","inputs":[{"type":"address","name":"_have","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"callerConfirmation","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"retrieve","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"retrieveToken","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"setClaimPerc","inputs":[{"type":"uint16","name":"_claimPerc","internalType":"uint16"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"setRecipient","inputs":[{"type":"address","name":"_recipient","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"stakedTotal","internalType":"uint256"}],"name":"stakedLP","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"address[]","name":"path","internalType":"address[]"}],"name":"swapPath","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract ISwapRouter"}],"name":"swapRouterV1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract ISwapRouter"}],"name":"swapRouterV2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"token0","internalType":"contract IERC20"},{"type":"address","name":"token1","internalType":"contract IERC20"}],"name":"tokensFor","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"unstakeLP","inputs":[{"type":"uint256","name":"_pid","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405234801562000010575f80fd5b506001808190555073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663095ea7b37398bf93ebf5c380c0e6ae8e192a7e2ae08edacc027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200009d92919062000596565b6020604051808303815f875af1158015620000ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000e09190620005ff565b5073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200016692919062000596565b6020604051808303815f875af115801562000183573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a99190620005ff565b50732fa878ab3f87cc1c9737fc071108f904c0b0c95d73ffffffffffffffffffffffffffffffffffffffff1663095ea7b37398bf93ebf5c380c0e6ae8e192a7e2ae08edacc027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200022f92919062000596565b6020604051808303815f875af11580156200024c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002729190620005ff565b50732fa878ab3f87cc1c9737fc071108f904c0b0c95d73ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620002f892919062000596565b6020604051808303815f875af115801562000315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200033b9190620005ff565b503360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ae7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf733620003d460201b60201c565b50612580600260146101000a81548161ffff021916908361ffff1602179055506200062f565b5f620003e78383620004cf60201b60201c565b620004c55760015f808581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620004616200053260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050620004c9565b5f90505b92915050565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620005648262000539565b9050919050565b620005768162000558565b82525050565b5f819050919050565b62000590816200057c565b82525050565b5f604082019050620005ab5f8301856200056b565b620005ba602083018462000585565b9392505050565b5f80fd5b5f8115159050919050565b620005db81620005c5565b8114620005e6575f80fd5b50565b5f81519050620005f981620005d0565b92915050565b5f60208284031215620006175762000616620005c1565b5b5f6200062684828501620005e9565b91505092915050565b6137bb806200063d5f395ff3fe6080604052600436106101db575f3560e01c80638f9afcc211610101578063dacda1e911610094578063e4932abe11610063578063e4932abe146107a7578063ef8ef56f146107d1578063f6468251146107fb578063fb1db278146108255761024e565b8063dacda1e9146106d5578063ddc6326214610711578063e0bab4c41461074d578063e2bbb158146107775761024e565b8063babed18a116100d0578063babed18a1461060b578063c477899814610647578063d4b5492614610683578063d547741f146106ad5761024e565b80638f9afcc21461053f57806391d1485414610569578063a217fddf146105a5578063afa99860146105cf5761024e565b806336568abe116101795780636721eb97116101485780636721eb9714610472578063744fbc7a146104af5780637925c695146104d957806385ca2b0a146105155761024e565b806336568abe146103965780633bbed4a0146103be57806365ae77db146103fa57806365e38144146104365761024e565b8063202920ef116101b5578063202920ef146102f2578063248a9ca31461031c5780632e64cec1146103585780632f2ff15d1461036e5761024e565b806301ffc9a71461025257806303901fe71461028e57806314127a3b146102ca5761024e565b3661024e5773a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b15801561023a575f80fd5b505af115801561024c573d5f803e3d5ffd5b005b5f80fd5b34801561025d575f80fd5b5061027860048036038101906102739190612992565b61084f565b60405161028591906129d7565b60405180910390f35b348015610299575f80fd5b506102b460048036038101906102af9190612a23565b6108c8565b6040516102c19190612a5d565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb9190612ad0565b610960565b005b3480156102fd575f80fd5b50610306610a86565b6040516103139190612a5d565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612b2e565b610a8b565b60405161034f9190612b68565b60405180910390f35b348015610363575f80fd5b5061036c610aa7565b005b348015610379575f80fd5b50610394600480360381019061038f9190612b81565b610b18565b005b3480156103a1575f80fd5b506103bc60048036038101906103b79190612b81565b610b3a565b005b3480156103c9575f80fd5b506103e460048036038101906103df9190612ad0565b610bb5565b6040516103f191906129d7565b60405180910390f35b348015610405575f80fd5b50610420600480360381019061041b9190612a23565b610c2a565b60405161042d91906129d7565b60405180910390f35b348015610441575f80fd5b5061045c60048036038101906104579190612bf6565b610e25565b60405161046991906129d7565b60405180910390f35b34801561047d575f80fd5b5061049860048036038101906104939190612a23565b610e77565b6040516104a6929190612c7c565b60405180910390f35b3480156104ba575f80fd5b506104c3610ff4565b6040516104d09190612cc3565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa9190612cdc565b61100c565b60405161050c9190612dd1565b60405180910390f35b348015610520575f80fd5b506105296112e1565b6040516105369190612e00565b60405180910390f35b34801561054a575f80fd5b506105536112f5565b6040516105609190612e28565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190612b81565b61131a565b60405161059c91906129d7565b60405180910390f35b3480156105b0575f80fd5b506105b961137d565b6040516105c69190612b68565b60405180910390f35b3480156105da575f80fd5b506105f560048036038101906105f09190612cdc565b611383565b6040516106029190612a5d565b60405180910390f35b348015610616575f80fd5b50610631600480360381019061062c9190612ad0565b61145f565b60405161063e91906129d7565b60405180910390f35b348015610652575f80fd5b5061066d60048036038101906106689190612a23565b6116bf565b60405161067a91906129d7565b60405180910390f35b34801561068e575f80fd5b50610697611802565b6040516106a49190612cc3565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612b81565b61181a565b005b3480156106e0575f80fd5b506106fb60048036038101906106f69190612a23565b61183c565b6040516107089190612a5d565b60405180910390f35b34801561071c575f80fd5b5061073760048036038101906107329190612a23565b6118d2565b60405161074491906129d7565b60405180910390f35b348015610758575f80fd5b50610761611965565b60405161076e9190612e41565b60405180910390f35b610791600480360381019061078c9190612e5a565b61197d565b60405161079e91906129d7565b60405180910390f35b3480156107b2575f80fd5b506107bb611ab7565b6040516107c89190612e41565b60405180910390f35b3480156107dc575f80fd5b506107e5611acf565b6040516107f29190612eb8565b60405180910390f35b348015610806575f80fd5b5061080f611ae7565b60405161081c9190612b68565b60405180910390f35b348015610830575f80fd5b50610839611b0b565b6040516108469190612ef1565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c157506108c082611b23565b5b9050919050565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff166393f1a40b83306040518363ffffffff1660e01b8152600401610918929190612f0a565b6040805180830381865afa158015610932573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109569190612f45565b5080915050919050565b7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf761098a81611b8c565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109c49190612e28565b602060405180830381865afa1580156109df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a039190612f83565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610a40929190612fae565b6020604051808303815f875af1158015610a5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a809190612fff565b50505050565b60b481565b5f805f8381526020019081526020015f20600101549050919050565b7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610ad181611b8c565b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b14573d5f803e3d5ffd5b5050565b610b2182610a8b565b610b2a81611b8c565b610b348383611ba0565b50505050565b610b42611c89565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb08282611c90565b505050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610be081611b8c565b8260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001915050919050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610c5581611b8c565b5f80610c6085610e77565b915091505f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff16631526fe27876040518263ffffffff1660e01b8152600401610cb29190612a5d565b608060405180830381865afa158015610ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf19190613065565b50505090505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d309190612e28565b602060405180830381865afa158015610d4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6f9190612f83565b90507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0273ffffffffffffffffffffffffffffffffffffffff1663baa2abde8585845f803060b442610db491906130f6565b6040518863ffffffff1660e01b8152600401610dd69796959493929190613162565b60408051808303815f875af1158015610df1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e159190612f45565b5050600195505050505050919050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610e5081611b8c565b82600260146101000a81548161ffff021916908361ffff1602179055506001915050919050565b5f805f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff16631526fe27856040518263ffffffff1660e01b8152600401610ec79190612a5d565b608060405180830381865afa158015610ee2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f069190613065565b50505090505f8190508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c91906131e3565b93508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610feb91906131e3565b92505050915091565b73165c3410fc91ef562c50559f7d2289febed552d981565b606073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061109b575073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561118e57600267ffffffffffffffff8111156110bb576110ba61320e565b5b6040519080825280602002602001820160405280156110e95781602001602082028036833780820191505090505b50905082815f81518110611100576110ff61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061114f5761114e61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506112db565b600367ffffffffffffffff8111156111a9576111a861320e565b5b6040519080825280602002602001820160405280156111d75781602001602082028036833780820191505090505b50905082815f815181106111ee576111ed61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073a1077a294dde1b09bb078844df40758a5d0f9a27816001815181106112515761125061323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816002815181106112a05761129f61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b92915050565b600260149054906101000a900461ffff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f801b81565b5f8061138f848461100c565b90505f73165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b81526004016113e99291906132a1565b5f60405180830381865afa158015611403573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061142b91906133f2565b9050806001835161143c9190613439565b8151811061144d5761144c61323b565b5b60200260200101519250505092915050565b5f6002600154036114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c906134c6565b60405180910390fd5b60026001819055507f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf76114d781611b8c565b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611546929190612fae565b6020604051808303815f875af1158015611562573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115869190612fff565b505f8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c19190612e28565b602060405180830381865afa1580156115dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116009190612f83565b905073165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff16635c11d795825f6116528873a1077a294dde1b09bb078844df40758a5d0f9a2761100c565b3060b44261166091906130f6565b6040518663ffffffff1660e01b81526004016116809594939291906134e4565b5f604051808303815f87803b158015611697575f80fd5b505af11580156116a9573d5f803e3d5ffd5b5050505060019250505060018081905550919050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf76116ea81611b8c565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff166393f1a40b85306040518363ffffffff1660e01b815260040161173a929190612f0a565b6040805180830381865afa158015611754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117789190612f45565b50905073b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663441a3e7085836040518363ffffffff1660e01b81526004016117ca92919061353c565b5f604051808303815f87803b1580156117e1575f80fd5b505af11580156117f3573d5f803e3d5ffd5b50505050600192505050919050565b7398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0281565b61182382610a8b565b61182c81611b8c565b6118368383611c90565b50505050565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663149da26f83306040518363ffffffff1660e01b815260040161188c929190612f0a565b602060405180830381865afa1580156118a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190612f83565b9050919050565b5f600260015403611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906134c6565b60405180910390fd5b60026001819055507f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf761194a81611b8c565b61195383611d79565b50600191505060018081905550919050565b73efd766ccb38eaf1dfd701853bfce31359239f30581565b5f6002600154036119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba906134c6565b60405180910390fd5b60026001819055507f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf76119f581611b8c565b73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401611a4693929190613563565b6020604051808303815f875af1158015611a62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a869190612fff565b50611a90846121a8565b50611a9a84612379565b50611aa484612696565b5060019150506001808190555092915050565b732fa878ab3f87cc1c9737fc071108f904c0b0c95d81565b73a1077a294dde1b09bb078844df40758a5d0f9a2781565b7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf781565b73b2ca4a66d3e57a5a9a12043b6bad28249fe302d481565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611b9d81611b98611c89565b6128db565b50565b5f611bab838361131a565b611c7f5760015f808581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611c1c611c89565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611c83565b5f90505b92915050565b5f33905090565b5f611c9b838361131a565b15611d6f575f805f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611d0c611c89565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611d73565b5f90505b92915050565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663e2bbb158835f6040518363ffffffff1660e01b8152600401611dc9929190613598565b5f604051808303815f87803b158015611de0575f80fd5b505af1158015611df2573d5f803e3d5ffd5b50505050732fa878ab3f87cc1c9737fc071108f904c0b0c95d73ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611e79929190612fae565b6020604051808303815f875af1158015611e95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb99190612fff565b505f732fa878ab3f87cc1c9737fc071108f904c0b0c95d73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f089190612e28565b602060405180830381865afa158015611f23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f479190612f83565b905073165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff166338ed1739825f611fad732fa878ab3f87cc1c9737fc071108f904c0b0c95d73a1077a294dde1b09bb078844df40758a5d0f9a2761100c565b3060b442611fbb91906130f6565b6040518663ffffffff1660e01b8152600401611fdb9594939291906134e4565b5f604051808303815f875af1158015611ff6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061201e91906133f2565b505f73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161206d9190612e28565b602060405180830381865afa158015612088573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ac9190612f83565b90505f612710600260149054906101000a900461ffff166127106120d091906135bf565b61ffff16836120df91906135f4565b6120e99190613662565b905073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161215b929190612fae565b6020604051808303815f875af1158015612177573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219b9190612fff565b5060019350505050919050565b5f805f6121b484610e77565b915091505f73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122069190612e28565b602060405180830381865afa158015612221573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122459190612f83565b90505f6002826122559190613662565b90505f73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122a557836122a7565b845b905073165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff166338ed1739835f6122f973a1077a294dde1b09bb078844df40758a5d0f9a278661100c565b3060b44261230791906130f6565b6040518663ffffffff1660e01b81526004016123279594939291906134e4565b5f604051808303815f875af1158015612342573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061236a91906133f2565b50600195505050505050919050565b5f805f61238584610e77565b915091508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37398bf93ebf5c380c0e6ae8e192a7e2ae08edacc027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016123f8929190612fae565b6020604051808303815f875af1158015612414573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124389190612fff565b508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37398bf93ebf5c380c0e6ae8e192a7e2ae08edacc027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124a8929190612fae565b6020604051808303815f875af11580156124c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e89190612fff565b505f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125239190612e28565b602060405180830381865afa15801561253e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125629190612f83565b90505f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161259e9190612e28565b602060405180830381865afa1580156125b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125dd9190612f83565b90507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0273ffffffffffffffffffffffffffffffffffffffff1663e8e33700858585855f803060b44261262391906130f6565b6040518963ffffffff1660e01b8152600401612646989796959493929190613692565b6060604051808303815f875af1158015612662573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612686919061370e565b5050506001945050505050919050565b5f8073b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff16631526fe27846040518263ffffffff1660e01b81526004016126e59190612a5d565b608060405180830381865afa158015612700573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127249190613065565b50505090508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b373b2ca4a66d3e57a5a9a12043b6bad28249fe302d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612798929190612fae565b6020604051808303815f875af11580156127b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127d89190612fff565b505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128139190612e28565b602060405180830381865afa15801561282e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128529190612f83565b905073b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663e2bbb15885836040518363ffffffff1660e01b81526004016128a392919061353c565b5f604051808303815f87803b1580156128ba575f80fd5b505af11580156128cc573d5f803e3d5ffd5b50505050600192505050919050565b6128e5828261131a565b6129285780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161291f92919061375e565b60405180910390fd5b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129718161293d565b811461297b575f80fd5b50565b5f8135905061298c81612968565b92915050565b5f602082840312156129a7576129a6612935565b5b5f6129b48482850161297e565b91505092915050565b5f8115159050919050565b6129d1816129bd565b82525050565b5f6020820190506129ea5f8301846129c8565b92915050565b5f819050919050565b612a02816129f0565b8114612a0c575f80fd5b50565b5f81359050612a1d816129f9565b92915050565b5f60208284031215612a3857612a37612935565b5b5f612a4584828501612a0f565b91505092915050565b612a57816129f0565b82525050565b5f602082019050612a705f830184612a4e565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a9f82612a76565b9050919050565b612aaf81612a95565b8114612ab9575f80fd5b50565b5f81359050612aca81612aa6565b92915050565b5f60208284031215612ae557612ae4612935565b5b5f612af284828501612abc565b91505092915050565b5f819050919050565b612b0d81612afb565b8114612b17575f80fd5b50565b5f81359050612b2881612b04565b92915050565b5f60208284031215612b4357612b42612935565b5b5f612b5084828501612b1a565b91505092915050565b612b6281612afb565b82525050565b5f602082019050612b7b5f830184612b59565b92915050565b5f8060408385031215612b9757612b96612935565b5b5f612ba485828601612b1a565b9250506020612bb585828601612abc565b9150509250929050565b5f61ffff82169050919050565b612bd581612bbf565b8114612bdf575f80fd5b50565b5f81359050612bf081612bcc565b92915050565b5f60208284031215612c0b57612c0a612935565b5b5f612c1884828501612be2565b91505092915050565b5f819050919050565b5f612c44612c3f612c3a84612a76565b612c21565b612a76565b9050919050565b5f612c5582612c2a565b9050919050565b5f612c6682612c4b565b9050919050565b612c7681612c5c565b82525050565b5f604082019050612c8f5f830185612c6d565b612c9c6020830184612c6d565b9392505050565b5f612cad82612c4b565b9050919050565b612cbd81612ca3565b82525050565b5f602082019050612cd65f830184612cb4565b92915050565b5f8060408385031215612cf257612cf1612935565b5b5f612cff85828601612abc565b9250506020612d1085828601612abc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d4c81612a95565b82525050565b5f612d5d8383612d43565b60208301905092915050565b5f602082019050919050565b5f612d7f82612d1a565b612d898185612d24565b9350612d9483612d34565b805f5b83811015612dc4578151612dab8882612d52565b9750612db683612d69565b925050600181019050612d97565b5085935050505092915050565b5f6020820190508181035f830152612de98184612d75565b905092915050565b612dfa81612bbf565b82525050565b5f602082019050612e135f830184612df1565b92915050565b612e2281612a95565b82525050565b5f602082019050612e3b5f830184612e19565b92915050565b5f602082019050612e545f830184612c6d565b92915050565b5f8060408385031215612e7057612e6f612935565b5b5f612e7d85828601612a0f565b9250506020612e8e85828601612a0f565b9150509250929050565b5f612ea282612c4b565b9050919050565b612eb281612e98565b82525050565b5f602082019050612ecb5f830184612ea9565b92915050565b5f612edb82612c4b565b9050919050565b612eeb81612ed1565b82525050565b5f602082019050612f045f830184612ee2565b92915050565b5f604082019050612f1d5f830185612a4e565b612f2a6020830184612e19565b9392505050565b5f81519050612f3f816129f9565b92915050565b5f8060408385031215612f5b57612f5a612935565b5b5f612f6885828601612f31565b9250506020612f7985828601612f31565b9150509250929050565b5f60208284031215612f9857612f97612935565b5b5f612fa584828501612f31565b91505092915050565b5f604082019050612fc15f830185612e19565b612fce6020830184612a4e565b9392505050565b612fde816129bd565b8114612fe8575f80fd5b50565b5f81519050612ff981612fd5565b92915050565b5f6020828403121561301457613013612935565b5b5f61302184828501612feb565b91505092915050565b5f61303482612a95565b9050919050565b6130448161302a565b811461304e575f80fd5b50565b5f8151905061305f8161303b565b92915050565b5f805f806080858703121561307d5761307c612935565b5b5f61308a87828801613051565b945050602061309b87828801612f31565b93505060406130ac87828801612f31565b92505060606130bd87828801612f31565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613100826129f0565b915061310b836129f0565b9250828201905080821115613123576131226130c9565b5b92915050565b5f819050919050565b5f61314c61314761314284613129565b612c21565b6129f0565b9050919050565b61315c81613132565b82525050565b5f60e0820190506131755f83018a612e19565b6131826020830189612e19565b61318f6040830188612a4e565b61319c6060830187613153565b6131a96080830186613153565b6131b660a0830185612e19565b6131c360c0830184612a4e565b98975050505050505050565b5f815190506131dd81612aa6565b92915050565b5f602082840312156131f8576131f7612935565b5b5f613205848285016131cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61328b61328661328184613268565b612c21565b6129f0565b9050919050565b61329b81613271565b82525050565b5f6040820190506132b45f830185613292565b81810360208301526132c68184612d75565b90509392505050565b5f80fd5b5f601f19601f8301169050919050565b6132ec826132d3565b810181811067ffffffffffffffff8211171561330b5761330a61320e565b5b80604052505050565b5f61331d61292c565b905061332982826132e3565b919050565b5f67ffffffffffffffff8211156133485761334761320e565b5b602082029050602081019050919050565b5f80fd5b5f61336f61336a8461332e565b613314565b9050808382526020820190506020840283018581111561339257613391613359565b5b835b818110156133bb57806133a78882612f31565b845260208401935050602081019050613394565b5050509392505050565b5f82601f8301126133d9576133d86132cf565b5b81516133e984826020860161335d565b91505092915050565b5f6020828403121561340757613406612935565b5b5f82015167ffffffffffffffff81111561342457613423612939565b5b613430848285016133c5565b91505092915050565b5f613443826129f0565b915061344e836129f0565b9250828203905081811115613466576134656130c9565b5b92915050565b5f82825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6134b0601f8361346c565b91506134bb8261347c565b602082019050919050565b5f6020820190508181035f8301526134dd816134a4565b9050919050565b5f60a0820190506134f75f830188612a4e565b6135046020830187613153565b81810360408301526135168186612d75565b90506135256060830185612e19565b6135326080830184612a4e565b9695505050505050565b5f60408201905061354f5f830185612a4e565b61355c6020830184612a4e565b9392505050565b5f6060820190506135765f830186612e19565b6135836020830185612e19565b6135906040830184612a4e565b949350505050565b5f6040820190506135ab5f830185612a4e565b6135b86020830184613153565b9392505050565b5f6135c982612bbf565b91506135d483612bbf565b9250828203905061ffff8111156135ee576135ed6130c9565b5b92915050565b5f6135fe826129f0565b9150613609836129f0565b9250828202613617816129f0565b9150828204841483151761362e5761362d6130c9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61366c826129f0565b9150613677836129f0565b92508261368757613686613635565b5b828204905092915050565b5f610100820190506136a65f83018b612e19565b6136b3602083018a612e19565b6136c06040830189612a4e565b6136cd6060830188612a4e565b6136da6080830187613153565b6136e760a0830186613153565b6136f460c0830185612e19565b61370160e0830184612a4e565b9998505050505050505050565b5f805f6060848603121561372557613724612935565b5b5f61373286828701612f31565b935050602061374386828701612f31565b925050604061375486828701612f31565b9150509250925092565b5f6040820190506137715f830185612e19565b61377e6020830184612b59565b939250505056fea264697066735822122043af4a7a14afdf32d3b7e2ec0e759f1a8bfb03d0f9f19b937466ba87cec566a664736f6c63430008140033

Deployed ByteCode

0x6080604052600436106101db575f3560e01c80638f9afcc211610101578063dacda1e911610094578063e4932abe11610063578063e4932abe146107a7578063ef8ef56f146107d1578063f6468251146107fb578063fb1db278146108255761024e565b8063dacda1e9146106d5578063ddc6326214610711578063e0bab4c41461074d578063e2bbb158146107775761024e565b8063babed18a116100d0578063babed18a1461060b578063c477899814610647578063d4b5492614610683578063d547741f146106ad5761024e565b80638f9afcc21461053f57806391d1485414610569578063a217fddf146105a5578063afa99860146105cf5761024e565b806336568abe116101795780636721eb97116101485780636721eb9714610472578063744fbc7a146104af5780637925c695146104d957806385ca2b0a146105155761024e565b806336568abe146103965780633bbed4a0146103be57806365ae77db146103fa57806365e38144146104365761024e565b8063202920ef116101b5578063202920ef146102f2578063248a9ca31461031c5780632e64cec1146103585780632f2ff15d1461036e5761024e565b806301ffc9a71461025257806303901fe71461028e57806314127a3b146102ca5761024e565b3661024e5773a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b15801561023a575f80fd5b505af115801561024c573d5f803e3d5ffd5b005b5f80fd5b34801561025d575f80fd5b5061027860048036038101906102739190612992565b61084f565b60405161028591906129d7565b60405180910390f35b348015610299575f80fd5b506102b460048036038101906102af9190612a23565b6108c8565b6040516102c19190612a5d565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb9190612ad0565b610960565b005b3480156102fd575f80fd5b50610306610a86565b6040516103139190612a5d565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612b2e565b610a8b565b60405161034f9190612b68565b60405180910390f35b348015610363575f80fd5b5061036c610aa7565b005b348015610379575f80fd5b50610394600480360381019061038f9190612b81565b610b18565b005b3480156103a1575f80fd5b506103bc60048036038101906103b79190612b81565b610b3a565b005b3480156103c9575f80fd5b506103e460048036038101906103df9190612ad0565b610bb5565b6040516103f191906129d7565b60405180910390f35b348015610405575f80fd5b50610420600480360381019061041b9190612a23565b610c2a565b60405161042d91906129d7565b60405180910390f35b348015610441575f80fd5b5061045c60048036038101906104579190612bf6565b610e25565b60405161046991906129d7565b60405180910390f35b34801561047d575f80fd5b5061049860048036038101906104939190612a23565b610e77565b6040516104a6929190612c7c565b60405180910390f35b3480156104ba575f80fd5b506104c3610ff4565b6040516104d09190612cc3565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa9190612cdc565b61100c565b60405161050c9190612dd1565b60405180910390f35b348015610520575f80fd5b506105296112e1565b6040516105369190612e00565b60405180910390f35b34801561054a575f80fd5b506105536112f5565b6040516105609190612e28565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190612b81565b61131a565b60405161059c91906129d7565b60405180910390f35b3480156105b0575f80fd5b506105b961137d565b6040516105c69190612b68565b60405180910390f35b3480156105da575f80fd5b506105f560048036038101906105f09190612cdc565b611383565b6040516106029190612a5d565b60405180910390f35b348015610616575f80fd5b50610631600480360381019061062c9190612ad0565b61145f565b60405161063e91906129d7565b60405180910390f35b348015610652575f80fd5b5061066d60048036038101906106689190612a23565b6116bf565b60405161067a91906129d7565b60405180910390f35b34801561068e575f80fd5b50610697611802565b6040516106a49190612cc3565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612b81565b61181a565b005b3480156106e0575f80fd5b506106fb60048036038101906106f69190612a23565b61183c565b6040516107089190612a5d565b60405180910390f35b34801561071c575f80fd5b5061073760048036038101906107329190612a23565b6118d2565b60405161074491906129d7565b60405180910390f35b348015610758575f80fd5b50610761611965565b60405161076e9190612e41565b60405180910390f35b610791600480360381019061078c9190612e5a565b61197d565b60405161079e91906129d7565b60405180910390f35b3480156107b2575f80fd5b506107bb611ab7565b6040516107c89190612e41565b60405180910390f35b3480156107dc575f80fd5b506107e5611acf565b6040516107f29190612eb8565b60405180910390f35b348015610806575f80fd5b5061080f611ae7565b60405161081c9190612b68565b60405180910390f35b348015610830575f80fd5b50610839611b0b565b6040516108469190612ef1565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c157506108c082611b23565b5b9050919050565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff166393f1a40b83306040518363ffffffff1660e01b8152600401610918929190612f0a565b6040805180830381865afa158015610932573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109569190612f45565b5080915050919050565b7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf761098a81611b8c565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109c49190612e28565b602060405180830381865afa1580156109df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a039190612f83565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610a40929190612fae565b6020604051808303815f875af1158015610a5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a809190612fff565b50505050565b60b481565b5f805f8381526020019081526020015f20600101549050919050565b7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610ad181611b8c565b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b14573d5f803e3d5ffd5b5050565b610b2182610a8b565b610b2a81611b8c565b610b348383611ba0565b50505050565b610b42611c89565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb08282611c90565b505050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610be081611b8c565b8260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001915050919050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610c5581611b8c565b5f80610c6085610e77565b915091505f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff16631526fe27876040518263ffffffff1660e01b8152600401610cb29190612a5d565b608060405180830381865afa158015610ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf19190613065565b50505090505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d309190612e28565b602060405180830381865afa158015610d4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6f9190612f83565b90507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0273ffffffffffffffffffffffffffffffffffffffff1663baa2abde8585845f803060b442610db491906130f6565b6040518863ffffffff1660e01b8152600401610dd69796959493929190613162565b60408051808303815f875af1158015610df1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e159190612f45565b5050600195505050505050919050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf7610e5081611b8c565b82600260146101000a81548161ffff021916908361ffff1602179055506001915050919050565b5f805f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff16631526fe27856040518263ffffffff1660e01b8152600401610ec79190612a5d565b608060405180830381865afa158015610ee2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f069190613065565b50505090505f8190508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c91906131e3565b93508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610feb91906131e3565b92505050915091565b73165c3410fc91ef562c50559f7d2289febed552d981565b606073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061109b575073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561118e57600267ffffffffffffffff8111156110bb576110ba61320e565b5b6040519080825280602002602001820160405280156110e95781602001602082028036833780820191505090505b50905082815f81518110611100576110ff61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061114f5761114e61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506112db565b600367ffffffffffffffff8111156111a9576111a861320e565b5b6040519080825280602002602001820160405280156111d75781602001602082028036833780820191505090505b50905082815f815181106111ee576111ed61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073a1077a294dde1b09bb078844df40758a5d0f9a27816001815181106112515761125061323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816002815181106112a05761129f61323b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b92915050565b600260149054906101000a900461ffff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f801b81565b5f8061138f848461100c565b90505f73165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff1663d06ca61f670de0b6b3a7640000846040518363ffffffff1660e01b81526004016113e99291906132a1565b5f60405180830381865afa158015611403573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061142b91906133f2565b9050806001835161143c9190613439565b8151811061144d5761144c61323b565b5b60200260200101519250505092915050565b5f6002600154036114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c906134c6565b60405180910390fd5b60026001819055507f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf76114d781611b8c565b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611546929190612fae565b6020604051808303815f875af1158015611562573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115869190612fff565b505f8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115c19190612e28565b602060405180830381865afa1580156115dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116009190612f83565b905073165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff16635c11d795825f6116528873a1077a294dde1b09bb078844df40758a5d0f9a2761100c565b3060b44261166091906130f6565b6040518663ffffffff1660e01b81526004016116809594939291906134e4565b5f604051808303815f87803b158015611697575f80fd5b505af11580156116a9573d5f803e3d5ffd5b5050505060019250505060018081905550919050565b5f7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf76116ea81611b8c565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff166393f1a40b85306040518363ffffffff1660e01b815260040161173a929190612f0a565b6040805180830381865afa158015611754573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117789190612f45565b50905073b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663441a3e7085836040518363ffffffff1660e01b81526004016117ca92919061353c565b5f604051808303815f87803b1580156117e1575f80fd5b505af11580156117f3573d5f803e3d5ffd5b50505050600192505050919050565b7398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0281565b61182382610a8b565b61182c81611b8c565b6118368383611c90565b50505050565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663149da26f83306040518363ffffffff1660e01b815260040161188c929190612f0a565b602060405180830381865afa1580156118a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190612f83565b9050919050565b5f600260015403611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906134c6565b60405180910390fd5b60026001819055507f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf761194a81611b8c565b61195383611d79565b50600191505060018081905550919050565b73efd766ccb38eaf1dfd701853bfce31359239f30581565b5f6002600154036119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba906134c6565b60405180910390fd5b60026001819055507f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf76119f581611b8c565b73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401611a4693929190613563565b6020604051808303815f875af1158015611a62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a869190612fff565b50611a90846121a8565b50611a9a84612379565b50611aa484612696565b5060019150506001808190555092915050565b732fa878ab3f87cc1c9737fc071108f904c0b0c95d81565b73a1077a294dde1b09bb078844df40758a5d0f9a2781565b7f0393b4c1b6519e8b53ae0efa1ab522060a3b9f8d86d09c8a22ca6d6eea735cf781565b73b2ca4a66d3e57a5a9a12043b6bad28249fe302d481565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611b9d81611b98611c89565b6128db565b50565b5f611bab838361131a565b611c7f5760015f808581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611c1c611c89565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611c83565b5f90505b92915050565b5f33905090565b5f611c9b838361131a565b15611d6f575f805f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611d0c611c89565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611d73565b5f90505b92915050565b5f73b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663e2bbb158835f6040518363ffffffff1660e01b8152600401611dc9929190613598565b5f604051808303815f87803b158015611de0575f80fd5b505af1158015611df2573d5f803e3d5ffd5b50505050732fa878ab3f87cc1c9737fc071108f904c0b0c95d73ffffffffffffffffffffffffffffffffffffffff1663095ea7b373165c3410fc91ef562c50559f7d2289febed552d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611e79929190612fae565b6020604051808303815f875af1158015611e95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb99190612fff565b505f732fa878ab3f87cc1c9737fc071108f904c0b0c95d73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f089190612e28565b602060405180830381865afa158015611f23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f479190612f83565b905073165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff166338ed1739825f611fad732fa878ab3f87cc1c9737fc071108f904c0b0c95d73a1077a294dde1b09bb078844df40758a5d0f9a2761100c565b3060b442611fbb91906130f6565b6040518663ffffffff1660e01b8152600401611fdb9594939291906134e4565b5f604051808303815f875af1158015611ff6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061201e91906133f2565b505f73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161206d9190612e28565b602060405180830381865afa158015612088573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ac9190612f83565b90505f612710600260149054906101000a900461ffff166127106120d091906135bf565b61ffff16836120df91906135f4565b6120e99190613662565b905073a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161215b929190612fae565b6020604051808303815f875af1158015612177573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219b9190612fff565b5060019350505050919050565b5f805f6121b484610e77565b915091505f73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122069190612e28565b602060405180830381865afa158015612221573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122459190612f83565b90505f6002826122559190613662565b90505f73a1077a294dde1b09bb078844df40758a5d0f9a2773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122a557836122a7565b845b905073165c3410fc91ef562c50559f7d2289febed552d973ffffffffffffffffffffffffffffffffffffffff166338ed1739835f6122f973a1077a294dde1b09bb078844df40758a5d0f9a278661100c565b3060b44261230791906130f6565b6040518663ffffffff1660e01b81526004016123279594939291906134e4565b5f604051808303815f875af1158015612342573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061236a91906133f2565b50600195505050505050919050565b5f805f61238584610e77565b915091508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37398bf93ebf5c380c0e6ae8e192a7e2ae08edacc027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016123f8929190612fae565b6020604051808303815f875af1158015612414573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124389190612fff565b508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37398bf93ebf5c380c0e6ae8e192a7e2ae08edacc027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124a8929190612fae565b6020604051808303815f875af11580156124c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e89190612fff565b505f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125239190612e28565b602060405180830381865afa15801561253e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125629190612f83565b90505f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161259e9190612e28565b602060405180830381865afa1580156125b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125dd9190612f83565b90507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0273ffffffffffffffffffffffffffffffffffffffff1663e8e33700858585855f803060b44261262391906130f6565b6040518963ffffffff1660e01b8152600401612646989796959493929190613692565b6060604051808303815f875af1158015612662573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612686919061370e565b5050506001945050505050919050565b5f8073b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff16631526fe27846040518263ffffffff1660e01b81526004016126e59190612a5d565b608060405180830381865afa158015612700573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127249190613065565b50505090508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b373b2ca4a66d3e57a5a9a12043b6bad28249fe302d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612798929190612fae565b6020604051808303815f875af11580156127b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127d89190612fff565b505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016128139190612e28565b602060405180830381865afa15801561282e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128529190612f83565b905073b2ca4a66d3e57a5a9a12043b6bad28249fe302d473ffffffffffffffffffffffffffffffffffffffff1663e2bbb15885836040518363ffffffff1660e01b81526004016128a392919061353c565b5f604051808303815f87803b1580156128ba575f80fd5b505af11580156128cc573d5f803e3d5ffd5b50505050600192505050919050565b6128e5828261131a565b6129285780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161291f92919061375e565b60405180910390fd5b5050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129718161293d565b811461297b575f80fd5b50565b5f8135905061298c81612968565b92915050565b5f602082840312156129a7576129a6612935565b5b5f6129b48482850161297e565b91505092915050565b5f8115159050919050565b6129d1816129bd565b82525050565b5f6020820190506129ea5f8301846129c8565b92915050565b5f819050919050565b612a02816129f0565b8114612a0c575f80fd5b50565b5f81359050612a1d816129f9565b92915050565b5f60208284031215612a3857612a37612935565b5b5f612a4584828501612a0f565b91505092915050565b612a57816129f0565b82525050565b5f602082019050612a705f830184612a4e565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a9f82612a76565b9050919050565b612aaf81612a95565b8114612ab9575f80fd5b50565b5f81359050612aca81612aa6565b92915050565b5f60208284031215612ae557612ae4612935565b5b5f612af284828501612abc565b91505092915050565b5f819050919050565b612b0d81612afb565b8114612b17575f80fd5b50565b5f81359050612b2881612b04565b92915050565b5f60208284031215612b4357612b42612935565b5b5f612b5084828501612b1a565b91505092915050565b612b6281612afb565b82525050565b5f602082019050612b7b5f830184612b59565b92915050565b5f8060408385031215612b9757612b96612935565b5b5f612ba485828601612b1a565b9250506020612bb585828601612abc565b9150509250929050565b5f61ffff82169050919050565b612bd581612bbf565b8114612bdf575f80fd5b50565b5f81359050612bf081612bcc565b92915050565b5f60208284031215612c0b57612c0a612935565b5b5f612c1884828501612be2565b91505092915050565b5f819050919050565b5f612c44612c3f612c3a84612a76565b612c21565b612a76565b9050919050565b5f612c5582612c2a565b9050919050565b5f612c6682612c4b565b9050919050565b612c7681612c5c565b82525050565b5f604082019050612c8f5f830185612c6d565b612c9c6020830184612c6d565b9392505050565b5f612cad82612c4b565b9050919050565b612cbd81612ca3565b82525050565b5f602082019050612cd65f830184612cb4565b92915050565b5f8060408385031215612cf257612cf1612935565b5b5f612cff85828601612abc565b9250506020612d1085828601612abc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d4c81612a95565b82525050565b5f612d5d8383612d43565b60208301905092915050565b5f602082019050919050565b5f612d7f82612d1a565b612d898185612d24565b9350612d9483612d34565b805f5b83811015612dc4578151612dab8882612d52565b9750612db683612d69565b925050600181019050612d97565b5085935050505092915050565b5f6020820190508181035f830152612de98184612d75565b905092915050565b612dfa81612bbf565b82525050565b5f602082019050612e135f830184612df1565b92915050565b612e2281612a95565b82525050565b5f602082019050612e3b5f830184612e19565b92915050565b5f602082019050612e545f830184612c6d565b92915050565b5f8060408385031215612e7057612e6f612935565b5b5f612e7d85828601612a0f565b9250506020612e8e85828601612a0f565b9150509250929050565b5f612ea282612c4b565b9050919050565b612eb281612e98565b82525050565b5f602082019050612ecb5f830184612ea9565b92915050565b5f612edb82612c4b565b9050919050565b612eeb81612ed1565b82525050565b5f602082019050612f045f830184612ee2565b92915050565b5f604082019050612f1d5f830185612a4e565b612f2a6020830184612e19565b9392505050565b5f81519050612f3f816129f9565b92915050565b5f8060408385031215612f5b57612f5a612935565b5b5f612f6885828601612f31565b9250506020612f7985828601612f31565b9150509250929050565b5f60208284031215612f9857612f97612935565b5b5f612fa584828501612f31565b91505092915050565b5f604082019050612fc15f830185612e19565b612fce6020830184612a4e565b9392505050565b612fde816129bd565b8114612fe8575f80fd5b50565b5f81519050612ff981612fd5565b92915050565b5f6020828403121561301457613013612935565b5b5f61302184828501612feb565b91505092915050565b5f61303482612a95565b9050919050565b6130448161302a565b811461304e575f80fd5b50565b5f8151905061305f8161303b565b92915050565b5f805f806080858703121561307d5761307c612935565b5b5f61308a87828801613051565b945050602061309b87828801612f31565b93505060406130ac87828801612f31565b92505060606130bd87828801612f31565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613100826129f0565b915061310b836129f0565b9250828201905080821115613123576131226130c9565b5b92915050565b5f819050919050565b5f61314c61314761314284613129565b612c21565b6129f0565b9050919050565b61315c81613132565b82525050565b5f60e0820190506131755f83018a612e19565b6131826020830189612e19565b61318f6040830188612a4e565b61319c6060830187613153565b6131a96080830186613153565b6131b660a0830185612e19565b6131c360c0830184612a4e565b98975050505050505050565b5f815190506131dd81612aa6565b92915050565b5f602082840312156131f8576131f7612935565b5b5f613205848285016131cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61328b61328661328184613268565b612c21565b6129f0565b9050919050565b61329b81613271565b82525050565b5f6040820190506132b45f830185613292565b81810360208301526132c68184612d75565b90509392505050565b5f80fd5b5f601f19601f8301169050919050565b6132ec826132d3565b810181811067ffffffffffffffff8211171561330b5761330a61320e565b5b80604052505050565b5f61331d61292c565b905061332982826132e3565b919050565b5f67ffffffffffffffff8211156133485761334761320e565b5b602082029050602081019050919050565b5f80fd5b5f61336f61336a8461332e565b613314565b9050808382526020820190506020840283018581111561339257613391613359565b5b835b818110156133bb57806133a78882612f31565b845260208401935050602081019050613394565b5050509392505050565b5f82601f8301126133d9576133d86132cf565b5b81516133e984826020860161335d565b91505092915050565b5f6020828403121561340757613406612935565b5b5f82015167ffffffffffffffff81111561342457613423612939565b5b613430848285016133c5565b91505092915050565b5f613443826129f0565b915061344e836129f0565b9250828203905081811115613466576134656130c9565b5b92915050565b5f82825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6134b0601f8361346c565b91506134bb8261347c565b602082019050919050565b5f6020820190508181035f8301526134dd816134a4565b9050919050565b5f60a0820190506134f75f830188612a4e565b6135046020830187613153565b81810360408301526135168186612d75565b90506135256060830185612e19565b6135326080830184612a4e565b9695505050505050565b5f60408201905061354f5f830185612a4e565b61355c6020830184612a4e565b9392505050565b5f6060820190506135765f830186612e19565b6135836020830185612e19565b6135906040830184612a4e565b949350505050565b5f6040820190506135ab5f830185612a4e565b6135b86020830184613153565b9392505050565b5f6135c982612bbf565b91506135d483612bbf565b9250828203905061ffff8111156135ee576135ed6130c9565b5b92915050565b5f6135fe826129f0565b9150613609836129f0565b9250828202613617816129f0565b9150828204841483151761362e5761362d6130c9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61366c826129f0565b9150613677836129f0565b92508261368757613686613635565b5b828204905092915050565b5f610100820190506136a65f83018b612e19565b6136b3602083018a612e19565b6136c06040830189612a4e565b6136cd6060830188612a4e565b6136da6080830187613153565b6136e760a0830186613153565b6136f460c0830185612e19565b61370160e0830184612a4e565b9998505050505050505050565b5f805f6060848603121561372557613724612935565b5b5f61373286828701612f31565b935050602061374386828701612f31565b925050604061375486828701612f31565b9150509250925092565b5f6040820190506137715f830185612e19565b61377e6020830184612b59565b939250505056fea264697066735822122043af4a7a14afdf32d3b7e2ec0e759f1a8bfb03d0f9f19b937466ba87cec566a664736f6c63430008140033