ETH Price: $2,045.57 (-0.76%)

Contract

0xCc68CFf4Ed3F7Dbc8A76286Df0Dce0bE70069E69
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Sale Token184310852023-10-26 1:21:59887 days ago1698283319IN
0xCc68CFf4...E70069E69
0 ETH0.0007466820.33506247
Add Payable Toke...184299122023-10-25 21:25:23887 days ago1698269123IN
0xCc68CFf4...E70069E69
0 ETH0.001557721.89484007
Set Sale Token184217042023-10-24 17:48:23888 days ago1698169703IN
0xCc68CFf4...E70069E69
0 ETH0.0023258820.48673986
Transfer Ownersh...183998492023-10-21 16:23:23891 days ago1697905403IN
0xCc68CFf4...E70069E69
0 ETH0.0003913513.47442167

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BLOCKR

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-10-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

pragma solidity ^0.8.0;

contract OwnerWithdrawable is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    receive() external payable {}

    fallback() external payable {}

    function withdraw(address token, uint256 amt) public onlyOwner {
        IERC20(token).safeTransfer(msg.sender, amt);
    }

    function withdrawAll(address token) public onlyOwner {
        uint256 amt = IERC20(token).balanceOf(address(this));
        withdraw(token, amt);
    }

    function withdrawCurrency(uint256 amt) public onlyOwner {
        payable(msg.sender).transfer(amt);
    }

    // function deposit(address token, uint256 amt) public onlyOwner {
    //     uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
    //     require(allowance >= amt, "Check the token allowance");
    //     IERC20(token).transferFrom(owner(), address(this), amt);
    // }
}

pragma solidity ^0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

contract BLOCKR is OwnerWithdrawable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    using SafeERC20 for IERC20Metadata;

    uint256 public rate;

    address public saleToken;

    uint public saleTokenDec;

    uint256 public totalTokensforSale;

    mapping(address => bool) public payableTokens;

    mapping(address => uint256) public tokenPrices;

    bool public saleStatus;

    address[] public buyers;
    mapping(address => BuyerDetails) public buyersDetails;

    uint256 public totalBuyers;
    uint256 public totalTokensSold;

    struct BuyerDetails {
        uint amount;
        bool exists;
    }

    struct BuyerAmount {
        uint amount;
        address buyer;
    }

    constructor() {
        saleStatus = false;
    }

    modifier saleEnabled() {
        require(saleStatus == true, "Presale: is not enabled");
        _;
    }

    modifier saleStoped() {
        require(saleStatus == false, "Presale: is not stopped");
        _;
    }

    function setSaleToken(
        uint256 _decimals,
        uint256 _totalTokensforSale,
        uint256 _rate,
        bool _saleStatus
    ) external onlyOwner {
        require(_rate != 0);
        rate = _rate;
        saleStatus = _saleStatus;
        saleTokenDec = _decimals;
        totalTokensforSale = _totalTokensforSale;
    }

    function stopSale() external onlyOwner saleEnabled {
        saleStatus = false;
    }

    function resumeSale() external onlyOwner saleStoped {
        saleStatus = true;
    }

    function addPayableTokens(
        address[] memory _tokens,
        uint256[] memory _prices
    ) external onlyOwner {
        require(
            _tokens.length == _prices.length,
            "Presale: tokens & prices arrays length mismatch"
        );

        for (uint256 i = 0; i < _tokens.length; i++) {
            require(_prices[i] != 0);
            payableTokens[_tokens[i]] = true;
            tokenPrices[_tokens[i]] = _prices[i];
        }
    }

    function payableTokenStatus(
        address _token,
        bool _status
    ) external onlyOwner {
        require(payableTokens[_token] != _status);

        payableTokens[_token] = _status;
    }

    function updateTokenRate(
        address[] memory _tokens,
        uint256[] memory _prices,
        uint256 _rate
    ) external onlyOwner {
        require(
            _tokens.length == _prices.length,
            "Presale: tokens & prices arrays length mismatch"
        );

        if (_rate != 0) {
            rate = _rate;
        }

        for (uint256 i = 0; i < _tokens.length; i += 1) {
            require(payableTokens[_tokens[i]] == true);
            require(_prices[i] != 0);
            tokenPrices[_tokens[i]] = _prices[i];
        }
    }

    function getTokenAmount(
        address token,
        uint256 amount
    ) public view returns (uint256) {
        uint256 amtOut;
        if (token != address(0)) {
            require(payableTokens[token] == true, "Presale: Token not allowed");
            uint256 price = tokenPrices[token];
            amtOut = amount.mul(10 ** saleTokenDec).div(price);
        } else {
            amtOut = amount.mul(10 ** saleTokenDec).div(rate);
        }
        return amtOut;
    }

    function transferETH() private {
        payable(owner()).transfer(msg.value);
    }

    function transferToken(address _token, uint256 _amount) private {
        IERC20(_token).safeTransferFrom(
            msg.sender,
            owner(),
            _amount
        );
    }

    function buySPL(
        address _token,
        uint256 _amount
    ) external payable saleEnabled {
        uint256 saleTokenAmt = _token != address(0)
            ? getTokenAmount(_token, _amount)
            : getTokenAmount(address(0), msg.value);

        require(saleTokenAmt != 0, "Presale: Amount is 0");
        require(
            (totalTokensSold + saleTokenAmt) < totalTokensforSale,
            "Presale: Not enough tokens to be sale"
        );

        if (_token != address(0)) {
            transferToken(_token, _amount);
        } else {
            transferETH();
        }

        totalTokensSold += saleTokenAmt;

        if (!buyersDetails[msg.sender].exists) {
            buyers.push(msg.sender);
            buyersDetails[msg.sender].exists = true;
            totalBuyers += 1;
        }

        buyersDetails[msg.sender].amount += saleTokenAmt;
    }

    function buyersAmountList(
        uint _from,
        uint _to
    ) external view returns (BuyerAmount[] memory) {
        require(_from < _to, "Presale: _from should be less than _to");

        uint to = _to > totalBuyers ? totalBuyers : _to;
        uint from = _from > totalBuyers ? totalBuyers : _from;

        BuyerAmount[] memory buyersAmt = new BuyerAmount[](to - from);

        for (uint i = from; i < to; i += 1) {
            buyersAmt[i].amount = buyersDetails[buyers[i]].amount;
            buyersAmt[i].buyer = buyers[i];
        }

        return buyersAmt;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"addPayableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buySPL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"buyersAmountList","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"buyer","type":"address"}],"internalType":"struct BLOCKR.BuyerAmount[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersDetails","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"payableTokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_decimals","type":"uint256"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_saleStatus","type":"bool"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5062000032620000266200005360201b60201c565b6200005b60201b60201c565b6000600760006101000a81548160ff0219169083151502179055506200011f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61329f806200012f6000396000f3fe6080604052600436106101855760003560e01c806380655eef116100d1578063e985e3671161008a578063f3fef3a311610064578063f3fef3a314610543578063f4739ee31461056c578063f9020e33146105aa578063fa09e630146105d55761018c565b8063e985e367146104b2578063f2aa8218146104dd578063f2fde38b1461051a5761018c565b806380655eef146103a2578063807ea425146103df5780638da5cb5b14610408578063ace1741c14610433578063c76a0f111461045e578063e36b0b371461049b5761018c565b806338ccf4c81161013e5780635413c1c8116101185780635413c1c81461030c57806363b20117146103355780636bcedf9c14610360578063715018a61461038b5761018c565b806338ccf4c81461029c5780633abd0136146102b85780633c00a36c146102e35761018c565b8063115ece4c1461018e578063204120bc146101cb57806329d429a8146102085780632c4e722e146102315780633115329e1461025c57806333e364cb146102855761018c565b3661018c57005b005b34801561019a57600080fd5b506101b560048036038101906101b09190612307565b6105fe565b6040516101c29190612cf7565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed91906122a2565b610789565b6040516101ff9190612cf7565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a91906122cb565b6107a1565b005b34801561023d57600080fd5b506102466108d5565b6040516102539190612cf7565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906123af565b6108db565b005b34801561029157600080fd5b5061029a610b80565b005b6102b660048036038101906102b19190612307565b610c6f565b005b3480156102c457600080fd5b506102cd610f9d565b6040516102da9190612cf7565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190612457565b610fa3565b005b34801561031857600080fd5b50610333600480360381019061032e9190612343565b611069565b005b34801561034157600080fd5b5061034a6112f7565b6040516103579190612cf7565b60405180910390f35b34801561036c57600080fd5b506103756112fd565b6040516103829190612cf7565b60405180910390f35b34801561039757600080fd5b506103a0611303565b005b3480156103ae57600080fd5b506103c960048036038101906103c491906122a2565b61138b565b6040516103d69190612b3a565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906124e5565b6113ab565b005b34801561041457600080fd5b5061041d61146a565b60405161042a9190612a9d565b60405180910390f35b34801561043f57600080fd5b50610448611493565b6040516104559190612cf7565b60405180910390f35b34801561046a57600080fd5b50610485600480360381019061048091906124a9565b611499565b6040516104929190612b18565b60405180910390f35b3480156104a757600080fd5b506104b061178f565b005b3480156104be57600080fd5b506104c761187e565b6040516104d49190612a9d565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612457565b6118a4565b6040516105119190612a9d565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c91906122a2565b6118e3565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612307565b6119db565b005b34801561057857600080fd5b50610593600480360381019061058e91906122a2565b611a86565b6040516105a1929190612d12565b60405180910390f35b3480156105b657600080fd5b506105bf611ab7565b6040516105cc9190612b3a565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f791906122a2565b611aca565b005b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107475760011515600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90612b97565b60405180910390fd5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061073f81610731600354600a6107229190612f09565b87611be190919063ffffffff16565b611bf790919063ffffffff16565b91505061077f565b61077c60015461076e600354600a61075f9190612f09565b86611be190919063ffffffff16565b611bf790919063ffffffff16565b90505b8091505092915050565b60066020528060005260406000206000915090505481565b6107a9611c0d565b73ffffffffffffffffffffffffffffffffffffffff166107c761146a565b73ffffffffffffffffffffffffffffffffffffffff161461081d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081490612c77565b60405180910390fd5b801515600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561087a57600080fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60015481565b6108e3611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661090161146a565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612c77565b60405180910390fd5b815183511461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290612c17565b60405180910390fd5b600081146109ab57806001819055505b60005b8351811015610b7a5760011515600560008684815181106109f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a5457600080fd5b6000838281518110610a8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610aa257600080fd5b828181518110610adb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000868481518110610b20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600181610b739190612e2f565b90506109ae565b50505050565b610b88611c0d565b73ffffffffffffffffffffffffffffffffffffffff16610ba661146a565b73ffffffffffffffffffffffffffffffffffffffff1614610bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf390612c77565b60405180910390fd5b60001515600760009054906101000a900460ff16151514610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612bd7565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550565b60011515600760009054906101000a900460ff16151514610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612cb7565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0b57610d066000346105fe565b610d16565b610d1583836105fe565b5b90506000811415610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612c37565b60405180910390fd5b60045481600b54610d6d9190612e2f565b10610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490612c57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610df057610deb8383611c15565b610df9565b610df8611c4d565b5b80600b6000828254610e0b9190612e2f565b92505081905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16610f3f576008339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055506001600a6000828254610f379190612e2f565b925050819055505b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610f919190612e2f565b92505081905550505050565b600a5481565b610fab611c0d565b73ffffffffffffffffffffffffffffffffffffffff16610fc961146a565b73ffffffffffffffffffffffffffffffffffffffff161461101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690612c77565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611065573d6000803e3d6000fd5b5050565b611071611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661108f61146a565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90612c77565b60405180910390fd5b8051825114611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090612c17565b60405180910390fd5b60005b82518110156112f2576000828281518110611170577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151141561118357600080fd5b6001600560008584815181106111c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000858481518110611299577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806112ea90613130565b91505061112c565b505050565b600b5481565b60045481565b61130b611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661132961146a565b73ffffffffffffffffffffffffffffffffffffffff161461137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137690612c77565b60405180910390fd5b6113896000611c9d565b565b60056020528060005260406000206000915054906101000a900460ff1681565b6113b3611c0d565b73ffffffffffffffffffffffffffffffffffffffff166113d161146a565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90612c77565b60405180910390fd5b600082141561143557600080fd5b8160018190555080600760006101000a81548160ff021916908315150217905550836003819055508260048190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60608183106114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490612bb7565b60405180910390fd5b6000600a5483116114ee57826114f2565b600a545b90506000600a5485116115055784611509565b600a545b9050600081836115199190613081565b67ffffffffffffffff811115611558577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561159157816020015b61157e6120dd565b8152602001906001900390816115765790505b50905060008290505b838110156117825760096000600883815481106115e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154828281518110611682577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000018181525050600881815481106116cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611730577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060018161177b9190612e2f565b905061159a565b5080935050505092915050565b611797611c0d565b73ffffffffffffffffffffffffffffffffffffffff166117b561146a565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290612c77565b60405180910390fd5b60011515600760009054906101000a900460ff16151514611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890612cb7565b60405180910390fd5b6000600760006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600881815481106118b457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118eb611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661190961146a565b73ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690612c77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690612b77565b60405180910390fd5b6119d881611c9d565b50565b6119e3611c0d565b73ffffffffffffffffffffffffffffffffffffffff16611a0161146a565b73ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90612c77565b60405180910390fd5b611a8233828473ffffffffffffffffffffffffffffffffffffffff16611d619092919063ffffffff16565b5050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b600760009054906101000a900460ff1681565b611ad2611c0d565b73ffffffffffffffffffffffffffffffffffffffff16611af061146a565b73ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90612c77565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b819190612a9d565b60206040518083038186803b158015611b9957600080fd5b505afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612480565b9050611bdd82826119db565b5050565b60008183611bef9190613027565b905092915050565b60008183611c059190612e85565b905092915050565b600033905090565b611c4933611c2161146a565b838573ffffffffffffffffffffffffffffffffffffffff16611de7909392919063ffffffff16565b5050565b611c5561146a565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611c9a573d6000803e3d6000fd5b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611de28363a9059cbb60e01b8484604051602401611d80929190612aef565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e70565b505050565b611e6a846323b872dd60e01b858585604051602401611e0893929190612ab8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e70565b50505050565b6000611ed2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f379092919063ffffffff16565b9050600081511115611f325780806020019051810190611ef2919061242e565b611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890612cd7565b60405180910390fd5b5b505050565b6060611f468484600085611f4f565b90509392505050565b606082471015611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90612bf7565b60405180910390fd5b611f9d85612063565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390612c97565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516120059190612a86565b60006040518083038185875af1925050503d8060008114612042576040519150601f19603f3d011682016040523d82523d6000602084013e612047565b606091505b5091509150612057828286612076565b92505050949350505050565b600080823b905060008111915050919050565b60608315612086578290506120d6565b6000835111156120995782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9190612b55565b60405180910390fd5b9392505050565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600061212061211b84612d6c565b612d3b565b9050808382526020820190508285602086028201111561213f57600080fd5b60005b8581101561216f578161215588826121e5565b845260208401935060208301925050600181019050612142565b5050509392505050565b600061218c61218784612d98565b612d3b565b905080838252602082019050828560208602820111156121ab57600080fd5b60005b858110156121db57816121c18882612278565b8452602084019350602083019250506001810190506121ae565b5050509392505050565b6000813590506121f481613224565b92915050565b600082601f83011261220b57600080fd5b813561221b84826020860161210d565b91505092915050565b600082601f83011261223557600080fd5b8135612245848260208601612179565b91505092915050565b60008135905061225d8161323b565b92915050565b6000815190506122728161323b565b92915050565b60008135905061228781613252565b92915050565b60008151905061229c81613252565b92915050565b6000602082840312156122b457600080fd5b60006122c2848285016121e5565b91505092915050565b600080604083850312156122de57600080fd5b60006122ec858286016121e5565b92505060206122fd8582860161224e565b9150509250929050565b6000806040838503121561231a57600080fd5b6000612328858286016121e5565b925050602061233985828601612278565b9150509250929050565b6000806040838503121561235657600080fd5b600083013567ffffffffffffffff81111561237057600080fd5b61237c858286016121fa565b925050602083013567ffffffffffffffff81111561239957600080fd5b6123a585828601612224565b9150509250929050565b6000806000606084860312156123c457600080fd5b600084013567ffffffffffffffff8111156123de57600080fd5b6123ea868287016121fa565b935050602084013567ffffffffffffffff81111561240757600080fd5b61241386828701612224565b925050604061242486828701612278565b9150509250925092565b60006020828403121561244057600080fd5b600061244e84828501612263565b91505092915050565b60006020828403121561246957600080fd5b600061247784828501612278565b91505092915050565b60006020828403121561249257600080fd5b60006124a08482850161228d565b91505092915050565b600080604083850312156124bc57600080fd5b60006124ca85828601612278565b92505060206124db85828601612278565b9150509250929050565b600080600080608085870312156124fb57600080fd5b600061250987828801612278565b945050602061251a87828801612278565b935050604061252b87828801612278565b925050606061253c8782880161224e565b91505092959194509250565b60006125548383612a39565b60408301905092915050565b612569816130b5565b82525050565b612578816130b5565b82525050565b600061258982612dd4565b6125938185612e02565b935061259e83612dc4565b8060005b838110156125cf5781516125b68882612548565b97506125c183612df5565b9250506001810190506125a2565b5085935050505092915050565b6125e5816130c7565b82525050565b60006125f682612ddf565b6126008185612e13565b93506126108185602086016130fd565b80840191505092915050565b600061262782612dea565b6126318185612e1e565b93506126418185602086016130fd565b61264a81613206565b840191505092915050565b6000612662602683612e1e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126c8601a83612e1e565b91507f50726573616c653a20546f6b656e206e6f7420616c6c6f7765640000000000006000830152602082019050919050565b6000612708602683612e1e565b91507f50726573616c653a205f66726f6d2073686f756c64206265206c65737320746860008301527f616e205f746f00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061276e601783612e1e565b91507f50726573616c653a206973206e6f742073746f707065640000000000000000006000830152602082019050919050565b60006127ae602683612e1e565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612814602f83612e1e565b91507f50726573616c653a20746f6b656e73202620707269636573206172726179732060008301527f6c656e677468206d69736d6174636800000000000000000000000000000000006020830152604082019050919050565b600061287a601483612e1e565b91507f50726573616c653a20416d6f756e7420697320300000000000000000000000006000830152602082019050919050565b60006128ba602583612e1e565b91507f50726573616c653a204e6f7420656e6f75676820746f6b656e7320746f20626560008301527f2073616c650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612920602083612e1e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612960601d83612e1e565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006129a0601783612e1e565b91507f50726573616c653a206973206e6f7420656e61626c65640000000000000000006000830152602082019050919050565b60006129e0602a83612e1e565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b604082016000820151612a4f6000850182612a68565b506020820151612a626020850182612560565b50505050565b612a71816130f3565b82525050565b612a80816130f3565b82525050565b6000612a9282846125eb565b915081905092915050565b6000602082019050612ab2600083018461256f565b92915050565b6000606082019050612acd600083018661256f565b612ada602083018561256f565b612ae76040830184612a77565b949350505050565b6000604082019050612b04600083018561256f565b612b116020830184612a77565b9392505050565b60006020820190508181036000830152612b32818461257e565b905092915050565b6000602082019050612b4f60008301846125dc565b92915050565b60006020820190508181036000830152612b6f818461261c565b905092915050565b60006020820190508181036000830152612b9081612655565b9050919050565b60006020820190508181036000830152612bb0816126bb565b9050919050565b60006020820190508181036000830152612bd0816126fb565b9050919050565b60006020820190508181036000830152612bf081612761565b9050919050565b60006020820190508181036000830152612c10816127a1565b9050919050565b60006020820190508181036000830152612c3081612807565b9050919050565b60006020820190508181036000830152612c508161286d565b9050919050565b60006020820190508181036000830152612c70816128ad565b9050919050565b60006020820190508181036000830152612c9081612913565b9050919050565b60006020820190508181036000830152612cb081612953565b9050919050565b60006020820190508181036000830152612cd081612993565b9050919050565b60006020820190508181036000830152612cf0816129d3565b9050919050565b6000602082019050612d0c6000830184612a77565b92915050565b6000604082019050612d276000830185612a77565b612d3460208301846125dc565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715612d6257612d616131d7565b5b8060405250919050565b600067ffffffffffffffff821115612d8757612d866131d7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612db357612db26131d7565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612e3a826130f3565b9150612e45836130f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e7a57612e79613179565b5b828201905092915050565b6000612e90826130f3565b9150612e9b836130f3565b925082612eab57612eaa6131a8565b5b828204905092915050565b6000808291508390505b6001851115612f0057808604811115612edc57612edb613179565b5b6001851615612eeb5780820291505b8081029050612ef985613217565b9450612ec0565b94509492505050565b6000612f14826130f3565b9150612f1f836130f3565b9250612f4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f54565b905092915050565b600082612f645760019050613020565b81612f725760009050613020565b8160018114612f885760028114612f9257612fc1565b6001915050613020565b60ff841115612fa457612fa3613179565b5b8360020a915084821115612fbb57612fba613179565b5b50613020565b5060208310610133831016604e8410600b8410161715612ff65782820a905083811115612ff157612ff0613179565b5b613020565b6130038484846001612eb6565b9250905081840481111561301a57613019613179565b5b81810290505b9392505050565b6000613032826130f3565b915061303d836130f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561307657613075613179565b5b828202905092915050565b600061308c826130f3565b9150613097836130f3565b9250828210156130aa576130a9613179565b5b828203905092915050565b60006130c0826130d3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101561311b578082015181840152602081019050613100565b8381111561312a576000848401525b50505050565b600061313b826130f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561316e5761316d613179565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61322d816130b5565b811461323857600080fd5b50565b613244816130c7565b811461324f57600080fd5b50565b61325b816130f3565b811461326657600080fd5b5056fea2646970667358221220cd2e62a47ea38eb7b164ab4566fa2d27a27c554508084aa338b227f59f486d9d64736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101855760003560e01c806380655eef116100d1578063e985e3671161008a578063f3fef3a311610064578063f3fef3a314610543578063f4739ee31461056c578063f9020e33146105aa578063fa09e630146105d55761018c565b8063e985e367146104b2578063f2aa8218146104dd578063f2fde38b1461051a5761018c565b806380655eef146103a2578063807ea425146103df5780638da5cb5b14610408578063ace1741c14610433578063c76a0f111461045e578063e36b0b371461049b5761018c565b806338ccf4c81161013e5780635413c1c8116101185780635413c1c81461030c57806363b20117146103355780636bcedf9c14610360578063715018a61461038b5761018c565b806338ccf4c81461029c5780633abd0136146102b85780633c00a36c146102e35761018c565b8063115ece4c1461018e578063204120bc146101cb57806329d429a8146102085780632c4e722e146102315780633115329e1461025c57806333e364cb146102855761018c565b3661018c57005b005b34801561019a57600080fd5b506101b560048036038101906101b09190612307565b6105fe565b6040516101c29190612cf7565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed91906122a2565b610789565b6040516101ff9190612cf7565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a91906122cb565b6107a1565b005b34801561023d57600080fd5b506102466108d5565b6040516102539190612cf7565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906123af565b6108db565b005b34801561029157600080fd5b5061029a610b80565b005b6102b660048036038101906102b19190612307565b610c6f565b005b3480156102c457600080fd5b506102cd610f9d565b6040516102da9190612cf7565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190612457565b610fa3565b005b34801561031857600080fd5b50610333600480360381019061032e9190612343565b611069565b005b34801561034157600080fd5b5061034a6112f7565b6040516103579190612cf7565b60405180910390f35b34801561036c57600080fd5b506103756112fd565b6040516103829190612cf7565b60405180910390f35b34801561039757600080fd5b506103a0611303565b005b3480156103ae57600080fd5b506103c960048036038101906103c491906122a2565b61138b565b6040516103d69190612b3a565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906124e5565b6113ab565b005b34801561041457600080fd5b5061041d61146a565b60405161042a9190612a9d565b60405180910390f35b34801561043f57600080fd5b50610448611493565b6040516104559190612cf7565b60405180910390f35b34801561046a57600080fd5b50610485600480360381019061048091906124a9565b611499565b6040516104929190612b18565b60405180910390f35b3480156104a757600080fd5b506104b061178f565b005b3480156104be57600080fd5b506104c761187e565b6040516104d49190612a9d565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612457565b6118a4565b6040516105119190612a9d565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c91906122a2565b6118e3565b005b34801561054f57600080fd5b5061056a60048036038101906105659190612307565b6119db565b005b34801561057857600080fd5b50610593600480360381019061058e91906122a2565b611a86565b6040516105a1929190612d12565b60405180910390f35b3480156105b657600080fd5b506105bf611ab7565b6040516105cc9190612b3a565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f791906122a2565b611aca565b005b600080600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107475760011515600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90612b97565b60405180910390fd5b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061073f81610731600354600a6107229190612f09565b87611be190919063ffffffff16565b611bf790919063ffffffff16565b91505061077f565b61077c60015461076e600354600a61075f9190612f09565b86611be190919063ffffffff16565b611bf790919063ffffffff16565b90505b8091505092915050565b60066020528060005260406000206000915090505481565b6107a9611c0d565b73ffffffffffffffffffffffffffffffffffffffff166107c761146a565b73ffffffffffffffffffffffffffffffffffffffff161461081d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081490612c77565b60405180910390fd5b801515600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561087a57600080fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60015481565b6108e3611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661090161146a565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612c77565b60405180910390fd5b815183511461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290612c17565b60405180910390fd5b600081146109ab57806001819055505b60005b8351811015610b7a5760011515600560008684815181106109f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a5457600080fd5b6000838281518110610a8f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511415610aa257600080fd5b828181518110610adb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000868481518110610b20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600181610b739190612e2f565b90506109ae565b50505050565b610b88611c0d565b73ffffffffffffffffffffffffffffffffffffffff16610ba661146a565b73ffffffffffffffffffffffffffffffffffffffff1614610bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf390612c77565b60405180910390fd5b60001515600760009054906101000a900460ff16151514610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612bd7565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550565b60011515600760009054906101000a900460ff16151514610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612cb7565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0b57610d066000346105fe565b610d16565b610d1583836105fe565b5b90506000811415610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612c37565b60405180910390fd5b60045481600b54610d6d9190612e2f565b10610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490612c57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610df057610deb8383611c15565b610df9565b610df8611c4d565b5b80600b6000828254610e0b9190612e2f565b92505081905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16610f3f576008339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055506001600a6000828254610f379190612e2f565b925050819055505b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610f919190612e2f565b92505081905550505050565b600a5481565b610fab611c0d565b73ffffffffffffffffffffffffffffffffffffffff16610fc961146a565b73ffffffffffffffffffffffffffffffffffffffff161461101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690612c77565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611065573d6000803e3d6000fd5b5050565b611071611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661108f61146a565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90612c77565b60405180910390fd5b8051825114611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090612c17565b60405180910390fd5b60005b82518110156112f2576000828281518110611170577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151141561118357600080fd5b6001600560008584815181106111c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000858481518110611299577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806112ea90613130565b91505061112c565b505050565b600b5481565b60045481565b61130b611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661132961146a565b73ffffffffffffffffffffffffffffffffffffffff161461137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137690612c77565b60405180910390fd5b6113896000611c9d565b565b60056020528060005260406000206000915054906101000a900460ff1681565b6113b3611c0d565b73ffffffffffffffffffffffffffffffffffffffff166113d161146a565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90612c77565b60405180910390fd5b600082141561143557600080fd5b8160018190555080600760006101000a81548160ff021916908315150217905550836003819055508260048190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60608183106114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490612bb7565b60405180910390fd5b6000600a5483116114ee57826114f2565b600a545b90506000600a5485116115055784611509565b600a545b9050600081836115199190613081565b67ffffffffffffffff811115611558577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561159157816020015b61157e6120dd565b8152602001906001900390816115765790505b50905060008290505b838110156117825760096000600883815481106115e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154828281518110611682577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000018181525050600881815481106116cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611730577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060018161177b9190612e2f565b905061159a565b5080935050505092915050565b611797611c0d565b73ffffffffffffffffffffffffffffffffffffffff166117b561146a565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290612c77565b60405180910390fd5b60011515600760009054906101000a900460ff16151514611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890612cb7565b60405180910390fd5b6000600760006101000a81548160ff021916908315150217905550565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600881815481106118b457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118eb611c0d565b73ffffffffffffffffffffffffffffffffffffffff1661190961146a565b73ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690612c77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690612b77565b60405180910390fd5b6119d881611c9d565b50565b6119e3611c0d565b73ffffffffffffffffffffffffffffffffffffffff16611a0161146a565b73ffffffffffffffffffffffffffffffffffffffff1614611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90612c77565b60405180910390fd5b611a8233828473ffffffffffffffffffffffffffffffffffffffff16611d619092919063ffffffff16565b5050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b600760009054906101000a900460ff1681565b611ad2611c0d565b73ffffffffffffffffffffffffffffffffffffffff16611af061146a565b73ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90612c77565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b819190612a9d565b60206040518083038186803b158015611b9957600080fd5b505afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612480565b9050611bdd82826119db565b5050565b60008183611bef9190613027565b905092915050565b60008183611c059190612e85565b905092915050565b600033905090565b611c4933611c2161146a565b838573ffffffffffffffffffffffffffffffffffffffff16611de7909392919063ffffffff16565b5050565b611c5561146a565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611c9a573d6000803e3d6000fd5b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611de28363a9059cbb60e01b8484604051602401611d80929190612aef565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e70565b505050565b611e6a846323b872dd60e01b858585604051602401611e0893929190612ab8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e70565b50505050565b6000611ed2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f379092919063ffffffff16565b9050600081511115611f325780806020019051810190611ef2919061242e565b611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890612cd7565b60405180910390fd5b5b505050565b6060611f468484600085611f4f565b90509392505050565b606082471015611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90612bf7565b60405180910390fd5b611f9d85612063565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390612c97565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516120059190612a86565b60006040518083038185875af1925050503d8060008114612042576040519150601f19603f3d011682016040523d82523d6000602084013e612047565b606091505b5091509150612057828286612076565b92505050949350505050565b600080823b905060008111915050919050565b60608315612086578290506120d6565b6000835111156120995782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9190612b55565b60405180910390fd5b9392505050565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600061212061211b84612d6c565b612d3b565b9050808382526020820190508285602086028201111561213f57600080fd5b60005b8581101561216f578161215588826121e5565b845260208401935060208301925050600181019050612142565b5050509392505050565b600061218c61218784612d98565b612d3b565b905080838252602082019050828560208602820111156121ab57600080fd5b60005b858110156121db57816121c18882612278565b8452602084019350602083019250506001810190506121ae565b5050509392505050565b6000813590506121f481613224565b92915050565b600082601f83011261220b57600080fd5b813561221b84826020860161210d565b91505092915050565b600082601f83011261223557600080fd5b8135612245848260208601612179565b91505092915050565b60008135905061225d8161323b565b92915050565b6000815190506122728161323b565b92915050565b60008135905061228781613252565b92915050565b60008151905061229c81613252565b92915050565b6000602082840312156122b457600080fd5b60006122c2848285016121e5565b91505092915050565b600080604083850312156122de57600080fd5b60006122ec858286016121e5565b92505060206122fd8582860161224e565b9150509250929050565b6000806040838503121561231a57600080fd5b6000612328858286016121e5565b925050602061233985828601612278565b9150509250929050565b6000806040838503121561235657600080fd5b600083013567ffffffffffffffff81111561237057600080fd5b61237c858286016121fa565b925050602083013567ffffffffffffffff81111561239957600080fd5b6123a585828601612224565b9150509250929050565b6000806000606084860312156123c457600080fd5b600084013567ffffffffffffffff8111156123de57600080fd5b6123ea868287016121fa565b935050602084013567ffffffffffffffff81111561240757600080fd5b61241386828701612224565b925050604061242486828701612278565b9150509250925092565b60006020828403121561244057600080fd5b600061244e84828501612263565b91505092915050565b60006020828403121561246957600080fd5b600061247784828501612278565b91505092915050565b60006020828403121561249257600080fd5b60006124a08482850161228d565b91505092915050565b600080604083850312156124bc57600080fd5b60006124ca85828601612278565b92505060206124db85828601612278565b9150509250929050565b600080600080608085870312156124fb57600080fd5b600061250987828801612278565b945050602061251a87828801612278565b935050604061252b87828801612278565b925050606061253c8782880161224e565b91505092959194509250565b60006125548383612a39565b60408301905092915050565b612569816130b5565b82525050565b612578816130b5565b82525050565b600061258982612dd4565b6125938185612e02565b935061259e83612dc4565b8060005b838110156125cf5781516125b68882612548565b97506125c183612df5565b9250506001810190506125a2565b5085935050505092915050565b6125e5816130c7565b82525050565b60006125f682612ddf565b6126008185612e13565b93506126108185602086016130fd565b80840191505092915050565b600061262782612dea565b6126318185612e1e565b93506126418185602086016130fd565b61264a81613206565b840191505092915050565b6000612662602683612e1e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126c8601a83612e1e565b91507f50726573616c653a20546f6b656e206e6f7420616c6c6f7765640000000000006000830152602082019050919050565b6000612708602683612e1e565b91507f50726573616c653a205f66726f6d2073686f756c64206265206c65737320746860008301527f616e205f746f00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061276e601783612e1e565b91507f50726573616c653a206973206e6f742073746f707065640000000000000000006000830152602082019050919050565b60006127ae602683612e1e565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612814602f83612e1e565b91507f50726573616c653a20746f6b656e73202620707269636573206172726179732060008301527f6c656e677468206d69736d6174636800000000000000000000000000000000006020830152604082019050919050565b600061287a601483612e1e565b91507f50726573616c653a20416d6f756e7420697320300000000000000000000000006000830152602082019050919050565b60006128ba602583612e1e565b91507f50726573616c653a204e6f7420656e6f75676820746f6b656e7320746f20626560008301527f2073616c650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612920602083612e1e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612960601d83612e1e565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006129a0601783612e1e565b91507f50726573616c653a206973206e6f7420656e61626c65640000000000000000006000830152602082019050919050565b60006129e0602a83612e1e565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b604082016000820151612a4f6000850182612a68565b506020820151612a626020850182612560565b50505050565b612a71816130f3565b82525050565b612a80816130f3565b82525050565b6000612a9282846125eb565b915081905092915050565b6000602082019050612ab2600083018461256f565b92915050565b6000606082019050612acd600083018661256f565b612ada602083018561256f565b612ae76040830184612a77565b949350505050565b6000604082019050612b04600083018561256f565b612b116020830184612a77565b9392505050565b60006020820190508181036000830152612b32818461257e565b905092915050565b6000602082019050612b4f60008301846125dc565b92915050565b60006020820190508181036000830152612b6f818461261c565b905092915050565b60006020820190508181036000830152612b9081612655565b9050919050565b60006020820190508181036000830152612bb0816126bb565b9050919050565b60006020820190508181036000830152612bd0816126fb565b9050919050565b60006020820190508181036000830152612bf081612761565b9050919050565b60006020820190508181036000830152612c10816127a1565b9050919050565b60006020820190508181036000830152612c3081612807565b9050919050565b60006020820190508181036000830152612c508161286d565b9050919050565b60006020820190508181036000830152612c70816128ad565b9050919050565b60006020820190508181036000830152612c9081612913565b9050919050565b60006020820190508181036000830152612cb081612953565b9050919050565b60006020820190508181036000830152612cd081612993565b9050919050565b60006020820190508181036000830152612cf0816129d3565b9050919050565b6000602082019050612d0c6000830184612a77565b92915050565b6000604082019050612d276000830185612a77565b612d3460208301846125dc565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715612d6257612d616131d7565b5b8060405250919050565b600067ffffffffffffffff821115612d8757612d866131d7565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612db357612db26131d7565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612e3a826130f3565b9150612e45836130f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e7a57612e79613179565b5b828201905092915050565b6000612e90826130f3565b9150612e9b836130f3565b925082612eab57612eaa6131a8565b5b828204905092915050565b6000808291508390505b6001851115612f0057808604811115612edc57612edb613179565b5b6001851615612eeb5780820291505b8081029050612ef985613217565b9450612ec0565b94509492505050565b6000612f14826130f3565b9150612f1f836130f3565b9250612f4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f54565b905092915050565b600082612f645760019050613020565b81612f725760009050613020565b8160018114612f885760028114612f9257612fc1565b6001915050613020565b60ff841115612fa457612fa3613179565b5b8360020a915084821115612fbb57612fba613179565b5b50613020565b5060208310610133831016604e8410600b8410161715612ff65782820a905083811115612ff157612ff0613179565b5b613020565b6130038484846001612eb6565b9250905081840481111561301a57613019613179565b5b81810290505b9392505050565b6000613032826130f3565b915061303d836130f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561307657613075613179565b5b828202905092915050565b600061308c826130f3565b9150613097836130f3565b9250828210156130aa576130a9613179565b5b828203905092915050565b60006130c0826130d3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101561311b578082015181840152602081019050613100565b8381111561312a576000848401525b50505050565b600061313b826130f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561316e5761316d613179565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61322d816130b5565b811461323857600080fd5b50565b613244816130c7565b811461324f57600080fd5b50565b61325b816130f3565b811461326657600080fd5b5056fea2646970667358221220cd2e62a47ea38eb7b164ab4566fa2d27a27c554508084aa338b227f59f486d9d64736f6c63430008000033

Deployed Bytecode Sourcemap

12597:5194:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15474:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12940:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14673:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12750:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14887:579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14093:88;;;;;;;;;;;;;:::i;:::-;;16270:911;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13118:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5289:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14189:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13151:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12844:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4223:103;;;;;;;;;;;;;:::i;:::-;;12886:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13642:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4000:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12811:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17189:599;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13997:88;;;;;;;;;;;;;:::i;:::-;;12778:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13026:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4334:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4993:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13056:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;12995:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5126:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15474:492;15575:7;15595:14;15641:1;15624:19;;:5;:19;;;15620:315;;15692:4;15668:28;;:13;:20;15682:5;15668:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;15660:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15742:13;15758:11;:18;15770:5;15758:18;;;;;;;;;;;;;;;;15742:34;;15800:41;15835:5;15800:30;15817:12;;15811:2;:18;;;;:::i;:::-;15800:6;:10;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;15791:50;;15620:315;;;;15883:40;15918:4;;15883:30;15900:12;;15894:2;:18;;;;:::i;:::-;15883:6;:10;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;15874:49;;15620:315;15952:6;15945:13;;;15474:492;;;;:::o;12940:46::-;;;;;;;;;;;;;;;;;:::o;14673:206::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14819:7:::1;14794:32;;:13;:21;14808:6;14794:21;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;14786:41;;;::::0;::::1;;14864:7;14840:13;:21;14854:6;14840:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14673:206:::0;;:::o;12750:19::-;;;;:::o;14887:579::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15083:7:::1;:14;15065:7;:14;:32;15043:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;15198:1;15189:5;:10;15185:55;;15223:5;15216:4;:12;;;;15185:55;15257:9;15252:207;15276:7;:14;15272:1;:18;15252:207;;;15352:4;15323:33;;:13;:25;15337:7;15345:1;15337:10;;;;;;;;;;;;;;;;;;;;;;15323:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;15315:42;;;::::0;::::1;;15394:1;15380:7;15388:1;15380:10;;;;;;;;;;;;;;;;;;;;;;:15;;15372:24;;;::::0;::::1;;15437:7;15445:1;15437:10;;;;;;;;;;;;;;;;;;;;;;15411:11;:23;15423:7;15431:1;15423:10;;;;;;;;;;;;;;;;;;;;;;15411:23;;;;;;;;;;;;;;;:36;;;;15297:1;15292:6;;;;;:::i;:::-;;;15252:207;;;;14887:579:::0;;;:::o;14093:88::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13581:5:::1;13567:19;;:10;;;;;;;;;;;:19;;;13559:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14169:4:::2;14156:10;;:17;;;;;;;;;;;;;;;;;;14093:88::o:0;16270:911::-;13466:4;13452:18;;:10;;;;;;;;;;;:18;;;13444:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16384:20:::1;16425:1:::0;16407:20:::1;;:6;:20;;;;:120;;16490:37;16513:1;16517:9;16490:14;:37::i;:::-;16407:120;;;16443:31;16458:6;16466:7;16443:14;:31::i;:::-;16407:120;16384:143;;16564:1;16548:12;:17;;16540:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;16658:18;;16642:12;16624:15;;:30;;;;:::i;:::-;16623:53;16601:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;16776:1;16758:20;;:6;:20;;;16754:129;;16795:30;16809:6;16817:7;16795:13;:30::i;:::-;16754:129;;;16858:13;:11;:13::i;:::-;16754:129;16914:12;16895:15;;:31;;;;;;;:::i;:::-;;;;;;;;16944:13;:25;16958:10;16944:25;;;;;;;;;;;;;;;:32;;;;;;;;;;;;16939:174;;16993:6;17005:10;16993:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17066:4;17031:13;:25;17045:10;17031:25;;;;;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;17100:1;17085:11;;:16;;;;;;;:::i;:::-;;;;;;;;16939:174;17161:12;17125:13;:25;17139:10;17125:25;;;;;;;;;;;;;;;:32;;;:48;;;;;;;:::i;:::-;;;;;;;;13509:1;16270:911:::0;;:::o;13118:26::-;;;;:::o;5289:108::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5364:10:::1;5356:28;;:33;5385:3;5356:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;5289:108:::0;:::o;14189:476::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14362:7:::1;:14;14344:7;:14;:32;14322:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;14469:9;14464:194;14488:7;:14;14484:1;:18;14464:194;;;14546:1;14532:7;14540:1;14532:10;;;;;;;;;;;;;;;;;;;;;;:15;;14524:24;;;::::0;::::1;;14591:4;14563:13;:25;14577:7;14585:1;14577:10;;;;;;;;;;;;;;;;;;;;;;14563:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;14636:7;14644:1;14636:10;;;;;;;;;;;;;;;;;;;;;;14610:11;:23;14622:7;14630:1;14622:10;;;;;;;;;;;;;;;;;;;;;;14610:23;;;;;;;;;;;;;;;:36;;;;14504:3;;;;;:::i;:::-;;;;14464:194;;;;14189:476:::0;;:::o;13151:30::-;;;;:::o;12844:33::-;;;;:::o;4223:103::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4288:30:::1;4315:1;4288:18;:30::i;:::-;4223:103::o:0;12886:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;13642:347::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13835:1:::1;13826:5;:10;;13818:19;;;::::0;::::1;;13855:5;13848:4;:12;;;;13884:11;13871:10;;:24;;;;;;;;;;;;;;;;;;13921:9;13906:12;:24;;;;13962:19;13941:18;:40;;;;13642:347:::0;;;;:::o;4000:87::-;4046:7;4073:6;;;;;;;;;;;4066:13;;4000:87;:::o;12811:24::-;;;;:::o;17189:599::-;17285:20;17334:3;17326:5;:11;17318:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17393:7;17409:11;;17403:3;:17;:37;;17437:3;17403:37;;;17423:11;;17403:37;17393:47;;17451:9;17471:11;;17463:5;:19;:41;;17499:5;17463:41;;;17485:11;;17463:41;17451:53;;17517:30;17573:4;17568:2;:9;;;;:::i;:::-;17550:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17517:61;;17596:6;17605:4;17596:13;;17591:161;17615:2;17611:1;:6;17591:161;;;17664:13;:24;17678:6;17685:1;17678:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17664:24;;;;;;;;;;;;;;;:31;;;17642:9;17652:1;17642:12;;;;;;;;;;;;;;;;;;;;;;:19;;:53;;;;;17731:6;17738:1;17731:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17710;17720:1;17710:12;;;;;;;;;;;;;;;;;;;;;;:18;;:30;;;;;;;;;;;17624:1;17619:6;;;;;:::i;:::-;;;17591:161;;;;17771:9;17764:16;;;;;17189:599;;;;:::o;13997:88::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13466:4:::1;13452:18;;:10;;;;;;;;;;;:18;;;13444:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;14072:5:::2;14059:10;;:18;;;;;;;;;;;;;;;;;;13997:88::o:0;12778:24::-;;;;;;;;;;;;;:::o;13026:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4334:238::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4457:1:::1;4437:22;;:8;:22;;;;4415:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;4536:28;4555:8;4536:18;:28::i;:::-;4334:238:::0;:::o;4993:125::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5067:43:::1;5094:10;5106:3;5074:5;5067:26;;;;:43;;;;;:::i;:::-;4993:125:::0;;:::o;13056:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12995:22::-;;;;;;;;;;;;;:::o;5126:155::-;4146:12;:10;:12::i;:::-;4135:23;;:7;:5;:7::i;:::-;:23;;;4127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:11:::1;5211:5;5204:23;;;5236:4;5204:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5190:52;;5253:20;5262:5;5269:3;5253:8;:20::i;:::-;4206:1;5126:155:::0;:::o;1539:98::-;1597:7;1628:1;1624;:5;;;;:::i;:::-;1617:12;;1539:98;;;;:::o;1645:::-;1703:7;1734:1;1730;:5;;;;:::i;:::-;1723:12;;1645:98;;;;:::o;3494:::-;3547:7;3574:10;3567:17;;3494:98;:::o;16068:194::-;16143:111;16189:10;16214:7;:5;:7::i;:::-;16236;16150:6;16143:31;;;;:111;;;;;;:::i;:::-;16068:194;;:::o;15974:86::-;16024:7;:5;:7::i;:::-;16016:25;;:36;16042:9;16016:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15974:86::o;4580:191::-;4654:16;4673:6;;;;;;;;;;;4654:25;;4699:8;4690:6;;:17;;;;;;;;;;;;;;;;;;4754:8;4723:40;;4744:8;4723:40;;;;;;;;;;;;4580:191;;:::o;9823:214::-;9906:123;9940:5;9983:23;;;10008:2;10012:5;9960:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9906:19;:123::i;:::-;9823:214;;;:::o;10045:285::-;10189:133;10223:5;10266:27;;;10295:4;10301:2;10305:5;10243:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10189:19;:133::i;:::-;10045:285;;;;:::o;11892:419::-;11973:23;11999:106;12041:4;11999:106;;;;;;;;;;;;;;;;;12007:5;11999:27;;;;:106;;;;;:::i;:::-;11973:132;;12140:1;12120:10;:17;:21;12116:188;;;12195:10;12184:30;;;;;;;;;;;;:::i;:::-;12158:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;12116:188;11892:419;;;:::o;6570:229::-;6707:12;6739:52;6761:6;6769:4;6775:1;6778:12;6739:21;:52::i;:::-;6732:59;;6570:229;;;;;:::o;7171:571::-;7341:12;7413:5;7388:21;:30;;7366:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;7503:18;7514:6;7503:10;:18::i;:::-;7495:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7569:12;7583:23;7610:6;:11;;7629:5;7650:4;7610:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7568:97;;;;7683:51;7700:7;7709:10;7721:12;7683:16;:51::i;:::-;7676:58;;;;7171:571;;;;;;:::o;5759:196::-;5819:4;5836:12;5903:7;5891:20;5883:28;;5946:1;5939:4;:8;5932:15;;;5759:196;;;:::o;9180:550::-;9330:12;9359:7;9355:368;;;9390:10;9383:17;;;;9355:368;9457:1;9437:10;:17;:21;9433:279;;;9540:10;9534:17;9601:15;9588:10;9584:2;9580:19;9573:44;9488:148;9683:12;9676:20;;;;;;;;;;;:::i;:::-;;;;;;;;9180:550;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:139::-;;1381:6;1368:20;1359:29;;1397:33;1424:5;1397:33;:::i;:::-;1349:87;;;;:::o;1459:303::-;;1579:3;1572:4;1564:6;1560:17;1556:27;1546:2;;1597:1;1594;1587:12;1546:2;1637:6;1624:20;1662:94;1752:3;1744:6;1737:4;1729:6;1725:17;1662:94;:::i;:::-;1653:103;;1536:226;;;;;:::o;1785:303::-;;1905:3;1898:4;1890:6;1886:17;1882:27;1872:2;;1923:1;1920;1913:12;1872:2;1963:6;1950:20;1988:94;2078:3;2070:6;2063:4;2055:6;2051:17;1988:94;:::i;:::-;1979:103;;1862:226;;;;;:::o;2094:133::-;;2175:6;2162:20;2153:29;;2191:30;2215:5;2191:30;:::i;:::-;2143:84;;;;:::o;2233:137::-;;2318:6;2312:13;2303:22;;2334:30;2358:5;2334:30;:::i;:::-;2293:77;;;;:::o;2376:139::-;;2460:6;2447:20;2438:29;;2476:33;2503:5;2476:33;:::i;:::-;2428:87;;;;:::o;2521:143::-;;2609:6;2603:13;2594:22;;2625:33;2652:5;2625:33;:::i;:::-;2584:80;;;;:::o;2670:262::-;;2778:2;2766:9;2757:7;2753:23;2749:32;2746:2;;;2794:1;2791;2784:12;2746:2;2837:1;2862:53;2907:7;2898:6;2887:9;2883:22;2862:53;:::i;:::-;2852:63;;2808:117;2736:196;;;;:::o;2938:401::-;;;3060:2;3048:9;3039:7;3035:23;3031:32;3028:2;;;3076:1;3073;3066:12;3028:2;3119:1;3144:53;3189:7;3180:6;3169:9;3165:22;3144:53;:::i;:::-;3134:63;;3090:117;3246:2;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3217:115;3018:321;;;;;:::o;3345:407::-;;;3470:2;3458:9;3449:7;3445:23;3441:32;3438:2;;;3486:1;3483;3476:12;3438:2;3529:1;3554:53;3599:7;3590:6;3579:9;3575:22;3554:53;:::i;:::-;3544:63;;3500:117;3656:2;3682:53;3727:7;3718:6;3707:9;3703:22;3682:53;:::i;:::-;3672:63;;3627:118;3428:324;;;;;:::o;3758:693::-;;;3933:2;3921:9;3912:7;3908:23;3904:32;3901:2;;;3949:1;3946;3939:12;3901:2;4020:1;4009:9;4005:17;3992:31;4050:18;4042:6;4039:30;4036:2;;;4082:1;4079;4072:12;4036:2;4110:78;4180:7;4171:6;4160:9;4156:22;4110:78;:::i;:::-;4100:88;;3963:235;4265:2;4254:9;4250:18;4237:32;4296:18;4288:6;4285:30;4282:2;;;4328:1;4325;4318:12;4282:2;4356:78;4426:7;4417:6;4406:9;4402:22;4356:78;:::i;:::-;4346:88;;4208:236;3891:560;;;;;:::o;4457:838::-;;;;4649:2;4637:9;4628:7;4624:23;4620:32;4617:2;;;4665:1;4662;4655:12;4617:2;4736:1;4725:9;4721:17;4708:31;4766:18;4758:6;4755:30;4752:2;;;4798:1;4795;4788:12;4752:2;4826:78;4896:7;4887:6;4876:9;4872:22;4826:78;:::i;:::-;4816:88;;4679:235;4981:2;4970:9;4966:18;4953:32;5012:18;5004:6;5001:30;4998:2;;;5044:1;5041;5034:12;4998:2;5072:78;5142:7;5133:6;5122:9;5118:22;5072:78;:::i;:::-;5062:88;;4924:236;5199:2;5225:53;5270:7;5261:6;5250:9;5246:22;5225:53;:::i;:::-;5215:63;;5170:118;4607:688;;;;;:::o;5301:278::-;;5417:2;5405:9;5396:7;5392:23;5388:32;5385:2;;;5433:1;5430;5423:12;5385:2;5476:1;5501:61;5554:7;5545:6;5534:9;5530:22;5501:61;:::i;:::-;5491:71;;5447:125;5375:204;;;;:::o;5585:262::-;;5693:2;5681:9;5672:7;5668:23;5664:32;5661:2;;;5709:1;5706;5699:12;5661:2;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5651:196;;;;:::o;5853:284::-;;5972:2;5960:9;5951:7;5947:23;5943:32;5940:2;;;5988:1;5985;5978:12;5940:2;6031:1;6056:64;6112:7;6103:6;6092:9;6088:22;6056:64;:::i;:::-;6046:74;;6002:128;5930:207;;;;:::o;6143:407::-;;;6268:2;6256:9;6247:7;6243:23;6239:32;6236:2;;;6284:1;6281;6274:12;6236:2;6327:1;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6298:117;6454:2;6480:53;6525:7;6516:6;6505:9;6501:22;6480:53;:::i;:::-;6470:63;;6425:118;6226:324;;;;;:::o;6556:692::-;;;;;6712:3;6700:9;6691:7;6687:23;6683:33;6680:2;;;6729:1;6726;6719:12;6680:2;6772:1;6797:53;6842:7;6833:6;6822:9;6818:22;6797:53;:::i;:::-;6787:63;;6743:117;6899:2;6925:53;6970:7;6961:6;6950:9;6946:22;6925:53;:::i;:::-;6915:63;;6870:118;7027:2;7053:53;7098:7;7089:6;7078:9;7074:22;7053:53;:::i;:::-;7043:63;;6998:118;7155:2;7181:50;7223:7;7214:6;7203:9;7199:22;7181:50;:::i;:::-;7171:60;;7126:115;6670:578;;;;;;;:::o;7254:295::-;;7402:104;7502:3;7494:6;7402:104;:::i;:::-;7538:4;7533:3;7529:14;7515:28;;7392:157;;;;:::o;7555:108::-;7632:24;7650:5;7632:24;:::i;:::-;7627:3;7620:37;7610:53;;:::o;7669:118::-;7756:24;7774:5;7756:24;:::i;:::-;7751:3;7744:37;7734:53;;:::o;7859:964::-;;8065:83;8142:5;8065:83;:::i;:::-;8164:115;8272:6;8267:3;8164:115;:::i;:::-;8157:122;;8303:85;8382:5;8303:85;:::i;:::-;8411:7;8442:1;8427:371;8452:6;8449:1;8446:13;8427:371;;;8528:6;8522:13;8555:121;8672:3;8657:13;8555:121;:::i;:::-;8548:128;;8699:89;8781:6;8699:89;:::i;:::-;8689:99;;8487:311;8474:1;8471;8467:9;8462:14;;8427:371;;;8431:14;8814:3;8807:10;;8041:782;;;;;;;:::o;8829:109::-;8910:21;8925:5;8910:21;:::i;:::-;8905:3;8898:34;8888:50;;:::o;8944:373::-;;9076:38;9108:5;9076:38;:::i;:::-;9130:88;9211:6;9206:3;9130:88;:::i;:::-;9123:95;;9227:52;9272:6;9267:3;9260:4;9253:5;9249:16;9227:52;:::i;:::-;9304:6;9299:3;9295:16;9288:23;;9052:265;;;;;:::o;9323:364::-;;9439:39;9472:5;9439:39;:::i;:::-;9494:71;9558:6;9553:3;9494:71;:::i;:::-;9487:78;;9574:52;9619:6;9614:3;9607:4;9600:5;9596:16;9574:52;:::i;:::-;9651:29;9673:6;9651:29;:::i;:::-;9646:3;9642:39;9635:46;;9415:272;;;;;:::o;9693:370::-;;9856:67;9920:2;9915:3;9856:67;:::i;:::-;9849:74;;9953:34;9949:1;9944:3;9940:11;9933:55;10019:8;10014:2;10009:3;10005:12;9998:30;10054:2;10049:3;10045:12;10038:19;;9839:224;;;:::o;10069:324::-;;10232:67;10296:2;10291:3;10232:67;:::i;:::-;10225:74;;10329:28;10325:1;10320:3;10316:11;10309:49;10384:2;10379:3;10375:12;10368:19;;10215:178;;;:::o;10399:370::-;;10562:67;10626:2;10621:3;10562:67;:::i;:::-;10555:74;;10659:34;10655:1;10650:3;10646:11;10639:55;10725:8;10720:2;10715:3;10711:12;10704:30;10760:2;10755:3;10751:12;10744:19;;10545:224;;;:::o;10775:321::-;;10938:67;11002:2;10997:3;10938:67;:::i;:::-;10931:74;;11035:25;11031:1;11026:3;11022:11;11015:46;11087:2;11082:3;11078:12;11071:19;;10921:175;;;:::o;11102:370::-;;11265:67;11329:2;11324:3;11265:67;:::i;:::-;11258:74;;11362:34;11358:1;11353:3;11349:11;11342:55;11428:8;11423:2;11418:3;11414:12;11407:30;11463:2;11458:3;11454:12;11447:19;;11248:224;;;:::o;11478:379::-;;11641:67;11705:2;11700:3;11641:67;:::i;:::-;11634:74;;11738:34;11734:1;11729:3;11725:11;11718:55;11804:17;11799:2;11794:3;11790:12;11783:39;11848:2;11843:3;11839:12;11832:19;;11624:233;;;:::o;11863:318::-;;12026:67;12090:2;12085:3;12026:67;:::i;:::-;12019:74;;12123:22;12119:1;12114:3;12110:11;12103:43;12172:2;12167:3;12163:12;12156:19;;12009:172;;;:::o;12187:369::-;;12350:67;12414:2;12409:3;12350:67;:::i;:::-;12343:74;;12447:34;12443:1;12438:3;12434:11;12427:55;12513:7;12508:2;12503:3;12499:12;12492:29;12547:2;12542:3;12538:12;12531:19;;12333:223;;;:::o;12562:330::-;;12725:67;12789:2;12784:3;12725:67;:::i;:::-;12718:74;;12822:34;12818:1;12813:3;12809:11;12802:55;12883:2;12878:3;12874:12;12867:19;;12708:184;;;:::o;12898:327::-;;13061:67;13125:2;13120:3;13061:67;:::i;:::-;13054:74;;13158:31;13154:1;13149:3;13145:11;13138:52;13216:2;13211:3;13207:12;13200:19;;13044:181;;;:::o;13231:321::-;;13394:67;13458:2;13453:3;13394:67;:::i;:::-;13387:74;;13491:25;13487:1;13482:3;13478:11;13471:46;13543:2;13538:3;13534:12;13527:19;;13377:175;;;:::o;13558:374::-;;13721:67;13785:2;13780:3;13721:67;:::i;:::-;13714:74;;13818:34;13814:1;13809:3;13805:11;13798:55;13884:12;13879:2;13874:3;13870:12;13863:34;13923:2;13918:3;13914:12;13907:19;;13704:228;;;:::o;14000:508::-;14145:4;14140:3;14136:14;14234:4;14227:5;14223:16;14217:23;14253:63;14310:4;14305:3;14301:14;14287:12;14253:63;:::i;:::-;14160:166;14409:4;14402:5;14398:16;14392:23;14428:63;14485:4;14480:3;14476:14;14462:12;14428:63;:::i;:::-;14336:165;14114:394;;;:::o;14514:108::-;14591:24;14609:5;14591:24;:::i;:::-;14586:3;14579:37;14569:53;;:::o;14628:118::-;14715:24;14733:5;14715:24;:::i;:::-;14710:3;14703:37;14693:53;;:::o;14752:271::-;;14904:93;14993:3;14984:6;14904:93;:::i;:::-;14897:100;;15014:3;15007:10;;14886:137;;;;:::o;15029:222::-;;15160:2;15149:9;15145:18;15137:26;;15173:71;15241:1;15230:9;15226:17;15217:6;15173:71;:::i;:::-;15127:124;;;;:::o;15257:442::-;;15444:2;15433:9;15429:18;15421:26;;15457:71;15525:1;15514:9;15510:17;15501:6;15457:71;:::i;:::-;15538:72;15606:2;15595:9;15591:18;15582:6;15538:72;:::i;:::-;15620;15688:2;15677:9;15673:18;15664:6;15620:72;:::i;:::-;15411:288;;;;;;:::o;15705:332::-;;15864:2;15853:9;15849:18;15841:26;;15877:71;15945:1;15934:9;15930:17;15921:6;15877:71;:::i;:::-;15958:72;16026:2;16015:9;16011:18;16002:6;15958:72;:::i;:::-;15831:206;;;;;:::o;16043:489::-;;16282:2;16271:9;16267:18;16259:26;;16331:9;16325:4;16321:20;16317:1;16306:9;16302:17;16295:47;16359:166;16520:4;16511:6;16359:166;:::i;:::-;16351:174;;16249:283;;;;:::o;16538:210::-;;16663:2;16652:9;16648:18;16640:26;;16676:65;16738:1;16727:9;16723:17;16714:6;16676:65;:::i;:::-;16630:118;;;;:::o;16754:313::-;;16905:2;16894:9;16890:18;16882:26;;16954:9;16948:4;16944:20;16940:1;16929:9;16925:17;16918:47;16982:78;17055:4;17046:6;16982:78;:::i;:::-;16974:86;;16872:195;;;;:::o;17073:419::-;;17277:2;17266:9;17262:18;17254:26;;17326:9;17320:4;17316:20;17312:1;17301:9;17297:17;17290:47;17354:131;17480:4;17354:131;:::i;:::-;17346:139;;17244:248;;;:::o;17498:419::-;;17702:2;17691:9;17687:18;17679:26;;17751:9;17745:4;17741:20;17737:1;17726:9;17722:17;17715:47;17779:131;17905:4;17779:131;:::i;:::-;17771:139;;17669:248;;;:::o;17923:419::-;;18127:2;18116:9;18112:18;18104:26;;18176:9;18170:4;18166:20;18162:1;18151:9;18147:17;18140:47;18204:131;18330:4;18204:131;:::i;:::-;18196:139;;18094:248;;;:::o;18348:419::-;;18552:2;18541:9;18537:18;18529:26;;18601:9;18595:4;18591:20;18587:1;18576:9;18572:17;18565:47;18629:131;18755:4;18629:131;:::i;:::-;18621:139;;18519:248;;;:::o;18773:419::-;;18977:2;18966:9;18962:18;18954:26;;19026:9;19020:4;19016:20;19012:1;19001:9;18997:17;18990:47;19054:131;19180:4;19054:131;:::i;:::-;19046:139;;18944:248;;;:::o;19198:419::-;;19402:2;19391:9;19387:18;19379:26;;19451:9;19445:4;19441:20;19437:1;19426:9;19422:17;19415:47;19479:131;19605:4;19479:131;:::i;:::-;19471:139;;19369:248;;;:::o;19623:419::-;;19827:2;19816:9;19812:18;19804:26;;19876:9;19870:4;19866:20;19862:1;19851:9;19847:17;19840:47;19904:131;20030:4;19904:131;:::i;:::-;19896:139;;19794:248;;;:::o;20048:419::-;;20252:2;20241:9;20237:18;20229:26;;20301:9;20295:4;20291:20;20287:1;20276:9;20272:17;20265:47;20329:131;20455:4;20329:131;:::i;:::-;20321:139;;20219:248;;;:::o;20473:419::-;;20677:2;20666:9;20662:18;20654:26;;20726:9;20720:4;20716:20;20712:1;20701:9;20697:17;20690:47;20754:131;20880:4;20754:131;:::i;:::-;20746:139;;20644:248;;;:::o;20898:419::-;;21102:2;21091:9;21087:18;21079:26;;21151:9;21145:4;21141:20;21137:1;21126:9;21122:17;21115:47;21179:131;21305:4;21179:131;:::i;:::-;21171:139;;21069:248;;;:::o;21323:419::-;;21527:2;21516:9;21512:18;21504:26;;21576:9;21570:4;21566:20;21562:1;21551:9;21547:17;21540:47;21604:131;21730:4;21604:131;:::i;:::-;21596:139;;21494:248;;;:::o;21748:419::-;;21952:2;21941:9;21937:18;21929:26;;22001:9;21995:4;21991:20;21987:1;21976:9;21972:17;21965:47;22029:131;22155:4;22029:131;:::i;:::-;22021:139;;21919:248;;;:::o;22173:222::-;;22304:2;22293:9;22289:18;22281:26;;22317:71;22385:1;22374:9;22370:17;22361:6;22317:71;:::i;:::-;22271:124;;;;:::o;22401:320::-;;22554:2;22543:9;22539:18;22531:26;;22567:71;22635:1;22624:9;22620:17;22611:6;22567:71;:::i;:::-;22648:66;22710:2;22699:9;22695:18;22686:6;22648:66;:::i;:::-;22521:200;;;;;:::o;22727:283::-;;22793:2;22787:9;22777:19;;22835:4;22827:6;22823:17;22942:6;22930:10;22927:22;22906:18;22894:10;22891:34;22888:62;22885:2;;;22953:18;;:::i;:::-;22885:2;22993:10;22989:2;22982:22;22767:243;;;;:::o;23016:311::-;;23183:18;23175:6;23172:30;23169:2;;;23205:18;;:::i;:::-;23169:2;23255:4;23247:6;23243:17;23235:25;;23315:4;23309;23305:15;23297:23;;23098:229;;;:::o;23333:311::-;;23500:18;23492:6;23489:30;23486:2;;;23522:18;;:::i;:::-;23486:2;23572:4;23564:6;23560:17;23552:25;;23632:4;23626;23622:15;23614:23;;23415:229;;;:::o;23650:161::-;;23769:3;23761:11;;23799:4;23794:3;23790:14;23782:22;;23751:60;;;:::o;23817:143::-;;23947:5;23941:12;23931:22;;23920:40;;;:::o;23966:98::-;;24051:5;24045:12;24035:22;;24024:40;;;:::o;24070:99::-;;24156:5;24150:12;24140:22;;24129:40;;;:::o;24175:142::-;;24306:4;24301:3;24297:14;24289:22;;24279:38;;;:::o;24323:213::-;;24485:6;24480:3;24473:19;24525:4;24520:3;24516:14;24501:29;;24463:73;;;;:::o;24542:147::-;;24680:3;24665:18;;24655:34;;;;:::o;24695:169::-;;24813:6;24808:3;24801:19;24853:4;24848:3;24844:14;24829:29;;24791:73;;;;:::o;24870:305::-;;24929:20;24947:1;24929:20;:::i;:::-;24924:25;;24963:20;24981:1;24963:20;:::i;:::-;24958:25;;25117:1;25049:66;25045:74;25042:1;25039:81;25036:2;;;25123:18;;:::i;:::-;25036:2;25167:1;25164;25160:9;25153:16;;24914:261;;;;:::o;25181:185::-;;25238:20;25256:1;25238:20;:::i;:::-;25233:25;;25272:20;25290:1;25272:20;:::i;:::-;25267:25;;25311:1;25301:2;;25316:18;;:::i;:::-;25301:2;25358:1;25355;25351:9;25346:14;;25223:143;;;;:::o;25372:848::-;;;25464:6;25455:15;;25488:5;25479:14;;25502:712;25523:1;25513:8;25510:15;25502:712;;;25618:4;25613:3;25609:14;25603:4;25600:24;25597:2;;;25627:18;;:::i;:::-;25597:2;25677:1;25667:8;25663:16;25660:2;;;26092:4;26085:5;26081:16;26072:25;;25660:2;26142:4;26136;26132:15;26124:23;;26172:32;26195:8;26172:32;:::i;:::-;26160:44;;25502:712;;;25445:775;;;;;;;:::o;26226:285::-;;26310:23;26328:4;26310:23;:::i;:::-;26302:31;;26354:27;26372:8;26354:27;:::i;:::-;26342:39;;26400:104;26437:66;26427:8;26421:4;26400:104;:::i;:::-;26391:113;;26292:219;;;;:::o;26517:1073::-;;26762:8;26752:2;;26783:1;26774:10;;26785:5;;26752:2;26811:4;26801:2;;26828:1;26819:10;;26830:5;;26801:2;26897:4;26945:1;26940:27;;;;26981:1;26976:191;;;;26890:277;;26940:27;26958:1;26949:10;;26960:5;;;26976:191;27021:3;27011:8;27008:17;27005:2;;;27028:18;;:::i;:::-;27005:2;27077:8;27074:1;27070:16;27061:25;;27112:3;27105:5;27102:14;27099:2;;;27119:18;;:::i;:::-;27099:2;27152:5;;;26890:277;;27276:2;27266:8;27263:16;27257:3;27251:4;27248:13;27244:36;27226:2;27216:8;27213:16;27208:2;27202:4;27199:12;27195:35;27179:111;27176:2;;;27332:8;27326:4;27322:19;27313:28;;27367:3;27360:5;27357:14;27354:2;;;27374:18;;:::i;:::-;27354:2;27407:5;;27176:2;27447:42;27485:3;27475:8;27469:4;27466:1;27447:42;:::i;:::-;27432:57;;;;27521:4;27516:3;27512:14;27505:5;27502:25;27499:2;;;27530:18;;:::i;:::-;27499:2;27579:4;27572:5;27568:16;27559:25;;26577:1013;;;;;;:::o;27596:348::-;;27659:20;27677:1;27659:20;:::i;:::-;27654:25;;27693:20;27711:1;27693:20;:::i;:::-;27688:25;;27881:1;27813:66;27809:74;27806:1;27803:81;27798:1;27791:9;27784:17;27780:105;27777:2;;;27888:18;;:::i;:::-;27777:2;27936:1;27933;27929:9;27918:20;;27644:300;;;;:::o;27950:191::-;;28010:20;28028:1;28010:20;:::i;:::-;28005:25;;28044:20;28062:1;28044:20;:::i;:::-;28039:25;;28083:1;28080;28077:8;28074:2;;;28088:18;;:::i;:::-;28074:2;28133:1;28130;28126:9;28118:17;;27995:146;;;;:::o;28147:96::-;;28213:24;28231:5;28213:24;:::i;:::-;28202:35;;28192:51;;;:::o;28249:90::-;;28326:5;28319:13;28312:21;28301:32;;28291:48;;;:::o;28345:126::-;;28422:42;28415:5;28411:54;28400:65;;28390:81;;;:::o;28477:77::-;;28543:5;28532:16;;28522:32;;;:::o;28560:307::-;28628:1;28638:113;28652:6;28649:1;28646:13;28638:113;;;28737:1;28732:3;28728:11;28722:18;28718:1;28713:3;28709:11;28702:39;28674:2;28671:1;28667:10;28662:15;;28638:113;;;28769:6;28766:1;28763:13;28760:2;;;28849:1;28840:6;28835:3;28831:16;28824:27;28760:2;28609:258;;;;:::o;28873:233::-;;28935:24;28953:5;28935:24;:::i;:::-;28926:33;;28981:66;28974:5;28971:77;28968:2;;;29051:18;;:::i;:::-;28968:2;29098:1;29091:5;29087:13;29080:20;;28916:190;;;:::o;29112:180::-;29160:77;29157:1;29150:88;29257:4;29254:1;29247:15;29281:4;29278:1;29271:15;29298:180;29346:77;29343:1;29336:88;29443:4;29440:1;29433:15;29467:4;29464:1;29457:15;29484:180;29532:77;29529:1;29522:88;29629:4;29626:1;29619:15;29653:4;29650:1;29643:15;29670:102;;29762:2;29758:7;29753:2;29746:5;29742:14;29738:28;29728:38;;29718:54;;;:::o;29778:102::-;;29867:5;29864:1;29860:13;29839:34;;29829:51;;;:::o;29886:122::-;29959:24;29977:5;29959:24;:::i;:::-;29952:5;29949:35;29939:2;;29998:1;29995;29988:12;29939:2;29929:79;:::o;30014:116::-;30084:21;30099:5;30084:21;:::i;:::-;30077:5;30074:32;30064:2;;30120:1;30117;30110:12;30064:2;30054:76;:::o;30136:122::-;30209:24;30227:5;30209:24;:::i;:::-;30202:5;30199:35;30189:2;;30248:1;30245;30238:12;30189:2;30179:79;:::o

Swarm Source

ipfs://cd2e62a47ea38eb7b164ab4566fa2d27a27c554508084aa338b227f59f486d9d

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.