ETH Price: $2,422.35 (+2.97%)
Gas: 1.56 Gwei

Contract

0x9120e2f26999bD0D31080a11905F20DB46f45387
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Token195615112024-04-01 14:15:47165 days ago1711980947IN
0x9120e2f2...B46f45387
0 ETH0.0019274529.26372986
Init Token195615082024-04-01 14:15:11165 days ago1711980911IN
0x9120e2f2...B46f45387
0 ETH0.001504832.51305431
Withdraw Token195614982024-04-01 14:13:11165 days ago1711980791IN
0x9120e2f2...B46f45387
0 ETH0.0009265231.88651085
Stake195389252024-03-29 9:59:59169 days ago1711706399IN
0x9120e2f2...B46f45387
0 ETH0.0087603122.81485538
0x60806040195332222024-03-28 14:34:59169 days ago1711636499IN
 Create: CGPUStake
0 ETH0.2208955765.60416185

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CGPUStake

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-03-28
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.6;

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

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

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

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

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

    function approve(address spender, uint256 value) external;

    function transfer(address to, uint256 value) external;

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

contract CGPUStake {
    using SafeMath for uint256;
    IERC20 public stakeToken;
    IERC20 public rewardToken;
    IERC20 public token3;

    address payable public owner;

    uint256 public maxStakeableToken;
    uint256 public minimumStakeToken;
    uint256 public totalUnStakedToken;
    uint256 public totalStakedToken;
    uint256 public totalClaimedRewardToken;
    uint256 public totalStakers;
    uint256 public percentDivider;
    uint256 public totalFee;

    //STAKING DURATION
    uint256[4] public Duration = [30 days, 60 days, 90 days, 180 days];

    //APY BONUS IN PERCENTAGE 
    uint256[4] public Bonus = [2, 5, 9, 22];

    struct Stake {
        uint256 unstaketime;
        uint256 staketime;
        uint256 amount;
        uint256 rewardTokenAmount;
        uint256 reward;
        uint256 lastharvesttime;
        uint256 remainingreward;
        uint256 harvestreward;
        uint256 persecondreward;
        bool withdrawan;
        bool unstaked;
    }

    struct User {
        uint256 totalStakedTokenUser;
        uint256 totalUnstakedTokenUser;
        uint256 totalClaimedRewardTokenUser;
        uint256 stakeCount;
        bool alreadyExists;
    }

    mapping(address => User) public Stakers;
    mapping(uint256 => address) public StakersID;
    mapping(address => mapping(uint256 => Stake)) public stakersRecord;
    event STAKE(address Staker, uint256 amount);
    event HARVEST(address Staker, uint256 amount);
    event UNSTAKE(address Staker, uint256 amount);



    modifier onlyowner() {
        require(owner == msg.sender, "only owner");
        _;
    }

    constructor(address payable _owner, address token1, address token2) {
        owner = _owner;
        stakeToken = IERC20(token1);
        rewardToken = IERC20(token2);
        totalFee = 0;
        maxStakeableToken = 33800000000000000000000;
        percentDivider = 1000;
        minimumStakeToken = 338000000000000000000;
    }

    function stake(uint256 amount1, uint256 timeperiod) public {
        require(timeperiod >= 0 && timeperiod <= 3, "Invalid Time Period");
        require(amount1 >= minimumStakeToken, "stake more than minimum amount");
        uint256 CGPUVAL = getPriceinUSD();
        uint256 amount = amount1.sub((amount1.mul(totalFee)).div(percentDivider));
        uint256 rewardtokenPrice = (amount.mul(CGPUVAL)).div(1e18);
        if (!Stakers[msg.sender].alreadyExists) {
            Stakers[msg.sender].alreadyExists = true;
            StakersID[totalStakers] = msg.sender;
            totalStakers++;
        }

        stakeToken.transferFrom(msg.sender, address(this), amount1);

        uint256 index = Stakers[msg.sender].stakeCount;
        Stakers[msg.sender].totalStakedTokenUser = Stakers[msg.sender]
            .totalStakedTokenUser
            .add(amount);
        totalStakedToken = totalStakedToken.add(amount);
        stakersRecord[msg.sender][index].unstaketime = block.timestamp.add(
            Duration[timeperiod]
        );
        stakersRecord[msg.sender][index].staketime = block.timestamp;
        stakersRecord[msg.sender][index].amount = amount;
        stakersRecord[msg.sender][index].reward = rewardtokenPrice
            .mul(Bonus[timeperiod])
            .div(percentDivider);
        stakersRecord[msg.sender][index].persecondreward = stakersRecord[
            msg.sender
        ][index].reward.div(Duration[timeperiod]);

        stakersRecord[msg.sender][index].rewardTokenAmount = rewardtokenPrice;
        stakersRecord[msg.sender][index].lastharvesttime = 0;
        stakersRecord[msg.sender][index].remainingreward = stakersRecord[msg.sender][index].reward;
        stakersRecord[msg.sender][index].harvestreward = 0;
        Stakers[msg.sender].stakeCount++;

        emit STAKE(msg.sender, amount);
    }

    function unstake(uint256 index) public {
        require(!stakersRecord[msg.sender][index].unstaked, "already unstaked");
        require(
            stakersRecord[msg.sender][index].unstaketime < block.timestamp,
            "cannot unstake after before duration"
        );

        if(!stakersRecord[msg.sender][index].withdrawan){
            harvest(index);
        }
        stakersRecord[msg.sender][index].unstaked = true;

        stakeToken.transfer(
            msg.sender,
            stakersRecord[msg.sender][index].amount
        );
        
        totalUnStakedToken = totalUnStakedToken.add(
            stakersRecord[msg.sender][index].amount
        );
        Stakers[msg.sender].totalUnstakedTokenUser = Stakers[msg.sender]
            .totalUnstakedTokenUser
            .add(stakersRecord[msg.sender][index].amount);

        emit UNSTAKE(
            msg.sender,
            stakersRecord[msg.sender][index].amount
        );
    }

    function harvest(uint256 index) public {
        require(
            !stakersRecord[msg.sender][index].withdrawan,
            "already withdrawan"
        );
        require(!stakersRecord[msg.sender][index].unstaked, "already unstaked");
        uint256 rewardTillNow;
        uint256 commontimestamp;
        (rewardTillNow,commontimestamp) = realtimeRewardPerBlock(msg.sender , index);
        stakersRecord[msg.sender][index].lastharvesttime =  commontimestamp;
        rewardToken.transfer(
            msg.sender,
            rewardTillNow
        );
        totalClaimedRewardToken = totalClaimedRewardToken.add(
            rewardTillNow
        );
        stakersRecord[msg.sender][index].remainingreward = stakersRecord[msg.sender][index].remainingreward.sub(rewardTillNow);
        stakersRecord[msg.sender][index].harvestreward = stakersRecord[msg.sender][index].harvestreward.add(rewardTillNow);
        Stakers[msg.sender].totalClaimedRewardTokenUser = Stakers[msg.sender]
            .totalClaimedRewardTokenUser
            .add(rewardTillNow);

        if(stakersRecord[msg.sender][index].harvestreward == stakersRecord[msg.sender][index].reward){
            stakersRecord[msg.sender][index].withdrawan = true;

        }

        emit HARVEST(
            msg.sender,
            rewardTillNow
        );
    }

    function getPriceinUSD() public view returns (uint256){
        
        IERC20 CGPUTOKEN = IERC20(0x37EA8Adc25d7d10e2069698ad5a227E8b703A802); // Token address (Token Stake)
        IERC20 BUSDTOKEN = IERC20(0x37EA8Adc25d7d10e2069698ad5a227E8b703A802); // USDT Token address (Token Reward)
        IERC20 WETHTOKEN = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); // Wrapped Native Token
        address CGPU_WETH = 0x3FCA094B644C069723181974fe4e58ff007efd83; // CGPU_WETH pool address
        address BUSD_WETH = 0x3FCA094B644C069723181974fe4e58ff007efd83; //BUSD_WETH pool address
        uint256 BUSDSUPPLYINBUSD_WETH = BUSDTOKEN.balanceOf(BUSD_WETH);
        uint256 WETHSUPPLYINBUSD_WETH = WETHTOKEN.balanceOf(BUSD_WETH);
        uint256 ETHPRICE = (BUSDSUPPLYINBUSD_WETH.mul(1e18)).div(WETHSUPPLYINBUSD_WETH);
        uint256 WETHSUPPLYINCGPU_WETH =(WETHTOKEN.balanceOf(CGPU_WETH));
        uint256 CGPUSUPPLYINCGPU_WETH = (CGPUTOKEN.balanceOf(CGPU_WETH));
        uint256 CGPUUSDVAL = (((WETHSUPPLYINCGPU_WETH.mul(1e18)).div((CGPUSUPPLYINCGPU_WETH))).mul(ETHPRICE)).div(1e18);
        return CGPUUSDVAL;
    }

    function realtimeRewardPerBlock(address user, uint256 blockno) public view returns (uint256,uint256) {
        uint256 ret;
        uint256 commontimestamp;
            if (
                !stakersRecord[user][blockno].withdrawan &&
                !stakersRecord[user][blockno].unstaked
            ) {
                uint256 val;
                uint256 tempharvesttime = stakersRecord[user][blockno].lastharvesttime;
                commontimestamp = block.timestamp;
                if(tempharvesttime == 0){
                    tempharvesttime = stakersRecord[user][blockno].staketime;
                }
                val = commontimestamp - tempharvesttime;
                val = val.mul(stakersRecord[user][blockno].persecondreward);
                if (val < stakersRecord[user][blockno].remainingreward) {
                    ret += val;
                } else {
                    ret += stakersRecord[user][blockno].remainingreward;
                }
            }
        return (ret,commontimestamp);
    }

    function realtimeReward(address user) public view returns (uint256) {
        uint256 ret;
        for (uint256 i; i < Stakers[user].stakeCount; i++) {
            if (
                !stakersRecord[user][i].withdrawan &&
                !stakersRecord[user][i].unstaked
            ) {
                uint256 val;
                val = block.timestamp - stakersRecord[user][i].staketime;
                val = val.mul(stakersRecord[user][i].persecondreward);
                if (val < stakersRecord[user][i].reward) {
                    ret += val;
                } else {
                    ret += stakersRecord[user][i].reward;
                }
            }
        }
        return ret;
    }


    function SetStakeLimits(uint256 _min, uint256 _max) external onlyowner {
        minimumStakeToken = _min;
        maxStakeableToken = _max;
    }

    function SetTotalFees(uint256 _fee) external onlyowner {
        totalFee = _fee;
    }


    function SetStakeDuration(
        uint256 first,
        uint256 second,
        uint256 third,
        uint256 fourth
    ) external onlyowner {
        Duration[0] = first;
        Duration[1] = second;
        Duration[2] = third;
        Duration[3] = fourth;
    }

    function SetStakeBonus(
        uint256 first,
        uint256 second,
        uint256 third,
        uint256 fourth
    ) external onlyowner {
        Bonus[0] = first;
        Bonus[1] = second;
        Bonus[2] = third;
        Bonus[3] = fourth;
    }


    function withdrawETH() public onlyowner {
        uint256 balance = address(this).balance;
        require(balance > 0, "does not have any balance");
        payable(msg.sender).transfer(balance);
    }

    function initToken(address addr) public onlyowner{
        token3 = IERC20(addr);
    }
    function withdrawToken(uint256 amount) public onlyowner {
        token3.transfer(msg.sender
        , amount);
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"address","name":"token2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"HARVEST","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"STAKE","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UNSTAKE","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Bonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"first","type":"uint256"},{"internalType":"uint256","name":"second","type":"uint256"},{"internalType":"uint256","name":"third","type":"uint256"},{"internalType":"uint256","name":"fourth","type":"uint256"}],"name":"SetStakeBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"first","type":"uint256"},{"internalType":"uint256","name":"second","type":"uint256"},{"internalType":"uint256","name":"third","type":"uint256"},{"internalType":"uint256","name":"fourth","type":"uint256"}],"name":"SetStakeDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"SetStakeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"SetTotalFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Stakers","outputs":[{"internalType":"uint256","name":"totalStakedTokenUser","type":"uint256"},{"internalType":"uint256","name":"totalUnstakedTokenUser","type":"uint256"},{"internalType":"uint256","name":"totalClaimedRewardTokenUser","type":"uint256"},{"internalType":"uint256","name":"stakeCount","type":"uint256"},{"internalType":"bool","name":"alreadyExists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"StakersID","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceinUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"initToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxStakeableToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumStakeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"realtimeReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"blockno","type":"uint256"}],"name":"realtimeRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"timeperiod","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakersRecord","outputs":[{"internalType":"uint256","name":"unstaketime","type":"uint256"},{"internalType":"uint256","name":"staketime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardTokenAmount","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"lastharvesttime","type":"uint256"},{"internalType":"uint256","name":"remainingreward","type":"uint256"},{"internalType":"uint256","name":"harvestreward","type":"uint256"},{"internalType":"uint256","name":"persecondreward","type":"uint256"},{"internalType":"bool","name":"withdrawan","type":"bool"},{"internalType":"bool","name":"unstaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token3","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewardToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnStakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052604051806080016040528062278d0062ffffff168152602001624f1a0062ffffff1681526020016276a70062ffffff16815260200162ed4e0062ffffff16815250600c9060046100559291906101bd565b506040518060800160405280600260ff168152602001600560ff168152602001600960ff168152602001601660ff168152506010906004610097929190610204565b503480156100a3575f80fd5b5060405161397238038061397283398181016040528101906100c591906102fd565b8260035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b819055506907284d3a57eccb2000006004819055506103e8600a81905550681252b139330208000060058190555050505061034d565b82600481019282156101f3579160200282015b828111156101f2578251829062ffffff169055916020019190600101906101d0565b5b5090506102009190610249565b5090565b8260048101928215610238579160200282015b82811115610237578251829060ff16905591602001919060010190610217565b5b5090506102459190610249565b5090565b5b80821115610260575f815f90555060010161024a565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61029182610268565b9050919050565b6102a181610287565b81146102ab575f80fd5b50565b5f815190506102bc81610298565b92915050565b5f6102cc82610268565b9050919050565b6102dc816102c2565b81146102e6575f80fd5b50565b5f815190506102f7816102d3565b92915050565b5f805f6060848603121561031457610313610264565b5b5f610321868287016102ae565b9350506020610332868287016102e9565b9250506040610343868287016102e9565b9150509250925092565b6136188061035a5f395ff3fe608060405234801561000f575f80fd5b50600436106101d8575f3560e01c8063b067354d11610102578063ddc63262116100a0578063ef14101e1161006f578063ef14101e1461053c578063f7c618c11461055a578063f8eb741a14610578578063fe6f1b05146105a9576101d8565b8063ddc63262146104c6578063df4d17dc146104e2578063e086e5ec146104fe578063ede85eb714610508576101d8565b8063c73174bf116100dc578063c73174bf1461043e578063cb6d8ee61461045a578063d287de4e14610478578063da04197e14610496576101d8565b8063b067354d146103e6578063b6cfb9aa14610404578063c037283814610420576101d8565b80636356cdac1161017a578063869890381161014957806386989038146103525780638da5cb5b146103705780639502ddfd1461038e5780639845db70146103ac576101d8565b80636356cdac146102ba57806364949357146102ea5780637a6346e71461031a5780637b0472f014610336576101d8565b80634543a17c116101b65780634543a17c1461024657806350baa6221461026257806351ed6a301461027e5780635faf30ad1461029c576101d8565b80630db192e8146101dc5780631df4ccfc1461020c5780632e17de781461022a575b5f80fd5b6101f660048036038101906101f19190612b7d565b6105c7565b6040516102039190612bc0565b60405180910390f35b61021461087e565b6040516102219190612bc0565b60405180910390f35b610244600480360381019061023f9190612c03565b610884565b005b610260600480360381019061025b9190612c2e565b610d34565b005b61027c60048036038101906102779190612c03565b610dd5565b005b610286610ef0565b6040516102939190612cc7565b60405180910390f35b6102a4610f13565b6040516102b19190612bc0565b60405180910390f35b6102d460048036038101906102cf9190612c03565b611215565b6040516102e19190612bc0565b60405180910390f35b61030460048036038101906102ff9190612c03565b61122e565b6040516103119190612cef565b60405180910390f35b610334600480360381019061032f9190612d08565b61125e565b005b610350600480360381019061034b9190612c2e565b61135e565b005b61035a611bab565b6040516103679190612bc0565b60405180910390f35b610378611bb1565b6040516103859190612d8c565b60405180910390f35b610396611bd6565b6040516103a39190612bc0565b60405180910390f35b6103c660048036038101906103c19190612da5565b611bdc565b6040516103dd9b9a99989796959493929190612dfd565b60405180910390f35b6103ee611c56565b6040516103fb9190612bc0565b60405180910390f35b61041e60048036038101906104199190612c03565b611c5c565b005b610428611cf5565b6040516104359190612bc0565b60405180910390f35b61045860048036038101906104539190612d08565b611cfb565b005b610462611dfb565b60405161046f9190612bc0565b60405180910390f35b610480611e01565b60405161048d9190612bc0565b60405180910390f35b6104b060048036038101906104ab9190612c03565b611e07565b6040516104bd9190612bc0565b60405180910390f35b6104e060048036038101906104db9190612c03565b611e20565b005b6104fc60048036038101906104f79190612b7d565b6123b1565b005b610506612483565b005b610522600480360381019061051d9190612b7d565b61259f565b604051610533959493929190612ea6565b60405180910390f35b6105446125dd565b6040516105519190612cc7565b60405180910390f35b610562612602565b60405161056f9190612cc7565b60405180910390f35b610592600480360381019061058d9190612da5565b612627565b6040516105a0929190612ef7565b60405180910390f35b6105b16128f0565b6040516105be9190612bc0565b60405180910390f35b5f805f5b60145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600301548110156108745760165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206009015f9054906101000a900460ff161580156106d6575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f2060090160019054906101000a900460ff16155b15610867575f60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060010154426107379190612f4b565b905061079b60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2060080154826128f690919063ffffffff16565b905060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600401548110156108075780836108009190612f7e565b9250610865565b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060040154836108629190612f7e565b92505b505b80806001019150506105cb565b5080915050919050565b600b5481565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f2060090160019054906101000a900460ff1615610921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109189061300b565b60405180910390fd5b4260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f0154106109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890613099565b60405180910390fd5b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206009015f9054906101000a900460ff16610a1b57610a1a81611e20565b5b600160165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060090160016101000a81548160ff0219169083151502179055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20600201546040518363ffffffff1660e01b8152600401610b2c9291906130b7565b5f604051808303815f87803b158015610b43575f80fd5b505af1158015610b55573d5f803e3d5ffd5b50505050610bbd60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206002015460065461296d90919063ffffffff16565b600681905550610c6560165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206002015460145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015461296d90919063ffffffff16565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055507fdd932dbf4936c18597ed8cf0290c4866ee0974179a6a475acd677b06bec81c603360165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2060020154604051610d299291906130b7565b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90613128565b60405180910390fd5b81600581905550806004819055505050565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90613128565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ec09291906130b7565b5f604051808303815f87803b158015610ed7575f80fd5b505af1158015610ee9573d5f803e3d5ffd5b5050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f807337ea8adc25d7d10e2069698ad5a227e8b703a80290505f7337ea8adc25d7d10e2069698ad5a227e8b703a80290505f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290505f733fca094b644c069723181974fe4e58ff007efd8390505f733fca094b644c069723181974fe4e58ff007efd8390505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610fc69190612cef565b602060405180830381865afa158015610fe1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611005919061315a565b90505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016110419190612cef565b602060405180830381865afa15801561105c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611080919061315a565b90505f6110b0826110a2670de0b6b3a7640000866128f690919063ffffffff16565b6129ca90919063ffffffff16565b90505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016110ec9190612cef565b602060405180830381865afa158015611107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112b919061315a565b90505f8973ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016111679190612cef565b602060405180830381865afa158015611182573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a6919061315a565b90505f611202670de0b6b3a76400006111f4866111e6866111d8670de0b6b3a76400008a6128f690919063ffffffff16565b6129ca90919063ffffffff16565b6128f690919063ffffffff16565b6129ca90919063ffffffff16565b9050809b50505050505050505050505090565b60108160048110611224575f80fd5b015f915090505481565b6015602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613128565b60405180910390fd5b83600c5f6004811061130257611301613185565b5b018190555082600c60016004811061131d5761131c613185565b5b018190555081600c60026004811061133857611337613185565b5b018190555080600c60036004811061135357611352613185565b5b018190555050505050565b5f811015801561136f575060038111155b6113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906131fc565b60405180910390fd5b6005548210156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613264565b60405180910390fd5b5f6113fc610f13565b90505f61143a61142b600a5461141d600b54886128f690919063ffffffff16565b6129ca90919063ffffffff16565b85612a1390919063ffffffff16565b90505f61146a670de0b6b3a764000061145c85856128f690919063ffffffff16565b6129ca90919063ffffffff16565b905060145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f9054906101000a900460ff1661157e57600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f6101000a81548160ff0219169083151502179055503360155f60095481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f81548092919061157890613282565b91905055505b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016115da939291906132c9565b5f604051808303815f87803b1580156115f1575f80fd5b505af1158015611603573d5f803e3d5ffd5b505050505f60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060030154905061169d8360145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015461296d90919063ffffffff16565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01819055506116f58360075461296d90919063ffffffff16565b600781905550611723600c866004811061171257611711613185565b5b01544261296d90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f01819055504260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600101819055508260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060020181905550611859600a5461184b6010886004811061183a57611839613185565b5b0154856128f690919063ffffffff16565b6129ca90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060040181905550611923600c86600481106118c3576118c2613185565b5b015460165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20600401546129ca90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600801819055508160165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600301819055505f60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206005018190555060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206004015460165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600601819055505f60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206007018190555060145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003015f815480929190611b6590613282565b91905055507fa4e109bb7f03a3cbe671105ffecfc362319eaa88ecaf35997a4d3a2328d66d6c3384604051611b9b9291906130b7565b60405180910390a1505050505050565b60095481565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6016602052815f5260405f20602052805f5260405f205f9150915050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009015f9054906101000a900460ff16908060090160019054906101000a900460ff1690508b565b60045481565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613128565b60405180910390fd5b80600b8190555050565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613128565b60405180910390fd5b8360105f60048110611d9f57611d9e613185565b5b0181905550826010600160048110611dba57611db9613185565b5b0181905550816010600260048110611dd557611dd4613185565b5b0181905550806010600360048110611df057611def613185565b5b018190555050505050565b60075481565b60065481565b600c8160048110611e16575f80fd5b015f915090505481565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206009015f9054906101000a900460ff1615611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390613348565b60405180910390fd5b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f2060090160019054906101000a900460ff1615611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f509061300b565b60405180910390fd5b5f80611f653384612627565b80925081935050508060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f206005018190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161201d9291906130b7565b5f604051808303815f87803b158015612034575f80fd5b505af1158015612046573d5f803e3d5ffd5b5050505061205f8260085461296d90919063ffffffff16565b6008819055506120c78260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f2060060154612a1390919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f206006018190555061217c8260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f206007015461296d90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20600701819055506122228260145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461296d90919063ffffffff16565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002018190555060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f206004015460165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20600701540361237357600160165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f206009015f6101000a81548160ff0219169083151502179055505b7ffb9432fa1fa7e0db773769fb77b5f241e9eb4987776725d22c900b3949b38e9733836040516123a49291906130b7565b60405180910390a1505050565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243790613128565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613128565b60405180910390fd5b5f4790505f8111612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906133b0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561259b573d5f803e3d5ffd5b5050565b6014602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015f9054906101000a900460ff16905085565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f206009015f9054906101000a900460ff161580156126ee575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f2060090160019054906101000a900460ff16155b156128e1575f8060165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f206005015490504292505f81036127a45760165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f206001015490505b80836127b09190612f4b565b915061281460165f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f2060080154836128f690919063ffffffff16565b915060165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f20600601548210156128805781846128799190612f7e565b93506128de565b60165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f2060060154846128db9190612f7e565b93505b50505b81819350935050509250929050565b600a5481565b5f808303612906575f9050612967565b5f828461291391906133ce565b9050828482612922919061343c565b14612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906134dc565b60405180910390fd5b809150505b92915050565b5f80828461297b9190612f7e565b9050838110156129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790613544565b60405180910390fd5b8091505092915050565b5f612a0b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a5c565b905092915050565b5f612a5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612abd565b905092915050565b5f8083118290612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9991906135c2565b60405180910390fd5b505f8385612ab0919061343c565b9050809150509392505050565b5f838311158290612b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afb91906135c2565b60405180910390fd5b505f8385612b129190612f4b565b9050809150509392505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b4c82612b23565b9050919050565b612b5c81612b42565b8114612b66575f80fd5b50565b5f81359050612b7781612b53565b92915050565b5f60208284031215612b9257612b91612b1f565b5b5f612b9f84828501612b69565b91505092915050565b5f819050919050565b612bba81612ba8565b82525050565b5f602082019050612bd35f830184612bb1565b92915050565b612be281612ba8565b8114612bec575f80fd5b50565b5f81359050612bfd81612bd9565b92915050565b5f60208284031215612c1857612c17612b1f565b5b5f612c2584828501612bef565b91505092915050565b5f8060408385031215612c4457612c43612b1f565b5b5f612c5185828601612bef565b9250506020612c6285828601612bef565b9150509250929050565b5f819050919050565b5f612c8f612c8a612c8584612b23565b612c6c565b612b23565b9050919050565b5f612ca082612c75565b9050919050565b5f612cb182612c96565b9050919050565b612cc181612ca7565b82525050565b5f602082019050612cda5f830184612cb8565b92915050565b612ce981612b42565b82525050565b5f602082019050612d025f830184612ce0565b92915050565b5f805f8060808587031215612d2057612d1f612b1f565b5b5f612d2d87828801612bef565b9450506020612d3e87828801612bef565b9350506040612d4f87828801612bef565b9250506060612d6087828801612bef565b91505092959194509250565b5f612d7682612b23565b9050919050565b612d8681612d6c565b82525050565b5f602082019050612d9f5f830184612d7d565b92915050565b5f8060408385031215612dbb57612dba612b1f565b5b5f612dc885828601612b69565b9250506020612dd985828601612bef565b9150509250929050565b5f8115159050919050565b612df781612de3565b82525050565b5f61016082019050612e115f83018e612bb1565b612e1e602083018d612bb1565b612e2b604083018c612bb1565b612e38606083018b612bb1565b612e45608083018a612bb1565b612e5260a0830189612bb1565b612e5f60c0830188612bb1565b612e6c60e0830187612bb1565b612e7a610100830186612bb1565b612e88610120830185612dee565b612e96610140830184612dee565b9c9b505050505050505050505050565b5f60a082019050612eb95f830188612bb1565b612ec66020830187612bb1565b612ed36040830186612bb1565b612ee06060830185612bb1565b612eed6080830184612dee565b9695505050505050565b5f604082019050612f0a5f830185612bb1565b612f176020830184612bb1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f5582612ba8565b9150612f6083612ba8565b9250828203905081811115612f7857612f77612f1e565b5b92915050565b5f612f8882612ba8565b9150612f9383612ba8565b9250828201905080821115612fab57612faa612f1e565b5b92915050565b5f82825260208201905092915050565b7f616c726561647920756e7374616b6564000000000000000000000000000000005f82015250565b5f612ff5601083612fb1565b915061300082612fc1565b602082019050919050565b5f6020820190508181035f83015261302281612fe9565b9050919050565b7f63616e6e6f7420756e7374616b65206166746572206265666f726520647572615f8201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b5f613083602483612fb1565b915061308e82613029565b604082019050919050565b5f6020820190508181035f8301526130b081613077565b9050919050565b5f6040820190506130ca5f830185612ce0565b6130d76020830184612bb1565b9392505050565b7f6f6e6c79206f776e6572000000000000000000000000000000000000000000005f82015250565b5f613112600a83612fb1565b915061311d826130de565b602082019050919050565b5f6020820190508181035f83015261313f81613106565b9050919050565b5f8151905061315481612bd9565b92915050565b5f6020828403121561316f5761316e612b1f565b5b5f61317c84828501613146565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c69642054696d6520506572696f64000000000000000000000000005f82015250565b5f6131e6601383612fb1565b91506131f1826131b2565b602082019050919050565b5f6020820190508181035f830152613213816131da565b9050919050565b7f7374616b65206d6f7265207468616e206d696e696d756d20616d6f756e7400005f82015250565b5f61324e601e83612fb1565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b5f61328c82612ba8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132be576132bd612f1e565b5b600182019050919050565b5f6060820190506132dc5f830186612ce0565b6132e96020830185612ce0565b6132f66040830184612bb1565b949350505050565b7f616c7265616479207769746864726177616e00000000000000000000000000005f82015250565b5f613332601283612fb1565b915061333d826132fe565b602082019050919050565b5f6020820190508181035f83015261335f81613326565b9050919050565b7f646f6573206e6f74206861766520616e792062616c616e6365000000000000005f82015250565b5f61339a601983612fb1565b91506133a582613366565b602082019050919050565b5f6020820190508181035f8301526133c78161338e565b9050919050565b5f6133d882612ba8565b91506133e383612ba8565b92508282026133f181612ba8565b9150828204841483151761340857613407612f1e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61344682612ba8565b915061345183612ba8565b9250826134615761346061340f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6134c6602183612fb1565b91506134d18261346c565b604082019050919050565b5f6020820190508181035f8301526134f3816134ba565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61352e601b83612fb1565b9150613539826134fa565b602082019050919050565b5f6020820190508181035f83015261355b81613522565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61359482613562565b61359e8185612fb1565b93506135ae81856020860161356c565b6135b78161357a565b840191505092915050565b5f6020820190508181035f8301526135da818461358a565b90509291505056fea2646970667358221220894407671e7eca23319c81c2119fd8a74f89c999d691049d2b22611af6ae6c0864736f6c63430008190033000000000000000000000000118b8f03a2f6ea5471fb91280d4e5aa69b43fb2800000000000000000000000037ea8adc25d7d10e2069698ad5a227e8b703a80200000000000000000000000037ea8adc25d7d10e2069698ad5a227e8b703a802

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101d8575f3560e01c8063b067354d11610102578063ddc63262116100a0578063ef14101e1161006f578063ef14101e1461053c578063f7c618c11461055a578063f8eb741a14610578578063fe6f1b05146105a9576101d8565b8063ddc63262146104c6578063df4d17dc146104e2578063e086e5ec146104fe578063ede85eb714610508576101d8565b8063c73174bf116100dc578063c73174bf1461043e578063cb6d8ee61461045a578063d287de4e14610478578063da04197e14610496576101d8565b8063b067354d146103e6578063b6cfb9aa14610404578063c037283814610420576101d8565b80636356cdac1161017a578063869890381161014957806386989038146103525780638da5cb5b146103705780639502ddfd1461038e5780639845db70146103ac576101d8565b80636356cdac146102ba57806364949357146102ea5780637a6346e71461031a5780637b0472f014610336576101d8565b80634543a17c116101b65780634543a17c1461024657806350baa6221461026257806351ed6a301461027e5780635faf30ad1461029c576101d8565b80630db192e8146101dc5780631df4ccfc1461020c5780632e17de781461022a575b5f80fd5b6101f660048036038101906101f19190612b7d565b6105c7565b6040516102039190612bc0565b60405180910390f35b61021461087e565b6040516102219190612bc0565b60405180910390f35b610244600480360381019061023f9190612c03565b610884565b005b610260600480360381019061025b9190612c2e565b610d34565b005b61027c60048036038101906102779190612c03565b610dd5565b005b610286610ef0565b6040516102939190612cc7565b60405180910390f35b6102a4610f13565b6040516102b19190612bc0565b60405180910390f35b6102d460048036038101906102cf9190612c03565b611215565b6040516102e19190612bc0565b60405180910390f35b61030460048036038101906102ff9190612c03565b61122e565b6040516103119190612cef565b60405180910390f35b610334600480360381019061032f9190612d08565b61125e565b005b610350600480360381019061034b9190612c2e565b61135e565b005b61035a611bab565b6040516103679190612bc0565b60405180910390f35b610378611bb1565b6040516103859190612d8c565b60405180910390f35b610396611bd6565b6040516103a39190612bc0565b60405180910390f35b6103c660048036038101906103c19190612da5565b611bdc565b6040516103dd9b9a99989796959493929190612dfd565b60405180910390f35b6103ee611c56565b6040516103fb9190612bc0565b60405180910390f35b61041e60048036038101906104199190612c03565b611c5c565b005b610428611cf5565b6040516104359190612bc0565b60405180910390f35b61045860048036038101906104539190612d08565b611cfb565b005b610462611dfb565b60405161046f9190612bc0565b60405180910390f35b610480611e01565b60405161048d9190612bc0565b60405180910390f35b6104b060048036038101906104ab9190612c03565b611e07565b6040516104bd9190612bc0565b60405180910390f35b6104e060048036038101906104db9190612c03565b611e20565b005b6104fc60048036038101906104f79190612b7d565b6123b1565b005b610506612483565b005b610522600480360381019061051d9190612b7d565b61259f565b604051610533959493929190612ea6565b60405180910390f35b6105446125dd565b6040516105519190612cc7565b60405180910390f35b610562612602565b60405161056f9190612cc7565b60405180910390f35b610592600480360381019061058d9190612da5565b612627565b6040516105a0929190612ef7565b60405180910390f35b6105b16128f0565b6040516105be9190612bc0565b60405180910390f35b5f805f5b60145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600301548110156108745760165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206009015f9054906101000a900460ff161580156106d6575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f2060090160019054906101000a900460ff16155b15610867575f60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060010154426107379190612f4b565b905061079b60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2060080154826128f690919063ffffffff16565b905060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600401548110156108075780836108009190612f7e565b9250610865565b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060040154836108629190612f7e565b92505b505b80806001019150506105cb565b5080915050919050565b600b5481565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f2060090160019054906101000a900460ff1615610921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109189061300b565b60405180910390fd5b4260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f0154106109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890613099565b60405180910390fd5b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206009015f9054906101000a900460ff16610a1b57610a1a81611e20565b5b600160165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060090160016101000a81548160ff0219169083151502179055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20600201546040518363ffffffff1660e01b8152600401610b2c9291906130b7565b5f604051808303815f87803b158015610b43575f80fd5b505af1158015610b55573d5f803e3d5ffd5b50505050610bbd60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206002015460065461296d90919063ffffffff16565b600681905550610c6560165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206002015460145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015461296d90919063ffffffff16565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055507fdd932dbf4936c18597ed8cf0290c4866ee0974179a6a475acd677b06bec81c603360165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2060020154604051610d299291906130b7565b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90613128565b60405180910390fd5b81600581905550806004819055505050565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90613128565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ec09291906130b7565b5f604051808303815f87803b158015610ed7575f80fd5b505af1158015610ee9573d5f803e3d5ffd5b5050505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f807337ea8adc25d7d10e2069698ad5a227e8b703a80290505f7337ea8adc25d7d10e2069698ad5a227e8b703a80290505f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290505f733fca094b644c069723181974fe4e58ff007efd8390505f733fca094b644c069723181974fe4e58ff007efd8390505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610fc69190612cef565b602060405180830381865afa158015610fe1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611005919061315a565b90505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016110419190612cef565b602060405180830381865afa15801561105c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611080919061315a565b90505f6110b0826110a2670de0b6b3a7640000866128f690919063ffffffff16565b6129ca90919063ffffffff16565b90505f8673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016110ec9190612cef565b602060405180830381865afa158015611107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112b919061315a565b90505f8973ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016111679190612cef565b602060405180830381865afa158015611182573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a6919061315a565b90505f611202670de0b6b3a76400006111f4866111e6866111d8670de0b6b3a76400008a6128f690919063ffffffff16565b6129ca90919063ffffffff16565b6128f690919063ffffffff16565b6129ca90919063ffffffff16565b9050809b50505050505050505050505090565b60108160048110611224575f80fd5b015f915090505481565b6015602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613128565b60405180910390fd5b83600c5f6004811061130257611301613185565b5b018190555082600c60016004811061131d5761131c613185565b5b018190555081600c60026004811061133857611337613185565b5b018190555080600c60036004811061135357611352613185565b5b018190555050505050565b5f811015801561136f575060038111155b6113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906131fc565b60405180910390fd5b6005548210156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90613264565b60405180910390fd5b5f6113fc610f13565b90505f61143a61142b600a5461141d600b54886128f690919063ffffffff16565b6129ca90919063ffffffff16565b85612a1390919063ffffffff16565b90505f61146a670de0b6b3a764000061145c85856128f690919063ffffffff16565b6129ca90919063ffffffff16565b905060145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f9054906101000a900460ff1661157e57600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f6101000a81548160ff0219169083151502179055503360155f60095481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f81548092919061157890613282565b91905055505b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016115da939291906132c9565b5f604051808303815f87803b1580156115f1575f80fd5b505af1158015611603573d5f803e3d5ffd5b505050505f60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060030154905061169d8360145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015461296d90919063ffffffff16565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01819055506116f58360075461296d90919063ffffffff16565b600781905550611723600c866004811061171257611711613185565b5b01544261296d90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f01819055504260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600101819055508260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060020181905550611859600a5461184b6010886004811061183a57611839613185565b5b0154856128f690919063ffffffff16565b6129ca90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2060040181905550611923600c86600481106118c3576118c2613185565b5b015460165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20600401546129ca90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600801819055508160165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600301819055505f60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206005018190555060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206004015460165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20600601819055505f60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206007018190555060145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003015f815480929190611b6590613282565b91905055507fa4e109bb7f03a3cbe671105ffecfc362319eaa88ecaf35997a4d3a2328d66d6c3384604051611b9b9291906130b7565b60405180910390a1505050505050565b60095481565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6016602052815f5260405f20602052805f5260405f205f9150915050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009015f9054906101000a900460ff16908060090160019054906101000a900460ff1690508b565b60045481565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290613128565b60405180910390fd5b80600b8190555050565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613128565b60405180910390fd5b8360105f60048110611d9f57611d9e613185565b5b0181905550826010600160048110611dba57611db9613185565b5b0181905550816010600260048110611dd557611dd4613185565b5b0181905550806010600360048110611df057611def613185565b5b018190555050505050565b60075481565b60065481565b600c8160048110611e16575f80fd5b015f915090505481565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206009015f9054906101000a900460ff1615611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb390613348565b60405180910390fd5b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f2060090160019054906101000a900460ff1615611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f509061300b565b60405180910390fd5b5f80611f653384612627565b80925081935050508060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f206005018190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161201d9291906130b7565b5f604051808303815f87803b158015612034575f80fd5b505af1158015612046573d5f803e3d5ffd5b5050505061205f8260085461296d90919063ffffffff16565b6008819055506120c78260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f2060060154612a1390919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f206006018190555061217c8260165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f206007015461296d90919063ffffffff16565b60165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20600701819055506122228260145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461296d90919063ffffffff16565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002018190555060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f206004015460165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20600701540361237357600160165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f206009015f6101000a81548160ff0219169083151502179055505b7ffb9432fa1fa7e0db773769fb77b5f241e9eb4987776725d22c900b3949b38e9733836040516123a49291906130b7565b60405180910390a1505050565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243790613128565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613128565b60405180910390fd5b5f4790505f8111612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906133b0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561259b573d5f803e3d5ffd5b5050565b6014602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015f9054906101000a900460ff16905085565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f206009015f9054906101000a900460ff161580156126ee575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f2060090160019054906101000a900460ff16155b156128e1575f8060165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f206005015490504292505f81036127a45760165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f206001015490505b80836127b09190612f4b565b915061281460165f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f2060080154836128f690919063ffffffff16565b915060165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f20600601548210156128805781846128799190612f7e565b93506128de565b60165f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f2060060154846128db9190612f7e565b93505b50505b81819350935050509250929050565b600a5481565b5f808303612906575f9050612967565b5f828461291391906133ce565b9050828482612922919061343c565b14612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906134dc565b60405180910390fd5b809150505b92915050565b5f80828461297b9190612f7e565b9050838110156129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790613544565b60405180910390fd5b8091505092915050565b5f612a0b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a5c565b905092915050565b5f612a5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612abd565b905092915050565b5f8083118290612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9991906135c2565b60405180910390fd5b505f8385612ab0919061343c565b9050809150509392505050565b5f838311158290612b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afb91906135c2565b60405180910390fd5b505f8385612b129190612f4b565b9050809150509392505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b4c82612b23565b9050919050565b612b5c81612b42565b8114612b66575f80fd5b50565b5f81359050612b7781612b53565b92915050565b5f60208284031215612b9257612b91612b1f565b5b5f612b9f84828501612b69565b91505092915050565b5f819050919050565b612bba81612ba8565b82525050565b5f602082019050612bd35f830184612bb1565b92915050565b612be281612ba8565b8114612bec575f80fd5b50565b5f81359050612bfd81612bd9565b92915050565b5f60208284031215612c1857612c17612b1f565b5b5f612c2584828501612bef565b91505092915050565b5f8060408385031215612c4457612c43612b1f565b5b5f612c5185828601612bef565b9250506020612c6285828601612bef565b9150509250929050565b5f819050919050565b5f612c8f612c8a612c8584612b23565b612c6c565b612b23565b9050919050565b5f612ca082612c75565b9050919050565b5f612cb182612c96565b9050919050565b612cc181612ca7565b82525050565b5f602082019050612cda5f830184612cb8565b92915050565b612ce981612b42565b82525050565b5f602082019050612d025f830184612ce0565b92915050565b5f805f8060808587031215612d2057612d1f612b1f565b5b5f612d2d87828801612bef565b9450506020612d3e87828801612bef565b9350506040612d4f87828801612bef565b9250506060612d6087828801612bef565b91505092959194509250565b5f612d7682612b23565b9050919050565b612d8681612d6c565b82525050565b5f602082019050612d9f5f830184612d7d565b92915050565b5f8060408385031215612dbb57612dba612b1f565b5b5f612dc885828601612b69565b9250506020612dd985828601612bef565b9150509250929050565b5f8115159050919050565b612df781612de3565b82525050565b5f61016082019050612e115f83018e612bb1565b612e1e602083018d612bb1565b612e2b604083018c612bb1565b612e38606083018b612bb1565b612e45608083018a612bb1565b612e5260a0830189612bb1565b612e5f60c0830188612bb1565b612e6c60e0830187612bb1565b612e7a610100830186612bb1565b612e88610120830185612dee565b612e96610140830184612dee565b9c9b505050505050505050505050565b5f60a082019050612eb95f830188612bb1565b612ec66020830187612bb1565b612ed36040830186612bb1565b612ee06060830185612bb1565b612eed6080830184612dee565b9695505050505050565b5f604082019050612f0a5f830185612bb1565b612f176020830184612bb1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f5582612ba8565b9150612f6083612ba8565b9250828203905081811115612f7857612f77612f1e565b5b92915050565b5f612f8882612ba8565b9150612f9383612ba8565b9250828201905080821115612fab57612faa612f1e565b5b92915050565b5f82825260208201905092915050565b7f616c726561647920756e7374616b6564000000000000000000000000000000005f82015250565b5f612ff5601083612fb1565b915061300082612fc1565b602082019050919050565b5f6020820190508181035f83015261302281612fe9565b9050919050565b7f63616e6e6f7420756e7374616b65206166746572206265666f726520647572615f8201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b5f613083602483612fb1565b915061308e82613029565b604082019050919050565b5f6020820190508181035f8301526130b081613077565b9050919050565b5f6040820190506130ca5f830185612ce0565b6130d76020830184612bb1565b9392505050565b7f6f6e6c79206f776e6572000000000000000000000000000000000000000000005f82015250565b5f613112600a83612fb1565b915061311d826130de565b602082019050919050565b5f6020820190508181035f83015261313f81613106565b9050919050565b5f8151905061315481612bd9565b92915050565b5f6020828403121561316f5761316e612b1f565b5b5f61317c84828501613146565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c69642054696d6520506572696f64000000000000000000000000005f82015250565b5f6131e6601383612fb1565b91506131f1826131b2565b602082019050919050565b5f6020820190508181035f830152613213816131da565b9050919050565b7f7374616b65206d6f7265207468616e206d696e696d756d20616d6f756e7400005f82015250565b5f61324e601e83612fb1565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b5f61328c82612ba8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132be576132bd612f1e565b5b600182019050919050565b5f6060820190506132dc5f830186612ce0565b6132e96020830185612ce0565b6132f66040830184612bb1565b949350505050565b7f616c7265616479207769746864726177616e00000000000000000000000000005f82015250565b5f613332601283612fb1565b915061333d826132fe565b602082019050919050565b5f6020820190508181035f83015261335f81613326565b9050919050565b7f646f6573206e6f74206861766520616e792062616c616e6365000000000000005f82015250565b5f61339a601983612fb1565b91506133a582613366565b602082019050919050565b5f6020820190508181035f8301526133c78161338e565b9050919050565b5f6133d882612ba8565b91506133e383612ba8565b92508282026133f181612ba8565b9150828204841483151761340857613407612f1e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61344682612ba8565b915061345183612ba8565b9250826134615761346061340f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6134c6602183612fb1565b91506134d18261346c565b604082019050919050565b5f6020820190508181035f8301526134f3816134ba565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61352e601b83612fb1565b9150613539826134fa565b602082019050919050565b5f6020820190508181035f83015261355b81613522565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61359482613562565b61359e8185612fb1565b93506135ae81856020860161356c565b6135b78161357a565b840191505092915050565b5f6020820190508181035f8301526135da818461358a565b90509291505056fea2646970667358221220894407671e7eca23319c81c2119fd8a74f89c999d691049d2b22611af6ae6c0864736f6c63430008190033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000118b8f03a2f6ea5471fb91280d4e5aa69b43fb2800000000000000000000000037ea8adc25d7d10e2069698ad5a227e8b703a80200000000000000000000000037ea8adc25d7d10e2069698ad5a227e8b703a802

-----Decoded View---------------
Arg [0] : _owner (address): 0x118b8f03A2F6Ea5471FB91280D4E5aa69b43fb28
Arg [1] : token1 (address): 0x37EA8Adc25d7d10e2069698ad5a227E8b703A802
Arg [2] : token2 (address): 0x37EA8Adc25d7d10e2069698ad5a227E8b703A802

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000118b8f03a2f6ea5471fb91280d4e5aa69b43fb28
Arg [1] : 00000000000000000000000037ea8adc25d7d10e2069698ad5a227e8b703a802
Arg [2] : 00000000000000000000000037ea8adc25d7d10e2069698ad5a227e8b703a802


Deployed Bytecode Sourcemap

973:10450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9441:721;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1432:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4879:985;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10172:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11300:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1032:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7243:1136;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1595:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2258:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10428:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2991:1880;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1362:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1124:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1200:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2309:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1161:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10329:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1317:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10716:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1279:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1239:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1488:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5872:1363;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11205:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10991:206;;;:::i;:::-;;2212:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;1095:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1063:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8387:1046;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1396:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9441:721;9500:7;9520:11;9547:9;9542:592;9562:7;:13;9570:4;9562:13;;;;;;;;;;;;;;;:24;;;9558:1;:28;9542:592;;;9631:13;:19;9645:4;9631:19;;;;;;;;;;;;;;;:22;9651:1;9631:22;;;;;;;;;;;:33;;;;;;;;;;;;9630:34;:87;;;;;9686:13;:19;9700:4;9686:19;;;;;;;;;;;;;;;:22;9706:1;9686:22;;;;;;;;;;;:31;;;;;;;;;;;;9685:32;9630:87;9608:515;;;9752:11;9806:13;:19;9820:4;9806:19;;;;;;;;;;;;;;;:22;9826:1;9806:22;;;;;;;;;;;:32;;;9788:15;:50;;;;:::i;:::-;9782:56;;9863:47;9871:13;:19;9885:4;9871:19;;;;;;;;;;;;;;;:22;9891:1;9871:22;;;;;;;;;;;:38;;;9863:3;:7;;:47;;;;:::i;:::-;9857:53;;9939:13;:19;9953:4;9939:19;;;;;;;;;;;;;;;:22;9959:1;9939:22;;;;;;;;;;;:29;;;9933:3;:35;9929:179;;;10000:3;9993:10;;;;;:::i;:::-;;;9929:179;;;10059:13;:19;10073:4;10059:19;;;;;;;;;;;;;;;:22;10079:1;10059:22;;;;;;;;;;;:29;;;10052:36;;;;;:::i;:::-;;;9929:179;9733:390;9608:515;9588:3;;;;;;;9542:592;;;;10151:3;10144:10;;;9441:721;;;:::o;1432:23::-;;;;:::o;4879:985::-;4938:13;:25;4952:10;4938:25;;;;;;;;;;;;;;;:32;4964:5;4938:32;;;;;;;;;;;:41;;;;;;;;;;;;4937:42;4929:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5080:15;5033:13;:25;5047:10;5033:25;;;;;;;;;;;;;;;:32;5059:5;5033:32;;;;;;;;;;;:44;;;:62;5011:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;5176:13;:25;5190:10;5176:25;;;;;;;;;;;;;;;:32;5202:5;5176:32;;;;;;;;;;;:43;;;;;;;;;;;;5172:89;;5235:14;5243:5;5235:7;:14::i;:::-;5172:89;5315:4;5271:13;:25;5285:10;5271:25;;;;;;;;;;;;;;;:32;5297:5;5271:32;;;;;;;;;;;:41;;;:48;;;;;;;;;;;;;;;;;;5332:10;;;;;;;;;;:19;;;5366:10;5391:13;:25;5405:10;5391:25;;;;;;;;;;;;;;;:32;5417:5;5391:32;;;;;;;;;;;:39;;;5332:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5483:87;5520:13;:25;5534:10;5520:25;;;;;;;;;;;;;;;:32;5546:5;5520:32;;;;;;;;;;;:39;;;5483:18;;:22;;:87;;;;:::i;:::-;5462:18;:108;;;;5626:115;5701:13;:25;5715:10;5701:25;;;;;;;;;;;;;;;:32;5727:5;5701:32;;;;;;;;;;;:39;;;5626:7;:19;5634:10;5626:19;;;;;;;;;;;;;;;:56;;;:74;;:115;;;;:::i;:::-;5581:7;:19;5589:10;5581:19;;;;;;;;;;;;;;;:42;;:160;;;;5759:97;5781:10;5806:13;:25;5820:10;5806:25;;;;;;;;;;;;;;;:32;5832:5;5806:32;;;;;;;;;;;:39;;;5759:97;;;;;;;:::i;:::-;;;;;;;;4879:985;:::o;10172:149::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10274:4:::1;10254:17;:24;;;;10309:4;10289:17;:24;;;;10172:149:::0;;:::o;11300:120::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;11367:6:::1;;;;;;;;;;;:15;;;11383:10;11405:6;11367:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11300:120:::0;:::o;1032:24::-;;;;;;;;;;;;:::o;7243:1136::-;7289:7;7318:16;7344:42;7318:69;;7429:16;7455:42;7429:69;;7546:16;7572:42;7546:69;;7650:17;7670:42;7650:62;;7749:17;7769:42;7749:62;;7847:29;7879:9;:19;;;7899:9;7879:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7847:62;;7920:29;7952:9;:19;;;7972:9;7952:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7920:62;;7993:16;8012:60;8050:21;8013:31;8039:4;8013:21;:25;;:31;;;;:::i;:::-;8012:37;;:60;;;;:::i;:::-;7993:79;;8083:29;8115:9;:19;;;8135:9;8115:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8083:63;;8157:29;8190:9;:19;;;8210:9;8190:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8157:64;;8232:18;8253:90;8338:4;8254:78;8323:8;8255:62;8294:21;8256:31;8282:4;8256:21;:25;;:31;;;;:::i;:::-;8255:37;;:62;;;;:::i;:::-;8254:68;;:78;;;;:::i;:::-;8253:84;;:90;;;;:::i;:::-;8232:111;;8361:10;8354:17;;;;;;;;;;;;;7243:1136;:::o;1595:39::-;;;;;;;;;;;;;;;;;;;;:::o;2258:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;10428:280::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10603:5:::1;10589:8;10598:1;10589:11;;;;;;;:::i;:::-;;;:19;;;;10633:6;10619:8;10628:1;10619:11;;;;;;;:::i;:::-;;;:20;;;;10664:5;10650:8;10659:1;10650:11;;;;;;;:::i;:::-;;;:19;;;;10694:6;10680:8;10689:1;10680:11;;;;;;;:::i;:::-;;;:20;;;;10428:280:::0;;;;:::o;2991:1880::-;3083:1;3069:10;:15;;:34;;;;;3102:1;3088:10;:15;;3069:34;3061:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3157:17;;3146:7;:28;;3138:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3220:15;3238;:13;:15::i;:::-;3220:33;;3264:14;3281:56;3293:43;3321:14;;3294:21;3306:8;;3294:7;:11;;:21;;;;:::i;:::-;3293:27;;:43;;;;:::i;:::-;3281:7;:11;;:56;;;;:::i;:::-;3264:73;;3348:24;3375:31;3401:4;3376:19;3387:7;3376:6;:10;;:19;;;;:::i;:::-;3375:25;;:31;;;;:::i;:::-;3348:58;;3422:7;:19;3430:10;3422:19;;;;;;;;;;;;;;;:33;;;;;;;;;;;;3417:187;;3508:4;3472:7;:19;3480:10;3472:19;;;;;;;;;;;;;;;:33;;;:40;;;;;;;;;;;;;;;;;;3553:10;3527:9;:23;3537:12;;3527:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;3578:12;;:14;;;;;;;;;:::i;:::-;;;;;;3417:187;3616:10;;;;;;;;;;:23;;;3640:10;3660:4;3667:7;3616:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3688:13;3704:7;:19;3712:10;3704:19;;;;;;;;;;;;;;;:30;;;3688:46;;3788:80;3861:6;3788:7;:19;3796:10;3788:19;;;;;;;;;;;;;;;:54;;;:72;;:80;;;;:::i;:::-;3745:7;:19;3753:10;3745:19;;;;;;;;;;;;;;;:40;;:123;;;;3898:28;3919:6;3898:16;;:20;;:28;;;;:::i;:::-;3879:16;:47;;;;3984:65;4018:8;4027:10;4018:20;;;;;;;:::i;:::-;;;;3984:15;:19;;:65;;;;:::i;:::-;3937:13;:25;3951:10;3937:25;;;;;;;;;;;;;;;:32;3963:5;3937:32;;;;;;;;;;;:44;;:112;;;;4105:15;4060:13;:25;4074:10;4060:25;;;;;;;;;;;;;;;:32;4086:5;4060:32;;;;;;;;;;;:42;;:60;;;;4173:6;4131:13;:25;4145:10;4131:25;;;;;;;;;;;;;;;:32;4157:5;4131:32;;;;;;;;;;;:39;;:48;;;;4232:87;4304:14;;4232:53;4267:5;4273:10;4267:17;;;;;;;:::i;:::-;;;;4232:16;:34;;:53;;;;:::i;:::-;:71;;:87;;;;:::i;:::-;4190:13;:25;4204:10;4190:25;;;;;;;;;;;;;;;:32;4216:5;4190:32;;;;;;;;;;;:39;;:129;;;;4381:89;4449:8;4458:10;4449:20;;;;;;;:::i;:::-;;;;4381:13;:49;4409:10;4381:49;;;;;;;;;;;;;;;:56;4431:5;4381:56;;;;;;;;;;;:63;;;:67;;:89;;;;:::i;:::-;4330:13;:25;4344:10;4330:25;;;;;;;;;;;;;;;:32;4356:5;4330:32;;;;;;;;;;;:48;;:140;;;;4536:16;4483:13;:25;4497:10;4483:25;;;;;;;;;;;;;;;:32;4509:5;4483:32;;;;;;;;;;;:50;;:69;;;;4614:1;4563:13;:25;4577:10;4563:25;;;;;;;;;;;;;;;:32;4589:5;4563:32;;;;;;;;;;;:48;;:52;;;;4677:13;:25;4691:10;4677:25;;;;;;;;;;;;;;;:32;4703:5;4677:32;;;;;;;;;;;:39;;;4626:13;:25;4640:10;4626:25;;;;;;;;;;;;;;;:32;4652:5;4626:32;;;;;;;;;;;:48;;:90;;;;4776:1;4727:13;:25;4741:10;4727:25;;;;;;;;;;;;;;;:32;4753:5;4727:32;;;;;;;;;;;:46;;:50;;;;4788:7;:19;4796:10;4788:19;;;;;;;;;;;;;;;:30;;;:32;;;;;;;;;:::i;:::-;;;;;;4838:25;4844:10;4856:6;4838:25;;;;;;;:::i;:::-;;;;;;;;3050:1821;;;;2991:1880;;:::o;1362:27::-;;;;:::o;1124:28::-;;;;;;;;;;;;;:::o;1200:32::-;;;;:::o;2309:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1161:32::-;;;;:::o;10329:89::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10406:4:::1;10395:8;:15;;;;10329:89:::0;:::o;1317:38::-;;;;:::o;10716:265::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10885:5:::1;10874;10880:1;10874:8;;;;;;;:::i;:::-;;;:16;;;;10912:6;10901:5;10907:1;10901:8;;;;;;;:::i;:::-;;;:17;;;;10940:5;10929;10935:1;10929:8;;;;;;;:::i;:::-;;;:16;;;;10967:6;10956:5;10962:1;10956:8;;;;;;;:::i;:::-;;;:17;;;;10716:265:::0;;;;:::o;1279:31::-;;;;:::o;1239:33::-;;;;:::o;1488:66::-;;;;;;;;;;;;;;;;;;;;:::o;5872:1363::-;5945:13;:25;5959:10;5945:25;;;;;;;;;;;;;;;:32;5971:5;5945:32;;;;;;;;;;;:43;;;;;;;;;;;;5944:44;5922:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;6054:13;:25;6068:10;6054:25;;;;;;;;;;;;;;;:32;6080:5;6054:32;;;;;;;;;;;:41;;;;;;;;;;;;6053:42;6045:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6127:21;6159:23;6227:42;6250:10;6263:5;6227:22;:42::i;:::-;6193:76;;;;;;;;6332:15;6280:13;:25;6294:10;6280:25;;;;;;;;;;;;;;;:32;6306:5;6280:32;;;;;;;;;;;:48;;:67;;;;6358:11;;;;;;;;;;;:20;;;6393:10;6418:13;6358:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6479:66;6521:13;6479:23;;:27;;:66;;;;:::i;:::-;6453:23;:92;;;;6607:67;6660:13;6607;:25;6621:10;6607:25;;;;;;;;;;;;;;;:32;6633:5;6607:32;;;;;;;;;;;:48;;;:52;;:67;;;;:::i;:::-;6556:13;:25;6570:10;6556:25;;;;;;;;;;;;;;;:32;6582:5;6556:32;;;;;;;;;;;:48;;:118;;;;6734:65;6785:13;6734;:25;6748:10;6734:25;;;;;;;;;;;;;;;:32;6760:5;6734:32;;;;;;;;;;;:46;;;:50;;:65;;;;:::i;:::-;6685:13;:25;6699:10;6685:25;;;;;;;;;;;;;;;:32;6711:5;6685:32;;;;;;;;;;;:46;;:114;;;;6860:94;6940:13;6860:7;:19;6868:10;6860:19;;;;;;;;;;;;;;;:61;;;:79;;:94;;;;:::i;:::-;6810:7;:19;6818:10;6810:19;;;;;;;;;;;;;;;:47;;:144;;;;7020:13;:25;7034:10;7020:25;;;;;;;;;;;;;;;:32;7046:5;7020:32;;;;;;;;;;;:39;;;6970:13;:25;6984:10;6970:25;;;;;;;;;;;;;;;:32;6996:5;6970:32;;;;;;;;;;;:46;;;:89;6967:172;;7121:4;7075:13;:25;7089:10;7075:25;;;;;;;;;;;;;;;:32;7101:5;7075:32;;;;;;;;;;;:43;;;:50;;;;;;;;;;;;;;;;;;6967:172;7156:71;7178:10;7203:13;7156:71;;;;;;;:::i;:::-;;;;;;;;5911:1324;;5872:1363;:::o;11205:89::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;11281:4:::1;11265:6;;:21;;;;;;;;;;;;;;;;;;11205:89:::0;:::o;10991:206::-;2591:10;2582:19;;:5;;;;;;;;;;;:19;;;2574:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;11042:15:::1;11060:21;11042:39;;11110:1;11100:7;:11;11092:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;11160:10;11152:28;;:37;11181:7;11152:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;11031:166;10991:206::o:0;2212:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1095:20::-;;;;;;;;;;;;;:::o;1063:25::-;;;;;;;;;;;;;:::o;8387:1046::-;8471:7;8479;8499:11;8521:23;8582:13;:19;8596:4;8582:19;;;;;;;;;;;;;;;:28;8602:7;8582:28;;;;;;;;;;;:39;;;;;;;;;;;;8581:40;:99;;;;;8643:13;:19;8657:4;8643:19;;;;;;;;;;;;;;;:28;8663:7;8643:28;;;;;;;;;;;:37;;;;;;;;;;;;8642:38;8581:99;8559:828;;;8715:11;8745:23;8771:13;:19;8785:4;8771:19;;;;;;;;;;;;;;;:28;8791:7;8771:28;;;;;;;;;;;:44;;;8745:70;;8852:15;8834:33;;8908:1;8889:15;:20;8886:123;;8951:13;:19;8965:4;8951:19;;;;;;;;;;;;;;;:28;8971:7;8951:28;;;;;;;;;;;:38;;;8933:56;;8886:123;9051:15;9033;:33;;;;:::i;:::-;9027:39;;9091:53;9099:13;:19;9113:4;9099:19;;;;;;;;;;;;;;;:28;9119:7;9099:28;;;;;;;;;;;:44;;;9091:3;:7;;:53;;;;:::i;:::-;9085:59;;9173:13;:19;9187:4;9173:19;;;;;;;;;;;;;;;:28;9193:7;9173:28;;;;;;;;;;;:44;;;9167:3;:50;9163:209;;;9249:3;9242:10;;;;;:::i;:::-;;;9163:209;;;9308:13;:19;9322:4;9308:19;;;;;;;;;;;;;;;:28;9328:7;9308:28;;;;;;;;;;;:44;;;9301:51;;;;;:::i;:::-;;;9163:209;8696:691;;8559:828;9405:3;9409:15;9397:28;;;;;;8387:1046;;;;;:::o;1396:29::-;;;;:::o;12018:471::-;12076:7;12326:1;12321;:6;12317:47;;12351:1;12344:8;;;;12317:47;12376:9;12392:1;12388;:5;;;;:::i;:::-;12376:17;;12421:1;12416;12412;:5;;;;:::i;:::-;:10;12404:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12480:1;12473:8;;;12018:471;;;;;:::o;11451:181::-;11509:7;11529:9;11545:1;11541;:5;;;;:::i;:::-;11529:17;;11570:1;11565;:6;;11557:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11623:1;11616:8;;;11451:181;;;;:::o;12497:132::-;12555:7;12582:39;12586:1;12589;12582:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12575:46;;12497:132;;;;:::o;11640:136::-;11698:7;11725:43;11729:1;11732;11725:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11718:50;;11640:136;;;;:::o;12637:312::-;12757:7;12789:1;12785;:5;12792:12;12777:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12816:9;12832:1;12828;:5;;;;:::i;:::-;12816:17;;12940:1;12933:8;;;12637:312;;;;;:::o;11784:226::-;11904:7;11937:1;11932;:6;;11940:12;11924:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11964:9;11980:1;11976;:5;;;;:::i;:::-;11964:17;;12001:1;11994:8;;;11784:226;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:474::-;2287:6;2295;2344:2;2332:9;2323:7;2319:23;2315:32;2312:119;;;2350:79;;:::i;:::-;2312:119;2470:1;2495:53;2540:7;2531:6;2520:9;2516:22;2495:53;:::i;:::-;2485:63;;2441:117;2597:2;2623:53;2668:7;2659:6;2648:9;2644:22;2623:53;:::i;:::-;2613:63;;2568:118;2219:474;;;;;:::o;2699:60::-;2727:3;2748:5;2741:12;;2699:60;;;:::o;2765:142::-;2815:9;2848:53;2866:34;2875:24;2893:5;2875:24;:::i;:::-;2866:34;:::i;:::-;2848:53;:::i;:::-;2835:66;;2765:142;;;:::o;2913:126::-;2963:9;2996:37;3027:5;2996:37;:::i;:::-;2983:50;;2913:126;;;:::o;3045:139::-;3108:9;3141:37;3172:5;3141:37;:::i;:::-;3128:50;;3045:139;;;:::o;3190:157::-;3290:50;3334:5;3290:50;:::i;:::-;3285:3;3278:63;3190:157;;:::o;3353:248::-;3459:4;3497:2;3486:9;3482:18;3474:26;;3510:84;3591:1;3580:9;3576:17;3567:6;3510:84;:::i;:::-;3353:248;;;;:::o;3607:118::-;3694:24;3712:5;3694:24;:::i;:::-;3689:3;3682:37;3607:118;;:::o;3731:222::-;3824:4;3862:2;3851:9;3847:18;3839:26;;3875:71;3943:1;3932:9;3928:17;3919:6;3875:71;:::i;:::-;3731:222;;;;:::o;3959:765::-;4045:6;4053;4061;4069;4118:3;4106:9;4097:7;4093:23;4089:33;4086:120;;;4125:79;;:::i;:::-;4086:120;4245:1;4270:53;4315:7;4306:6;4295:9;4291:22;4270:53;:::i;:::-;4260:63;;4216:117;4372:2;4398:53;4443:7;4434:6;4423:9;4419:22;4398:53;:::i;:::-;4388:63;;4343:118;4500:2;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;:::i;:::-;4516:63;;4471:118;4628:2;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4599:118;3959:765;;;;;;;:::o;4730:104::-;4775:7;4804:24;4822:5;4804:24;:::i;:::-;4793:35;;4730:104;;;:::o;4840:142::-;4943:32;4969:5;4943:32;:::i;:::-;4938:3;4931:45;4840:142;;:::o;4988:254::-;5097:4;5135:2;5124:9;5120:18;5112:26;;5148:87;5232:1;5221:9;5217:17;5208:6;5148:87;:::i;:::-;4988:254;;;;:::o;5248:474::-;5316:6;5324;5373:2;5361:9;5352:7;5348:23;5344:32;5341:119;;;5379:79;;:::i;:::-;5341:119;5499:1;5524:53;5569:7;5560:6;5549:9;5545:22;5524:53;:::i;:::-;5514:63;;5470:117;5626:2;5652:53;5697:7;5688:6;5677:9;5673:22;5652:53;:::i;:::-;5642:63;;5597:118;5248:474;;;;;:::o;5728:90::-;5762:7;5805:5;5798:13;5791:21;5780:32;;5728:90;;;:::o;5824:109::-;5905:21;5920:5;5905:21;:::i;:::-;5900:3;5893:34;5824:109;;:::o;5939:1308::-;6301:4;6339:3;6328:9;6324:19;6316:27;;6353:71;6421:1;6410:9;6406:17;6397:6;6353:71;:::i;:::-;6434:72;6502:2;6491:9;6487:18;6478:6;6434:72;:::i;:::-;6516;6584:2;6573:9;6569:18;6560:6;6516:72;:::i;:::-;6598;6666:2;6655:9;6651:18;6642:6;6598:72;:::i;:::-;6680:73;6748:3;6737:9;6733:19;6724:6;6680:73;:::i;:::-;6763;6831:3;6820:9;6816:19;6807:6;6763:73;:::i;:::-;6846;6914:3;6903:9;6899:19;6890:6;6846:73;:::i;:::-;6929;6997:3;6986:9;6982:19;6973:6;6929:73;:::i;:::-;7012;7080:3;7069:9;7065:19;7056:6;7012:73;:::i;:::-;7095:67;7157:3;7146:9;7142:19;7133:6;7095:67;:::i;:::-;7172:68;7235:3;7224:9;7220:19;7210:7;7172:68;:::i;:::-;5939:1308;;;;;;;;;;;;;;:::o;7253:652::-;7452:4;7490:3;7479:9;7475:19;7467:27;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7585:72;7653:2;7642:9;7638:18;7629:6;7585:72;:::i;:::-;7667;7735:2;7724:9;7720:18;7711:6;7667:72;:::i;:::-;7749;7817:2;7806:9;7802:18;7793:6;7749:72;:::i;:::-;7831:67;7893:3;7882:9;7878:19;7869:6;7831:67;:::i;:::-;7253:652;;;;;;;;:::o;7911:332::-;8032:4;8070:2;8059:9;8055:18;8047:26;;8083:71;8151:1;8140:9;8136:17;8127:6;8083:71;:::i;:::-;8164:72;8232:2;8221:9;8217:18;8208:6;8164:72;:::i;:::-;7911:332;;;;;:::o;8249:180::-;8297:77;8294:1;8287:88;8394:4;8391:1;8384:15;8418:4;8415:1;8408:15;8435:194;8475:4;8495:20;8513:1;8495:20;:::i;:::-;8490:25;;8529:20;8547:1;8529:20;:::i;:::-;8524:25;;8573:1;8570;8566:9;8558:17;;8597:1;8591:4;8588:11;8585:37;;;8602:18;;:::i;:::-;8585:37;8435:194;;;;:::o;8635:191::-;8675:3;8694:20;8712:1;8694:20;:::i;:::-;8689:25;;8728:20;8746:1;8728:20;:::i;:::-;8723:25;;8771:1;8768;8764:9;8757:16;;8792:3;8789:1;8786:10;8783:36;;;8799:18;;:::i;:::-;8783:36;8635:191;;;;:::o;8832:169::-;8916:11;8950:6;8945:3;8938:19;8990:4;8985:3;8981:14;8966:29;;8832:169;;;;:::o;9007:166::-;9147:18;9143:1;9135:6;9131:14;9124:42;9007:166;:::o;9179:366::-;9321:3;9342:67;9406:2;9401:3;9342:67;:::i;:::-;9335:74;;9418:93;9507:3;9418:93;:::i;:::-;9536:2;9531:3;9527:12;9520:19;;9179:366;;;:::o;9551:419::-;9717:4;9755:2;9744:9;9740:18;9732:26;;9804:9;9798:4;9794:20;9790:1;9779:9;9775:17;9768:47;9832:131;9958:4;9832:131;:::i;:::-;9824:139;;9551:419;;;:::o;9976:223::-;10116:34;10112:1;10104:6;10100:14;10093:58;10185:6;10180:2;10172:6;10168:15;10161:31;9976:223;:::o;10205:366::-;10347:3;10368:67;10432:2;10427:3;10368:67;:::i;:::-;10361:74;;10444:93;10533:3;10444:93;:::i;:::-;10562:2;10557:3;10553:12;10546:19;;10205:366;;;:::o;10577:419::-;10743:4;10781:2;10770:9;10766:18;10758:26;;10830:9;10824:4;10820:20;10816:1;10805:9;10801:17;10794:47;10858:131;10984:4;10858:131;:::i;:::-;10850:139;;10577:419;;;:::o;11002:332::-;11123:4;11161:2;11150:9;11146:18;11138:26;;11174:71;11242:1;11231:9;11227:17;11218:6;11174:71;:::i;:::-;11255:72;11323:2;11312:9;11308:18;11299:6;11255:72;:::i;:::-;11002:332;;;;;:::o;11340:160::-;11480:12;11476:1;11468:6;11464:14;11457:36;11340:160;:::o;11506:366::-;11648:3;11669:67;11733:2;11728:3;11669:67;:::i;:::-;11662:74;;11745:93;11834:3;11745:93;:::i;:::-;11863:2;11858:3;11854:12;11847:19;;11506:366;;;:::o;11878:419::-;12044:4;12082:2;12071:9;12067:18;12059:26;;12131:9;12125:4;12121:20;12117:1;12106:9;12102:17;12095:47;12159:131;12285:4;12159:131;:::i;:::-;12151:139;;11878:419;;;:::o;12303:143::-;12360:5;12391:6;12385:13;12376:22;;12407:33;12434:5;12407:33;:::i;:::-;12303:143;;;;:::o;12452:351::-;12522:6;12571:2;12559:9;12550:7;12546:23;12542:32;12539:119;;;12577:79;;:::i;:::-;12539:119;12697:1;12722:64;12778:7;12769:6;12758:9;12754:22;12722:64;:::i;:::-;12712:74;;12668:128;12452:351;;;;:::o;12809:180::-;12857:77;12854:1;12847:88;12954:4;12951:1;12944:15;12978:4;12975:1;12968:15;12995:169;13135:21;13131:1;13123:6;13119:14;13112:45;12995:169;:::o;13170:366::-;13312:3;13333:67;13397:2;13392:3;13333:67;:::i;:::-;13326:74;;13409:93;13498:3;13409:93;:::i;:::-;13527:2;13522:3;13518:12;13511:19;;13170:366;;;:::o;13542:419::-;13708:4;13746:2;13735:9;13731:18;13723:26;;13795:9;13789:4;13785:20;13781:1;13770:9;13766:17;13759:47;13823:131;13949:4;13823:131;:::i;:::-;13815:139;;13542:419;;;:::o;13967:180::-;14107:32;14103:1;14095:6;14091:14;14084:56;13967:180;:::o;14153:366::-;14295:3;14316:67;14380:2;14375:3;14316:67;:::i;:::-;14309:74;;14392:93;14481:3;14392:93;:::i;:::-;14510:2;14505:3;14501:12;14494:19;;14153:366;;;:::o;14525:419::-;14691:4;14729:2;14718:9;14714:18;14706:26;;14778:9;14772:4;14768:20;14764:1;14753:9;14749:17;14742:47;14806:131;14932:4;14806:131;:::i;:::-;14798:139;;14525:419;;;:::o;14950:233::-;14989:3;15012:24;15030:5;15012:24;:::i;:::-;15003:33;;15058:66;15051:5;15048:77;15045:103;;15128:18;;:::i;:::-;15045:103;15175:1;15168:5;15164:13;15157:20;;14950:233;;;:::o;15189:442::-;15338:4;15376:2;15365:9;15361:18;15353:26;;15389:71;15457:1;15446:9;15442:17;15433:6;15389:71;:::i;:::-;15470:72;15538:2;15527:9;15523:18;15514:6;15470:72;:::i;:::-;15552;15620:2;15609:9;15605:18;15596:6;15552:72;:::i;:::-;15189:442;;;;;;:::o;15637:168::-;15777:20;15773:1;15765:6;15761:14;15754:44;15637:168;:::o;15811:366::-;15953:3;15974:67;16038:2;16033:3;15974:67;:::i;:::-;15967:74;;16050:93;16139:3;16050:93;:::i;:::-;16168:2;16163:3;16159:12;16152:19;;15811:366;;;:::o;16183:419::-;16349:4;16387:2;16376:9;16372:18;16364:26;;16436:9;16430:4;16426:20;16422:1;16411:9;16407:17;16400:47;16464:131;16590:4;16464:131;:::i;:::-;16456:139;;16183:419;;;:::o;16608:175::-;16748:27;16744:1;16736:6;16732:14;16725:51;16608:175;:::o;16789:366::-;16931:3;16952:67;17016:2;17011:3;16952:67;:::i;:::-;16945:74;;17028:93;17117:3;17028:93;:::i;:::-;17146:2;17141:3;17137:12;17130:19;;16789:366;;;:::o;17161:419::-;17327:4;17365:2;17354:9;17350:18;17342:26;;17414:9;17408:4;17404:20;17400:1;17389:9;17385:17;17378:47;17442:131;17568:4;17442:131;:::i;:::-;17434:139;;17161:419;;;:::o;17586:410::-;17626:7;17649:20;17667:1;17649:20;:::i;:::-;17644:25;;17683:20;17701:1;17683:20;:::i;:::-;17678:25;;17738:1;17735;17731:9;17760:30;17778:11;17760:30;:::i;:::-;17749:41;;17939:1;17930:7;17926:15;17923:1;17920:22;17900:1;17893:9;17873:83;17850:139;;17969:18;;:::i;:::-;17850:139;17634:362;17586:410;;;;:::o;18002:180::-;18050:77;18047:1;18040:88;18147:4;18144:1;18137:15;18171:4;18168:1;18161:15;18188:185;18228:1;18245:20;18263:1;18245:20;:::i;:::-;18240:25;;18279:20;18297:1;18279:20;:::i;:::-;18274:25;;18318:1;18308:35;;18323:18;;:::i;:::-;18308:35;18365:1;18362;18358:9;18353:14;;18188:185;;;;:::o;18379:220::-;18519:34;18515:1;18507:6;18503:14;18496:58;18588:3;18583:2;18575:6;18571:15;18564:28;18379:220;:::o;18605:366::-;18747:3;18768:67;18832:2;18827:3;18768:67;:::i;:::-;18761:74;;18844:93;18933:3;18844:93;:::i;:::-;18962:2;18957:3;18953:12;18946:19;;18605:366;;;:::o;18977:419::-;19143:4;19181:2;19170:9;19166:18;19158:26;;19230:9;19224:4;19220:20;19216:1;19205:9;19201:17;19194:47;19258:131;19384:4;19258:131;:::i;:::-;19250:139;;18977:419;;;:::o;19402:177::-;19542:29;19538:1;19530:6;19526:14;19519:53;19402:177;:::o;19585:366::-;19727:3;19748:67;19812:2;19807:3;19748:67;:::i;:::-;19741:74;;19824:93;19913:3;19824:93;:::i;:::-;19942:2;19937:3;19933:12;19926:19;;19585:366;;;:::o;19957:419::-;20123:4;20161:2;20150:9;20146:18;20138:26;;20210:9;20204:4;20200:20;20196:1;20185:9;20181:17;20174:47;20238:131;20364:4;20238:131;:::i;:::-;20230:139;;19957:419;;;:::o;20382:99::-;20434:6;20468:5;20462:12;20452:22;;20382:99;;;:::o;20487:139::-;20576:6;20571:3;20566;20560:23;20617:1;20608:6;20603:3;20599:16;20592:27;20487:139;;;:::o;20632:102::-;20673:6;20724:2;20720:7;20715:2;20708:5;20704:14;20700:28;20690:38;;20632:102;;;:::o;20740:377::-;20828:3;20856:39;20889:5;20856:39;:::i;:::-;20911:71;20975:6;20970:3;20911:71;:::i;:::-;20904:78;;20991:65;21049:6;21044:3;21037:4;21030:5;21026:16;20991:65;:::i;:::-;21081:29;21103:6;21081:29;:::i;:::-;21076:3;21072:39;21065:46;;20832:285;20740:377;;;;:::o;21123:313::-;21236:4;21274:2;21263:9;21259:18;21251:26;;21323:9;21317:4;21313:20;21309:1;21298:9;21294:17;21287:47;21351:78;21424:4;21415:6;21351:78;:::i;:::-;21343:86;;21123:313;;;;:::o

Swarm Source

ipfs://894407671e7eca23319c81c2119fd8a74f89c999d691049d2b22611af6ae6c08

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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