ETH Price: $3,883.84 (+1.27%)

Contract

0x79F75E9f93F89d33c20573DeC03710c6d9EC538D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...208408702024-09-27 8:49:4776 days ago1727426987IN
0x79F75E9f...6d9EC538D
0 ETH0.0009363614.56783013
Safe Transfer Fr...202191932024-07-02 13:40:59163 days ago1719927659IN
0x79F75E9f...6d9EC538D
0 ETH0.000311856.61055313
Safe Transfer Fr...202191872024-07-02 13:39:47163 days ago1719927587IN
0x79F75E9f...6d9EC538D
0 ETH0.000456626.6104471
Approve183825142023-10-19 6:10:59420 days ago1697695859IN
0x79F75E9f...6d9EC538D
0 ETH0.000279125.73623703
Approve183825102023-10-19 6:10:11420 days ago1697695811IN
0x79F75E9f...6d9EC538D
0 ETH0.000269285.53406789
Approve167451082023-03-03 2:48:11650 days ago1677811691IN
0x79F75E9f...6d9EC538D
0 ETH0.0018393437.8
Safe Transfer Fr...166805112023-02-22 0:43:47659 days ago1677026627IN
0x79F75E9f...6d9EC538D
0 ETH0.0017176426.74966297
Approve164918972023-01-26 15:30:47686 days ago1674747047IN
0x79F75E9f...6d9EC538D
0 ETH0.0013600927.95106908
Approve164875252023-01-26 0:51:23686 days ago1674694283IN
0x79F75E9f...6d9EC538D
0 ETH0.0010088820.73335009
Approve160678722022-11-28 10:25:23745 days ago1669631123IN
0x79F75E9f...6d9EC538D
0 ETH0.0007530115.47500221
Approve159386082022-11-10 9:04:59763 days ago1668071099IN
0x79F75E9f...6d9EC538D
0 ETH0.0010972222.54875272
Approve157689262022-10-17 16:10:23787 days ago1666023023IN
0x79F75E9f...6d9EC538D
0 ETH0.001705735.05363097
Safe Transfer Fr...157184472022-10-10 14:58:47794 days ago1665413927IN
0x79F75E9f...6d9EC538D
0 ETH0.002118332.99546299
Safe Transfer Fr...156652972022-10-03 4:39:47801 days ago1664771987IN
0x79F75E9f...6d9EC538D
0 ETH0.000391136.09130477
Approve156326042022-09-28 15:02:35806 days ago1664377355IN
0x79F75E9f...6d9EC538D
0 ETH0.0008430517.32543087
Approve155675992022-09-19 12:35:11815 days ago1663590911IN
0x79F75E9f...6d9EC538D
0 ETH0.000175883.61452031
Approve154838822022-09-06 11:48:12828 days ago1662464892IN
0x79F75E9f...6d9EC538D
0 ETH0.000203287.06816181
Approve154838592022-09-06 11:43:19828 days ago1662464599IN
0x79F75E9f...6d9EC538D
0 ETH0.000282149.81027879
Approve154829192022-09-06 8:10:11828 days ago1662451811IN
0x79F75E9f...6d9EC538D
0 ETH0.000260769.06697955
Safe Transfer Fr...154738472022-09-04 20:55:52830 days ago1662324952IN
0x79F75E9f...6d9EC538D
0 ETH0.000343765.49530733
Approve154717742022-09-04 12:57:51830 days ago1662296271IN
0x79F75E9f...6d9EC538D
0 ETH0.001150440
Approve154717702022-09-04 12:56:10830 days ago1662296170IN
0x79F75E9f...6d9EC538D
0 ETH0.001150440
Approve154717652022-09-04 12:55:19830 days ago1662296119IN
0x79F75E9f...6d9EC538D
0 ETH0.001946440
Approve154702602022-09-04 7:07:10830 days ago1662275230IN
0x79F75E9f...6d9EC538D
0 ETH0.000150525.23377821
Approve154648262022-09-03 10:24:35831 days ago1662200675IN
0x79F75E9f...6d9EC538D
0 ETH0.000299856.16229952
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BFHLandTerritory

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-06-01
*/

// Copyright (c) 2018-2020 double jump.tokyo inc.
pragma solidity 0.5.17;

interface IERC721Metadata /* is ERC721 */ {
    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external view returns (string memory _name);

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external view returns (string memory _symbol);

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

library Address {

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

    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    function toHex(address account) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(account));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
        return string(str);
    }
}
interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(
        address _operator,
        address _from,
        uint256 _tokenId,
        bytes calldata _data
    )
        external
        returns(bytes4);
}

library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "role already has the account");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "role dosen't have the account");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account) internal view returns (bool) {
        return role.bearer[account];
    }
}

interface IApprovalProxy {
  function setApprovalForAll(address _owner, address _spender, bool _approved) external;
  function isApprovedForAll(address _owner, address _spender, bool _original) external view returns (bool);
}
library String {

    function compare(string memory _a, string memory _b) public pure returns (bool) {
        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));
    }

    function cut(string memory _s, uint256 _from, uint256 _range) public pure returns (string memory) {
        bytes memory s = bytes(_s);
        require(s.length >= _from + _range, "_s length must be longer than _from + _range");
        bytes memory ret = new bytes(_range);

        for (uint256 i = 0; i < _range; i++) {
            ret[i] = s[_from+i];
        }
        return string(ret);
    }

    function concat(string memory _a, string memory _b) internal pure returns (string memory) {
        return string(abi.encodePacked(_a, _b));
    }
}

interface IERC721 /* is ERC165 */ {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

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

/// @title ERC-165 Standard Interface Detection
/// @dev See https://eips.ethereum.org/EIPS/eip-165
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

library Uint32 {

    function add(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub(uint32 a, uint32 b) internal pure returns (uint32) {
        require(a >= b, "subtraction overflow");
        return a - b;
    }

    function mul(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }
        uint32 c = a * b;
        require(c / a == b, "multiplication overflow");
        return c;
    }

    function div(uint32 a, uint32 b) internal pure returns (uint32) {
        require(b != 0, "division by 0");
        return a / b;
    }

    function mod(uint32 a, uint32 b) internal pure returns (uint32) {
        require(b != 0, "modulo by 0");
        return a % b;
    }

}

library Uint256 {

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >= b, "subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "division by 0");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "modulo by 0");
        return a % b;
    }

    function toString(uint256 a) internal pure returns (string memory) {
        bytes32 retBytes32;
        uint256 len = 0;
        if (a == 0) {
            retBytes32 = "0";
            len++;
        } else {
            uint256 value = a;
            while (value > 0) {
                retBytes32 = bytes32(uint256(retBytes32) / (2 ** 8));
                retBytes32 |= bytes32(((value % 10) + 48) * 2 ** (8 * 31));
                value /= 10;
                len++;
            }
        }

        bytes memory ret = new bytes(len);
        uint256 i;

        for (i = 0; i < len; i++) {
            ret[i] = retBytes32[i];
        }
        return string(ret);
    }
}

contract ERC721 is IERC721, ERC165 {
    using Uint256 for uint256;
    using Address for address;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
    bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;

    mapping (uint256 => address) private _tokenOwner;
    mapping (address => uint256) private _balance;
    mapping (uint256 => address) private _tokenApproved;
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    constructor () public {
        _registerInterface(_InterfaceId_ERC721);
    }

    function balanceOf(address _owner) public view returns (uint256) {
        return _balance[_owner];
    }

    function ownerOf(uint256 _tokenId) public view returns (address) {
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        return _tokenOwner[_tokenId];
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public payable {
        require(_data.length == 0, "data is not implemented");
        safeTransferFrom(_from, _to, _tokenId);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable {
        require(_checkOnERC721Received(_from, _to, _tokenId, ""),
                "`_to` is a smart contract and onERC721Received is invalid");
        transferFrom(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public payable {
        require(_transferable(msg.sender, _tokenId),
                "Unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT."); // solhint-disable-line
        require(ownerOf(_tokenId) == _from,
                "`_from` is not the current owner.");
        require(_to != address(0),
                "`_to` is the zero address.");
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        _transfer(_from, _to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) public payable {
        address owner = ownerOf(_tokenId);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender),
                "Unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner.");

        _tokenApproved[_tokenId] = _approved;
        emit Approval(msg.sender, _approved, _tokenId);
    }

    function setApprovalForAll(address _operator, bool _approved) public {
        _setApprovalForAll(msg.sender, _operator, _approved);
    }

    function _setApprovalForAll(address _owner, address _operator, bool _approved) internal {
        _operatorApprovals[_owner][_operator] = _approved;
        emit ApprovalForAll(_owner, _operator, _approved);
    }

    function getApproved(uint256 _tokenId) public view returns (address) {
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        return _tokenApproved[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
        return _isApprovedForAll(_owner, _operator);
    }
    
    function _isApprovedForAll(address _owner, address _operator) internal view returns (bool) {
        return _operatorApprovals[_owner][_operator];
    }

    function _transferable(address _spender, uint256 _tokenId) internal view returns (bool){
        address owner = ownerOf(_tokenId);
        return (_spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender));
    }

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        _clearApproval(_tokenId);
        _tokenOwner[_tokenId] = _to;
        _balance[_from] = _balance[_from].sub(1);
        _balance[_to] = _balance[_to].add(1);
        emit Transfer(_from, _to, _tokenId);
    }
  
    function _mint(address _to, uint256 _tokenId) internal {
        require(!_exist(_tokenId), "mint token already exists");
        _tokenOwner[_tokenId] = _to;
        _balance[_to] = _balance[_to].add(1);
        emit Transfer(address(0), _to, _tokenId);
    }
  
    function _burn(uint256 _tokenId) internal {
        require(_exist(_tokenId), "burn token does not already exists");
        address owner = ownerOf(_tokenId);
        _clearApproval(_tokenId);
        _tokenOwner[_tokenId] = address(0);
        _balance[owner] = _balance[owner].sub(1);
        emit Transfer(owner, address(0), _tokenId);
    }

    function _exist(uint256 _tokenId) internal view returns (bool) {
        address owner = _tokenOwner[_tokenId];
        return owner != address(0);
    }

    function _checkOnERC721Received(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory _data
    ) 
        internal
        returns (bool) 
    {
        if (!_to.isContract()) {
            return true;
        }
        bytes4 retval = IERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) internal {
        if (_tokenApproved[tokenId] != address(0)) {
            _tokenApproved[tokenId] = address(0);
        }
    }
}

interface IERC173 /* is ERC165 */ {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() external view returns (address);

    /// @notice Set the address of the new owner of the contract
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

contract ERC173 is IERC173, ERC165  {
    address private _owner;

    constructor() public {
        _registerInterface(0x7f5828d0);
        _transferOwnership(msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner(), "Must be owner");
        _;
    }

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

    function transferOwnership(address _newOwner) public onlyOwner() {
        _transferOwnership(_newOwner);
    }

    function _transferOwnership(address _newOwner) internal {
        address previousOwner = owner();
	_owner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }
}

contract Operatable is ERC173 {
    using Roles for Roles.Role;

    event OperatorAdded(address indexed account);
    event OperatorRemoved(address indexed account);

    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;
    Roles.Role private operators;

    constructor() public {
        operators.add(msg.sender);
        _paused = false;
    }

    modifier onlyOperator() {
        require(isOperator(msg.sender), "Must be operator");
        _;
    }

    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    function transferOwnership(address _newOwner) public onlyOperator() {
        _transferOwnership(_newOwner);
    }

    function isOperator(address account) public view returns (bool) {
        return operators.has(account);
    }

    function addOperator(address account) public onlyOperator() {
        operators.add(account);
        emit OperatorAdded(account);
    }

    function removeOperator(address account) public onlyOperator() {
        operators.remove(account);
        emit OperatorRemoved(account);
    }

    function paused() public view returns (bool) {
        return _paused;
    }

    function pause() public onlyOperator() whenNotPaused() {
        _paused = true;
        emit Paused(msg.sender);
    }

    function unpause() public onlyOperator() whenPaused() {
        _paused = false;
        emit Unpaused(msg.sender);
    }

    function withdrawEther() public onlyOperator() {
        msg.sender.transfer(address(this).balance);
    }

}

contract ERC721Metadata is IERC721Metadata, ERC721, Operatable {
    using Uint256 for uint256;
    using String for string;

    event UpdateTokenURIPrefix(
        string tokenUriPrefix
    );

    // Metadata
    string private __name;
    string private __symbol;
    string private __tokenUriPrefix;

    constructor(string memory _name,
                string memory _symbol,
                string memory _tokenUriPrefix) public {
        // ERC721Metadata
        __name = _name;
        __symbol = _symbol;
        setTokenURIPrefix(_tokenUriPrefix);
    }

    function setTokenURIPrefix(string memory _tokenUriPrefix) public onlyOperator() {
        __tokenUriPrefix = _tokenUriPrefix;
        emit UpdateTokenURIPrefix(_tokenUriPrefix);
    }

    function name() public view returns (string memory) {
        return __name;
    }

    function symbol() public view returns (string memory) {
        return __symbol;
    }

    function tokenURI(uint256 _tokenId) public view returns (string memory) {
        return __tokenUriPrefix.concat(_tokenId.toString());
    }
}

interface IERC721Mintable {
    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);
    function exist(uint256 _tokenId) external view returns (bool);
    function mint(address _to, uint256 _tokenId) external;
    function isMinter(address account) external view returns (bool);
    function addMinter(address account) external;
    function removeMinter(address account) external;
}

contract ERC721Mintable is ERC721, IERC721Mintable, Operatable {
    using Roles for Roles.Role;
    Roles.Role private minters;

    constructor() public {
        addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender), "Must be minter");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return minters.has(account);
    }

    function addMinter(address account) public onlyOperator() {
        minters.add(account);
        emit MinterAdded(account);
    }

    function removeMinter(address account) public onlyOperator() {
        minters.remove(account);
        emit MinterRemoved(account);
    }
    
    function exist(uint256 tokenId) public view returns (bool) {
        return _exist(tokenId);
    }

    function mint(address to, uint256 tokenId) public onlyMinter() {
        _mint(to, tokenId);
    }
}
interface IERC721CappedSupply /* IERC721Mintable, IERC721 */ {
    event SetUnitCap(uint32 _assetType, uint32 _unitCap);
    event SetTypeCap(uint256 _typeCap);
    function totalSupply() external view returns (uint256);
    function getTypeOffset() external view returns (uint256);
    function getTypeCap() external view returns (uint256);
    function setTypeCap(uint32 _newTypeCap) external;
    function getTypeCount() external view returns (uint256);
    function existingType(uint32 _assetType) external view returns (bool);
    function getUnitCap(uint32 _assetType) external view returns (uint32);
    function setUnitCap(uint32 _assetType, uint32 _newUnitCap) external;
    function mint(address _to, uint256 _tokenId) external;
}

/// @title ERC-721 Capped Supply
/// @author double jump.tokyo inc.
/// @dev see https://medium.com/@makzent/the-2x2-matrix-for-blockchain-game-ecosystems-2645be502704
contract ERC721CappedSupply is IERC721CappedSupply, ERC721Mintable {
    using Uint256 for uint256;
    using Uint32 for uint32;

    uint32 private assetTypeOffset;
    mapping(uint32 => uint32) private unitCap;
    mapping(uint32 => uint32) private unitCount;
    mapping(uint32 => bool) private unitCapIsSet;
    uint256 private assetTypeCap = 2**256-1;
    uint256 private assetTypeCount = 0;
    uint256 private totalCount = 0;

    constructor(uint32 _assetTypeOffset) public {
        setTypeOffset(_assetTypeOffset);
    }

    function isValidOffset(uint32 _offset) private pure returns (bool) {
        for (uint32 i = _offset; i > 0; i = i.div(10)) {
            if (i == 10) {
                return true;
            }
            if (i.mod(10) != 0) {
                return false;
            }
        }
        return false;
    }

    function totalSupply() public view returns (uint256) {
        return totalCount;
    }

    function setTypeOffset(uint32 _assetTypeOffset) private {
        require(isValidOffset(_assetTypeOffset),  "Offset is invalid");
        assetTypeCap = assetTypeCap / _assetTypeOffset;
        assetTypeOffset = _assetTypeOffset;
    }

    function getTypeOffset() public view returns (uint256) {
        return assetTypeOffset;
    }

    function setTypeCap(uint32 _newTypeCap) public onlyMinter() {
        require(_newTypeCap < assetTypeCap, "New type cap cannot be less than existing type cap");
        require(_newTypeCap >= assetTypeCount, "New type cap must be more than current type count");
        assetTypeCap = _newTypeCap;
        emit SetTypeCap(_newTypeCap);
    }

    function getTypeCap() public view returns (uint256) {
        return assetTypeCap;
    }

    function getTypeCount() public view returns (uint256) {
        return assetTypeCount;
    }

    function existingType(uint32 _assetType) public view returns (bool) {
        return unitCapIsSet[_assetType];
    }

    function setUnitCap(uint32 _assetType, uint32 _newUnitCap) public onlyMinter() {
        require(_assetType != 0, "Asset Type must not be 0");
        require(_newUnitCap < assetTypeOffset, "New unit cap must be less than asset type offset");

        if (!existingType(_assetType)) {
            unitCapIsSet[_assetType] = true;
            assetTypeCount = assetTypeCount.add(1);
            require(assetTypeCount <= assetTypeCap, "Asset type cap is exceeded");
        } else {
            require(_newUnitCap < getUnitCap(_assetType), "New unit cap must be less than previous unit cap");
            require(_newUnitCap >= getUnitCount(_assetType), "New unit cap must be more than current unit count");
        }

        unitCap[_assetType] = _newUnitCap;
        emit SetUnitCap(_assetType, _newUnitCap);
    }

    function getUnitCap(uint32 _assetType) public view returns (uint32) {
        require(existingType(_assetType), "Asset type does not exist");
        return unitCap[_assetType];
    }

    function getUnitCount(uint32 _assetType) public view returns (uint32) {
        return unitCount[_assetType];
    }

    function mint(address _to, uint256 _tokenId) public onlyMinter() {
        require(_tokenId.mod(assetTypeOffset) != 0, "Index must not be 0");
        uint32 assetType = uint32(_tokenId.div(assetTypeOffset));
        unitCount[assetType] = unitCount[assetType].add(1);
        totalCount = totalCount.add(1);
        require(unitCount[assetType] <= getUnitCap(assetType), "Asset unit cap is exceed");
        super.mint(_to, _tokenId);
    }
}

contract ERC721TokenPausable is ERC721,Operatable {
    using Roles for Roles.Role;
    Roles.Role private tokenPauser;

    event TokenPauserAdded(address indexed account);
    event TokenPauserRemoved(address indexed account);

    event TokenPaused(uint256 indexed tokenId);
    event TokenUnpaused(uint256 indexed tokenId);

    mapping (uint256 => bool) private _tokenPaused;

    constructor() public {
        tokenPauser.add(msg.sender);
    }

    modifier onlyTokenPauser() {
        require(isTokenPauser(msg.sender), "Only token pauser can call this method");
        _;
    }

    modifier whenNotTokenPaused(uint256 _tokenId) {
        require(!isTokenPaused(_tokenId), "TokenPausable: paused");
        _;
    }

    modifier whenTokenPaused(uint256 _tokenId) {
        require(isTokenPaused(_tokenId), "TokenPausable: not paused");
        _;
    }

    function pauseToken(uint256 _tokenId) public onlyTokenPauser() {
        require(!isTokenPaused(_tokenId), "Token is already paused");
        _tokenPaused[_tokenId] = true;
        emit TokenPaused(_tokenId);
    }

    function unpauseToken(uint256 _tokenId) public onlyTokenPauser() {
        require(isTokenPaused(_tokenId), "Token is not paused");
        _tokenPaused[_tokenId] = false;
        emit TokenUnpaused(_tokenId);
    }

    function isTokenPaused(uint256 _tokenId) public view returns (bool) {
        return _tokenPaused[_tokenId];
    }

    function isTokenPauser(address account) public view returns (bool) {
        return tokenPauser.has(account);
    }

    function addTokenPauser(address account) public onlyOperator() {
        tokenPauser.add(account);
        emit TokenPauserAdded(account);
    }

    function removeTokenPauser(address account) public onlyOperator() {
        tokenPauser.remove(account);
        emit TokenPauserRemoved(account);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.safeTransferFrom(_from, _to, _tokenId, _data);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.safeTransferFrom(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.transferFrom(_from, _to, _tokenId);
    }
}

contract BFHLandTerritory is
                    ERC721TokenPausable,
                    ERC721CappedSupply(10000),
                    ERC721Metadata("BFH:LandTerritory", "BFHL", "https://bravefrontierheroes.com/metadata/landterritories/")
                    {

    event UpdateApprovalProxy(address _newProxyContract);
    IApprovalProxy public approvalProxy;
    constructor(address _approvalProxy) public {
        setApprovalProxy(_approvalProxy);
    }

    function setApprovalProxy(address _new) public onlyOperator() {
        approvalProxy = IApprovalProxy(_new);
        emit UpdateApprovalProxy(_new);
    }

    function setApprovalForAll(address _spender, bool _approved) public {
        if (address(approvalProxy) != address(0x0) && _spender.isContract()) {
            approvalProxy.setApprovalForAll(msg.sender, _spender, _approved);
        }
        super.setApprovalForAll(_spender, _approved);
    }

    function isApprovedForAll(address _owner, address _spender) public view returns (bool) {
        bool original = super.isApprovedForAll(_owner, _spender);
        if (address(approvalProxy) != address(0x0)) {
            return approvalProxy.isApprovedForAll(_owner, _spender, original);
        }
        return original;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_approvalProxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_typeCap","type":"uint256"}],"name":"SetTypeCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_assetType","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"_unitCap","type":"uint32"}],"name":"SetUnitCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TokenPauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TokenPauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newProxyContract","type":"address"}],"name":"UpdateApprovalProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tokenUriPrefix","type":"string"}],"name":"UpdateTokenURIPrefix","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTokenPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"approvalProxy","outputs":[{"internalType":"contract IApprovalProxy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"existingType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"getUnitCap","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"getUnitCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isTokenPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"pauseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTokenPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setApprovalProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_tokenUriPrefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_newTypeCap","type":"uint32"}],"name":"setTypeCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"},{"internalType":"uint32","name":"_newUnitCap","type":"uint32"}],"name":"setUnitCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unpauseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e556000600f5560006010553480156200003f57600080fd5b5060405162005bce38038062005bce833981810160405260208110156200006557600080fd5b81019080805190602001909291905050506040518060400160405280601181526020017f4246483a4c616e645465727269746f72790000000000000000000000000000008152506040518060400160405280600481526020017f4246484c0000000000000000000000000000000000000000000000000000000081525060405180606001604052806039815260200162005b9560399139612710620001176301ffc9a760e01b6200022a60201b60201c565b6200012f6380ac58cd60e01b6200022a60201b60201c565b62000147637f5828d060e01b6200022a60201b60201c565b62000158336200033360201b60201c565b62000173336006620003e660201b62003dc11790919060201c565b6000600560146101000a81548160ff021916908315150217905550620001a9336007620003e660201b62003dc11790919060201c565b620001ba33620004ca60201b60201c565b620001cb81620005af60201b60201c565b508260119080519060200190620001e492919062000b5d565b508160129080519060200190620001fd92919062000b5d565b506200020f816200067060201b60201c565b5050506200022381620007af60201b60201c565b5062000c0c565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620002c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600062000345620008da60201b60201c565b905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003f882826200090460201b60201c565b156200046c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f726f6c6520616c72656164792068617320746865206163636f756e740000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620004db336200095d60201b60201c565b6200054e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b62000569816009620003e660201b62003dc11790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b620005c0816200098160201b60201c565b62000633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4f666673657420697320696e76616c696400000000000000000000000000000081525060200191505060405180910390fd5b8063ffffffff16600e54816200064557fe5b04600e8190555080600a60006101000a81548163ffffffff021916908363ffffffff16021790555050565b62000681336200095d60201b60201c565b620006f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b80601390805190602001906200070c92919062000b5d565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156200077157808201518184015260208101905062000754565b50505050905090810190601f1680156200079f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b620007c0336200095d60201b60201c565b62000833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006200097a8260066200090460201b62003d681790919060201c565b9050919050565b6000808290505b60008163ffffffff16111562000a1657600a8163ffffffff161415620009b357600191505062000a1c565b6000620009d6600a8363ffffffff1662000a2160201b62004bd41790919060201c565b63ffffffff1614620009ed57600091505062000a1c565b62000a0e600a8263ffffffff1662000abf60201b62004c701790919060201c565b905062000988565b50600090505b919050565b6000808263ffffffff16141562000aa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d6f64756c6f206279203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8163ffffffff168363ffffffff168162000ab657fe5b06905092915050565b6000808263ffffffff16141562000b3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6469766973696f6e20627920300000000000000000000000000000000000000081525060200191505060405180910390fd5b8163ffffffff168363ffffffff168162000b5457fe5b04905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ba057805160ff191683800117855562000bd1565b8280016001018555821562000bd1579182015b8281111562000bd057825182559160200191906001019062000bb3565b5b50905062000be0919062000be4565b5090565b62000c0991905b8082111562000c0557600081600090555060010162000beb565b5090565b90565b614f798062000c1c6000396000f3fe6080604052600436106102725760003560e01c8063776ab6341161014f578063ac8a584a116100c1578063ca1728fd1161007a578063ca1728fd14611088578063d6447368146110d9578063e985e9c51461112c578063ed841bf1146111b5578063f2fde38b1461121e578063fbd395f81461126f57610272565b8063ac8a584a14610da9578063b88d4fde14610dfa578063b97d789514610eff578063c000582714610f58578063c2508c4614610f83578063c87b56dd14610fd457610272565b8063983b2d5611610113578063983b2d5614610b285780639870d7fe14610b7957806399e0dd7c14610bca5780639bb5c9c314610c92578063a22cb46514610ce3578063aa271e1a14610d4057610272565b8063776ab634146109c45780637d02b1a3146109ff5780638456cb5914610a2a5780638da5cb5b14610a4157806395d89b4114610a9857610272565b80634dd09f33116101e85780636352211e116101ac5780636352211e146107b25780636d70f7ae1461082d57806370a08231146108965780637362377b146108fb578063739f66871461091257806374db07d81461097357610272565b80634dd09f33146106375780634ebbc92a1461068e578063532efe60146106e15780635c975abb1461074257806362977e2c1461077157610272565b806323b872dd1161023a57806323b872dd1461046d5780632cff5b39146104db5780633092afd5146105065780633f4ba83a1461055757806340c10f191461056e57806342842e0e146105c957610272565b806301ffc9a71461027757806306fdde03146102e9578063081812fc14610379578063095ea7b3146103f457806318160ddd14610442575b600080fd5b34801561028357600080fd5b506102cf6004803603602081101561029a57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506112aa565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506102fe611311565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033e578082015181840152602081019050610323565b50505050905090810190601f16801561036b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038557600080fd5b506103b26004803603602081101561039c57600080fd5b81019080803590602001909291905050506113b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104406004803603604081101561040a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061146b565b005b34801561044e57600080fd5b506104576115bf565b6040518082815260200191505060405180910390f35b6104d96004803603606081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115c9565b005b3480156104e757600080fd5b506104f06116da565b6040518082815260200191505060405180910390f35b34801561051257600080fd5b506105556004803603602081101561052957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e4565b005b34801561056357600080fd5b5061056c6117b9565b005b34801561057a57600080fd5b506105c76004803603604081101561059157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611936565b005b610635600480360360608110156105df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611beb565b005b34801561064357600080fd5b5061064c611cfc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561069a57600080fd5b506106c7600480360360208110156106b157600080fd5b8101908080359060200190929190505050611d22565b604051808215151515815260200191505060405180910390f35b3480156106ed57600080fd5b506107206004803603602081101561070457600080fd5b81019080803563ffffffff169060200190929190505050611d34565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561074e57600080fd5b50610757611d6d565b604051808215151515815260200191505060405180910390f35b34801561077d57600080fd5b506107b06004803603602081101561079457600080fd5b81019080803563ffffffff169060200190929190505050611d84565b005b3480156107be57600080fd5b506107eb600480360360208110156107d557600080fd5b8101908080359060200190929190505050611f0d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083957600080fd5b5061087c6004803603602081101561085057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc5565b604051808215151515815260200191505060405180910390f35b3480156108a257600080fd5b506108e5600480360360208110156108b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe2565b6040518082815260200191505060405180910390f35b34801561090757600080fd5b5061091061202b565b005b34801561091e57600080fd5b506109516004803603602081101561093557600080fd5b81019080803563ffffffff1690602001909291905050506120ef565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561097f57600080fd5b506109c26004803603602081101561099657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121a3565b005b3480156109d057600080fd5b506109fd600480360360208110156109e757600080fd5b8101908080359060200190929190505050612278565b005b348015610a0b57600080fd5b50610a146123ad565b6040518082815260200191505060405180910390f35b348015610a3657600080fd5b50610a3f6123b7565b005b348015610a4d57600080fd5b50610a56612535565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa457600080fd5b50610aad61255f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aed578082015181840152602081019050610ad2565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3457600080fd5b50610b7760048036036020811015610b4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612601565b005b348015610b8557600080fd5b50610bc860048036036020811015610b9c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d6565b005b348015610bd657600080fd5b50610c9060048036036020811015610bed57600080fd5b8101908080359060200190640100000000811115610c0a57600080fd5b820183602082011115610c1c57600080fd5b80359060200191846001830284011164010000000083111715610c3e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127ab565b005b348015610c9e57600080fd5b50610ce160048036036020811015610cb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128dc565b005b348015610cef57600080fd5b50610d3e60048036036040811015610d0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506129fe565b005b348015610d4c57600080fd5b50610d8f60048036036020811015610d6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b85565b604051808215151515815260200191505060405180910390f35b348015610db557600080fd5b50610df860048036036020811015610dcc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ba2565b005b610efd60048036036080811015610e1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610e7757600080fd5b820183602082011115610e8957600080fd5b80359060200191846001830284011164010000000083111715610eab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c77565b005b348015610f0b57600080fd5b50610f3e60048036036020811015610f2257600080fd5b81019080803563ffffffff169060200190929190505050612d8a565b604051808215151515815260200191505060405180910390f35b348015610f6457600080fd5b50610f6d612dc0565b6040518082815260200191505060405180910390f35b348015610f8f57600080fd5b50610fd260048036036020811015610fa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612de0565b005b348015610fe057600080fd5b5061100d60048036036020811015610ff757600080fd5b8101908080359060200190929190505050612eb5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561104d578082015181840152602081019050611032565b50505050905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561109457600080fd5b506110d7600480360360408110156110ab57600080fd5b81019080803563ffffffff169060200190929190803563ffffffff169060200190929190505050612f73565b005b3480156110e557600080fd5b50611112600480360360208110156110fc57600080fd5b8101908080359060200190929190505050613334565b604051808215151515815260200191505060405180910390f35b34801561113857600080fd5b5061119b6004803603604081101561114f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061335e565b604051808215151515815260200191505060405180910390f35b3480156111c157600080fd5b50611204600480360360208110156111d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134f0565b604051808215151515815260200191505060405180910390f35b34801561122a57600080fd5b5061126d6004803603602081101561124157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061350d565b005b34801561127b57600080fd5b506112a86004803603602081101561129257600080fd5b8101908080359060200190929190505050613594565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113a95780601f1061137e576101008083540402835291602001916113a9565b820191906000526020600020905b81548152906001019060200180831161138c57829003601f168201915b5050505050905090565b60006113be826136ca565b611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e000081525060200191505060405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061147682611f0d565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114b857506114b7813361335e565b5b61150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614e3e605d913960600191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601054905090565b600560149054906101000a900460ff161561164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8061165681613334565b156116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e5061757361626c653a20706175736564000000000000000000000081525060200191505060405180910390fd5b6116d484848461373c565b50505050565b6000600e54905090565b6116ed33611fc5565b61175f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b61177381600961395590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6117c233611fc5565b611834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b600560149054906101000a900460ff166118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b61193f33612b85565b6119b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b60006119de600a60009054906101000a900463ffffffff1663ffffffff1683613a2f90919063ffffffff16565b1415611a52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e646578206d757374206e6f7420626520300000000000000000000000000081525060200191505060405180910390fd5b6000611a7f600a60009054906101000a900463ffffffff1663ffffffff1683613ab990919063ffffffff16565b9050611aca6001600c60008463ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff16613b4390919063ffffffff16565b600c60008363ffffffff1663ffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550611b1d6001601054613bd790919063ffffffff16565b601081905550611b2c816120ef565b63ffffffff16600c60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161115611bdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f417373657420756e69742063617020697320657863656564000000000000000081525060200191505060405180910390fd5b611be68383613c5f565b505050565b600560149054906101000a900460ff1615611c6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b80611c7881613334565b15611ceb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e5061757361626c653a20706175736564000000000000000000000081525060200191505060405180910390fd5b611cf6848484613ce8565b50505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d2d826136ca565b9050919050565b6000600c60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff169050919050565b6000600560149054906101000a900460ff16905090565b611d8d33612b85565b611dff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b600e548163ffffffff1610611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614ebc6032913960400191505060405180910390fd5b600f548163ffffffff161015611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180614eee6031913960400191505060405180910390fd5b8063ffffffff16600e819055507fcffe07c9e7982b6c56cb569d21caedd78c8fbc68a0cbdc4d963c21eae6e8f91081604051808263ffffffff16815260200191505060405180910390a150565b6000611f18826136ca565b611f8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e000081525060200191505060405180910390fd5b6001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611fdb826006613d6890919063ffffffff16565b9050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61203433611fc5565b6120a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120ec573d6000803e3d6000fd5b50565b60006120fa82612d8a565b61216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4173736574207479706520646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b600b60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff169050919050565b6121ac33611fc5565b61221e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612232816007613dc190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fff12d576e2fecf516eb406e6618d5e97bcc8046690863b984069b15ada11d61260405160405180910390a250565b612281336134f0565b6122d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f1f6026913960400191505060405180910390fd5b6122df81613334565b612351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6b656e206973206e6f74207061757365640000000000000000000000000081525060200191505060405180910390fd5b60006008600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807f0cfa9cc56bacd896c88effb6a4051b954fcaaf2de7ae98882e39f294ea65184360405160405180910390a250565b6000600f54905090565b6123c033611fc5565b612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b600560149054906101000a900460ff16156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125f75780601f106125cc576101008083540402835291602001916125f7565b820191906000526020600020905b8154815290600101906020018083116125da57829003601f168201915b5050505050905090565b61260a33611fc5565b61267c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612690816009613dc190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6126df33611fc5565b612751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612765816006613dc190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d60405160405180910390a250565b6127b433611fc5565b612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b806013908051906020019061283c929190614b2f565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561289f578082015181840152602081019050612884565b50505050905090810190601f1680156128cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b6128e533611fc5565b612957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612a785750612a778273ffffffffffffffffffffffffffffffffffffffff16613e9c565b5b15612b7757601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663367605ca3384846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019350505050600060405180830381600087803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b505050505b612b818282613eaf565b5050565b6000612b9b826009613d6890919063ffffffff16565b9050919050565b612bab33611fc5565b612c1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612c3181600661395590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d60405160405180910390a250565b600560149054906101000a900460ff1615612cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b81612d0481613334565b15612d77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e5061757361626c653a20706175736564000000000000000000000081525060200191505060405180910390fd5b612d8385858585613ebe565b5050505050565b6000600d60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900463ffffffff1663ffffffff16905090565b612de933611fc5565b612e5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612e6f81600761395590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f2186c7d8e4b2d6a73790355b1a465872175798d2366146e638fc885d54460b8560405160405180910390a250565b6060612f6c612ec383613f46565b60138054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f595780601f10612f2e57610100808354040283529160200191612f59565b820191906000526020600020905b815481529060010190602001808311612f3c57829003601f168201915b50505050506140a890919063ffffffff16565b9050919050565b612f7c33612b85565b612fee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b60008263ffffffff16141561306b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f41737365742054797065206d757374206e6f742062652030000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900463ffffffff1663ffffffff168163ffffffff16106130e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180614e0e6030913960400191505060405180910390fd5b6130ea82612d8a565b6131c1576001600d60008463ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061313c6001600f54613bd790919063ffffffff16565b600f81905550600e54600f5411156131bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f417373657420747970652063617020697320657863656564656400000000000081525060200191505060405180910390fd5b61329b565b6131ca826120ef565b63ffffffff168163ffffffff161061322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180614d746030913960400191505060405180910390fd5b61323682611d34565b63ffffffff168163ffffffff16101561329a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180614ddd6031913960400191505060405180910390fd5b5b80600b60008463ffffffff1663ffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055507f30525f07d1d2ff6b7c2b1817c13c37935c691304253dd353909b5c0381a9dc408282604051808363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390a15050565b60006008600083815260200190815260200160002060009054906101000a900460ff169050919050565b60008061336b8484614170565b9050600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134e557601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dccfc528585846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182151515158152602001935050505060206040518083038186803b1580156134a257600080fd5b505afa1580156134b6573d6000803e3d6000fd5b505050506040513d60208110156134cc57600080fd5b81019080805190602001909291905050509150506134ea565b809150505b92915050565b6000613506826007613d6890919063ffffffff16565b9050919050565b61351633611fc5565b613588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b61359181614184565b50565b61359d336134f0565b6135f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f1f6026913960400191505060405180910390fd5b6135fb81613334565b1561366e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e20697320616c72656164792070617573656400000000000000000081525060200191505060405180910390fd5b60016008600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fc2d830ac158eec7b589dfadf012044c95b8646222991556ab4cd311e38bc77d160405160405180910390a250565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b613746338261422f565b61379b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526067815260200180614d0d6067913960800191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166137bb82611f0d565b73ffffffffffffffffffffffffffffffffffffffff1614613827576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e9b6021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f605f746f6020697320746865207a65726f20616464726573732e00000000000081525060200191505060405180910390fd5b6138d3816136ca565b613945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e000081525060200191505060405180910390fd5b6139508383836142c4565b505050565b61395f8282613d68565b6139d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f726f6c6520646f73656e2774206861766520746865206163636f756e7400000081525060200191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080821415613aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d6f64756c6f206279203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818381613ab057fe5b06905092915050565b600080821415613b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6469766973696f6e20627920300000000000000000000000000000000000000081525060200191505060405180910390fd5b818381613b3a57fe5b04905092915050565b60008082840190508363ffffffff168163ffffffff161015613bcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6164646974696f6e206f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b600080828401905083811015613c55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6164646974696f6e206f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b613c6833612b85565b613cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b613ce482826144ab565b5050565b613d038383836040518060200160405280600081525061466f565b613d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180614da46039913960400191505060405180910390fd5b613d638383836115c9565b505050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613dcb8282613d68565b15613e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f726f6c6520616c72656164792068617320746865206163636f756e740000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b613eba338383614858565b5050565b6000815114613f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f64617461206973206e6f7420696d706c656d656e74656400000000000000000081525060200191505060405180910390fd5b613f40848484611beb565b50505050565b6060600080600090506000841415613f88577f300000000000000000000000000000000000000000000000000000000000000091508080600101915050613ffe565b60008490505b6000811115613ffc576101008360001c81613fa557fe5b0460001b92507f01000000000000000000000000000000000000000000000000000000000000006030600a8381613fd857fe5b06010260001b83179250600a8181613fec57fe5b0490508180600101925050613f8e565b505b6060816040519080825280601f01601f1916602001820160405280156140335781602001600182028038833980820191505090505b50905060008090505b8281101561409c5783816020811061405057fe5b1a60f81b82828151811061406057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061403c565b81945050505050919050565b606082826040516020018083805190602001908083835b602083106140e257805182526020820191506020810190506020830392506140bf565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b602083106141335780518252602082019150602081019050602083039250614110565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905092915050565b600061417c838361495a565b905092915050565b600061418e612535565b905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008061423b83611f0d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806142aa57508373ffffffffffffffffffffffffffffffffffffffff16614292846113b3565b73ffffffffffffffffffffffffffffffffffffffff16145b806142bb57506142ba818561335e565b5b91505092915050565b6142cd816149ee565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506143726001600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614aac90919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144086001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6144b4816136ca565b15614527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d696e7420746f6b656e20616c7265616479206578697374730000000000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506145cc6001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006146908473ffffffffffffffffffffffffffffffffffffffff16613e9c565b61469d5760019050614850565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561477857808201518184015260208101905061475d565b50505050905090810190601f1680156147a55780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b505050506040513d60208110156147f157600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a3505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614aa95760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600081831015614b24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f7375627472616374696f6e206f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b7057805160ff1916838001178555614b9e565b82800160010185558215614b9e579182015b82811115614b9d578251825591602001919060010190614b82565b5b509050614bab9190614baf565b5090565b614bd191905b80821115614bcd576000816000905550600101614bb5565b5090565b90565b6000808263ffffffff161415614c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d6f64756c6f206279203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8163ffffffff168363ffffffff1681614c6757fe5b06905092915050565b6000808263ffffffff161415614cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6469766973696f6e20627920300000000000000000000000000000000000000081525060200191505060405180910390fd5b8163ffffffff168363ffffffff1681614d0357fe5b0490509291505056fe556e6c65737320606d73672e73656e64657260206973207468652063757272656e74206f776e65722c20616e20617574686f72697a6564206f70657261746f722c206f722074686520617070726f766564206164647265737320666f722074686973204e46542e4e657720756e697420636170206d757374206265206c657373207468616e2070726576696f757320756e697420636170605f746f60206973206120736d61727420636f6e747261637420616e64206f6e455243373231526563656976656420697320696e76616c69644e657720756e697420636170206d757374206265206d6f7265207468616e2063757272656e7420756e697420636f756e744e657720756e697420636170206d757374206265206c657373207468616e2061737365742074797065206f6666736574556e6c65737320606d73672e73656e64657260206973207468652063757272656e74204e4654206f776e65722c206f7220616e20617574686f72697a6564206f70657261746f72206f66207468652063757272656e74206f776e65722e605f66726f6d60206973206e6f74207468652063757272656e74206f776e65722e4e65772074797065206361702063616e6e6f74206265206c657373207468616e206578697374696e672074797065206361704e6577207479706520636170206d757374206265206d6f7265207468616e2063757272656e74207479706520636f756e744f6e6c7920746f6b656e207061757365722063616e2063616c6c2074686973206d6574686f64a265627a7a72315820ba2ee7403bc3ef745afefe5c6351f6fb712469b15b2177655d00f8b181f927b564736f6c6343000511003268747470733a2f2f627261766566726f6e746965726865726f65732e636f6d2f6d657461646174612f6c616e647465727269746f726965732f000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063776ab6341161014f578063ac8a584a116100c1578063ca1728fd1161007a578063ca1728fd14611088578063d6447368146110d9578063e985e9c51461112c578063ed841bf1146111b5578063f2fde38b1461121e578063fbd395f81461126f57610272565b8063ac8a584a14610da9578063b88d4fde14610dfa578063b97d789514610eff578063c000582714610f58578063c2508c4614610f83578063c87b56dd14610fd457610272565b8063983b2d5611610113578063983b2d5614610b285780639870d7fe14610b7957806399e0dd7c14610bca5780639bb5c9c314610c92578063a22cb46514610ce3578063aa271e1a14610d4057610272565b8063776ab634146109c45780637d02b1a3146109ff5780638456cb5914610a2a5780638da5cb5b14610a4157806395d89b4114610a9857610272565b80634dd09f33116101e85780636352211e116101ac5780636352211e146107b25780636d70f7ae1461082d57806370a08231146108965780637362377b146108fb578063739f66871461091257806374db07d81461097357610272565b80634dd09f33146106375780634ebbc92a1461068e578063532efe60146106e15780635c975abb1461074257806362977e2c1461077157610272565b806323b872dd1161023a57806323b872dd1461046d5780632cff5b39146104db5780633092afd5146105065780633f4ba83a1461055757806340c10f191461056e57806342842e0e146105c957610272565b806301ffc9a71461027757806306fdde03146102e9578063081812fc14610379578063095ea7b3146103f457806318160ddd14610442575b600080fd5b34801561028357600080fd5b506102cf6004803603602081101561029a57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506112aa565b604051808215151515815260200191505060405180910390f35b3480156102f557600080fd5b506102fe611311565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033e578082015181840152602081019050610323565b50505050905090810190601f16801561036b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038557600080fd5b506103b26004803603602081101561039c57600080fd5b81019080803590602001909291905050506113b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104406004803603604081101561040a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061146b565b005b34801561044e57600080fd5b506104576115bf565b6040518082815260200191505060405180910390f35b6104d96004803603606081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115c9565b005b3480156104e757600080fd5b506104f06116da565b6040518082815260200191505060405180910390f35b34801561051257600080fd5b506105556004803603602081101561052957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e4565b005b34801561056357600080fd5b5061056c6117b9565b005b34801561057a57600080fd5b506105c76004803603604081101561059157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611936565b005b610635600480360360608110156105df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611beb565b005b34801561064357600080fd5b5061064c611cfc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561069a57600080fd5b506106c7600480360360208110156106b157600080fd5b8101908080359060200190929190505050611d22565b604051808215151515815260200191505060405180910390f35b3480156106ed57600080fd5b506107206004803603602081101561070457600080fd5b81019080803563ffffffff169060200190929190505050611d34565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561074e57600080fd5b50610757611d6d565b604051808215151515815260200191505060405180910390f35b34801561077d57600080fd5b506107b06004803603602081101561079457600080fd5b81019080803563ffffffff169060200190929190505050611d84565b005b3480156107be57600080fd5b506107eb600480360360208110156107d557600080fd5b8101908080359060200190929190505050611f0d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083957600080fd5b5061087c6004803603602081101561085057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc5565b604051808215151515815260200191505060405180910390f35b3480156108a257600080fd5b506108e5600480360360208110156108b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe2565b6040518082815260200191505060405180910390f35b34801561090757600080fd5b5061091061202b565b005b34801561091e57600080fd5b506109516004803603602081101561093557600080fd5b81019080803563ffffffff1690602001909291905050506120ef565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561097f57600080fd5b506109c26004803603602081101561099657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121a3565b005b3480156109d057600080fd5b506109fd600480360360208110156109e757600080fd5b8101908080359060200190929190505050612278565b005b348015610a0b57600080fd5b50610a146123ad565b6040518082815260200191505060405180910390f35b348015610a3657600080fd5b50610a3f6123b7565b005b348015610a4d57600080fd5b50610a56612535565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa457600080fd5b50610aad61255f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aed578082015181840152602081019050610ad2565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3457600080fd5b50610b7760048036036020811015610b4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612601565b005b348015610b8557600080fd5b50610bc860048036036020811015610b9c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126d6565b005b348015610bd657600080fd5b50610c9060048036036020811015610bed57600080fd5b8101908080359060200190640100000000811115610c0a57600080fd5b820183602082011115610c1c57600080fd5b80359060200191846001830284011164010000000083111715610c3e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127ab565b005b348015610c9e57600080fd5b50610ce160048036036020811015610cb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128dc565b005b348015610cef57600080fd5b50610d3e60048036036040811015610d0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506129fe565b005b348015610d4c57600080fd5b50610d8f60048036036020811015610d6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b85565b604051808215151515815260200191505060405180910390f35b348015610db557600080fd5b50610df860048036036020811015610dcc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ba2565b005b610efd60048036036080811015610e1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610e7757600080fd5b820183602082011115610e8957600080fd5b80359060200191846001830284011164010000000083111715610eab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c77565b005b348015610f0b57600080fd5b50610f3e60048036036020811015610f2257600080fd5b81019080803563ffffffff169060200190929190505050612d8a565b604051808215151515815260200191505060405180910390f35b348015610f6457600080fd5b50610f6d612dc0565b6040518082815260200191505060405180910390f35b348015610f8f57600080fd5b50610fd260048036036020811015610fa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612de0565b005b348015610fe057600080fd5b5061100d60048036036020811015610ff757600080fd5b8101908080359060200190929190505050612eb5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561104d578082015181840152602081019050611032565b50505050905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561109457600080fd5b506110d7600480360360408110156110ab57600080fd5b81019080803563ffffffff169060200190929190803563ffffffff169060200190929190505050612f73565b005b3480156110e557600080fd5b50611112600480360360208110156110fc57600080fd5b8101908080359060200190929190505050613334565b604051808215151515815260200191505060405180910390f35b34801561113857600080fd5b5061119b6004803603604081101561114f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061335e565b604051808215151515815260200191505060405180910390f35b3480156111c157600080fd5b50611204600480360360208110156111d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134f0565b604051808215151515815260200191505060405180910390f35b34801561122a57600080fd5b5061126d6004803603602081101561124157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061350d565b005b34801561127b57600080fd5b506112a86004803603602081101561129257600080fd5b8101908080359060200190929190505050613594565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113a95780601f1061137e576101008083540402835291602001916113a9565b820191906000526020600020905b81548152906001019060200180831161138c57829003601f168201915b5050505050905090565b60006113be826136ca565b611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e000081525060200191505060405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061147682611f0d565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114b857506114b7813361335e565b5b61150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614e3e605d913960600191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601054905090565b600560149054906101000a900460ff161561164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8061165681613334565b156116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e5061757361626c653a20706175736564000000000000000000000081525060200191505060405180910390fd5b6116d484848461373c565b50505050565b6000600e54905090565b6116ed33611fc5565b61175f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b61177381600961395590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6117c233611fc5565b611834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b600560149054906101000a900460ff166118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b61193f33612b85565b6119b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b60006119de600a60009054906101000a900463ffffffff1663ffffffff1683613a2f90919063ffffffff16565b1415611a52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e646578206d757374206e6f7420626520300000000000000000000000000081525060200191505060405180910390fd5b6000611a7f600a60009054906101000a900463ffffffff1663ffffffff1683613ab990919063ffffffff16565b9050611aca6001600c60008463ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff16613b4390919063ffffffff16565b600c60008363ffffffff1663ffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550611b1d6001601054613bd790919063ffffffff16565b601081905550611b2c816120ef565b63ffffffff16600c60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff1663ffffffff161115611bdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f417373657420756e69742063617020697320657863656564000000000000000081525060200191505060405180910390fd5b611be68383613c5f565b505050565b600560149054906101000a900460ff1615611c6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b80611c7881613334565b15611ceb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e5061757361626c653a20706175736564000000000000000000000081525060200191505060405180910390fd5b611cf6848484613ce8565b50505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d2d826136ca565b9050919050565b6000600c60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff169050919050565b6000600560149054906101000a900460ff16905090565b611d8d33612b85565b611dff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b600e548163ffffffff1610611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614ebc6032913960400191505060405180910390fd5b600f548163ffffffff161015611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180614eee6031913960400191505060405180910390fd5b8063ffffffff16600e819055507fcffe07c9e7982b6c56cb569d21caedd78c8fbc68a0cbdc4d963c21eae6e8f91081604051808263ffffffff16815260200191505060405180910390a150565b6000611f18826136ca565b611f8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e000081525060200191505060405180910390fd5b6001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611fdb826006613d6890919063ffffffff16565b9050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61203433611fc5565b6120a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120ec573d6000803e3d6000fd5b50565b60006120fa82612d8a565b61216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4173736574207479706520646f6573206e6f742065786973740000000000000081525060200191505060405180910390fd5b600b60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900463ffffffff169050919050565b6121ac33611fc5565b61221e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612232816007613dc190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fff12d576e2fecf516eb406e6618d5e97bcc8046690863b984069b15ada11d61260405160405180910390a250565b612281336134f0565b6122d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f1f6026913960400191505060405180910390fd5b6122df81613334565b612351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6b656e206973206e6f74207061757365640000000000000000000000000081525060200191505060405180910390fd5b60006008600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807f0cfa9cc56bacd896c88effb6a4051b954fcaaf2de7ae98882e39f294ea65184360405160405180910390a250565b6000600f54905090565b6123c033611fc5565b612432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b600560149054906101000a900460ff16156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125f75780601f106125cc576101008083540402835291602001916125f7565b820191906000526020600020905b8154815290600101906020018083116125da57829003601f168201915b5050505050905090565b61260a33611fc5565b61267c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612690816009613dc190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6126df33611fc5565b612751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612765816006613dc190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d60405160405180910390a250565b6127b433611fc5565b612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b806013908051906020019061283c929190614b2f565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b8381101561289f578082015181840152602081019050612884565b50505050905090810190601f1680156128cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b6128e533611fc5565b612957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612a785750612a778273ffffffffffffffffffffffffffffffffffffffff16613e9c565b5b15612b7757601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663367605ca3384846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019350505050600060405180830381600087803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b505050505b612b818282613eaf565b5050565b6000612b9b826009613d6890919063ffffffff16565b9050919050565b612bab33611fc5565b612c1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612c3181600661395590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d60405160405180910390a250565b600560149054906101000a900460ff1615612cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b81612d0481613334565b15612d77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e5061757361626c653a20706175736564000000000000000000000081525060200191505060405180910390fd5b612d8385858585613ebe565b5050505050565b6000600d60008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900463ffffffff1663ffffffff16905090565b612de933611fc5565b612e5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b612e6f81600761395590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f2186c7d8e4b2d6a73790355b1a465872175798d2366146e638fc885d54460b8560405160405180910390a250565b6060612f6c612ec383613f46565b60138054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f595780601f10612f2e57610100808354040283529160200191612f59565b820191906000526020600020905b815481529060010190602001808311612f3c57829003601f168201915b50505050506140a890919063ffffffff16565b9050919050565b612f7c33612b85565b612fee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b60008263ffffffff16141561306b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f41737365742054797065206d757374206e6f742062652030000000000000000081525060200191505060405180910390fd5b600a60009054906101000a900463ffffffff1663ffffffff168163ffffffff16106130e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180614e0e6030913960400191505060405180910390fd5b6130ea82612d8a565b6131c1576001600d60008463ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061313c6001600f54613bd790919063ffffffff16565b600f81905550600e54600f5411156131bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f417373657420747970652063617020697320657863656564656400000000000081525060200191505060405180910390fd5b61329b565b6131ca826120ef565b63ffffffff168163ffffffff161061322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180614d746030913960400191505060405180910390fd5b61323682611d34565b63ffffffff168163ffffffff16101561329a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180614ddd6031913960400191505060405180910390fd5b5b80600b60008463ffffffff1663ffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055507f30525f07d1d2ff6b7c2b1817c13c37935c691304253dd353909b5c0381a9dc408282604051808363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390a15050565b60006008600083815260200190815260200160002060009054906101000a900460ff169050919050565b60008061336b8484614170565b9050600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134e557601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dccfc528585846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182151515158152602001935050505060206040518083038186803b1580156134a257600080fd5b505afa1580156134b6573d6000803e3d6000fd5b505050506040513d60208110156134cc57600080fd5b81019080805190602001909291905050509150506134ea565b809150505b92915050565b6000613506826007613d6890919063ffffffff16565b9050919050565b61351633611fc5565b613588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d757374206265206f70657261746f720000000000000000000000000000000081525060200191505060405180910390fd5b61359181614184565b50565b61359d336134f0565b6135f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f1f6026913960400191505060405180910390fd5b6135fb81613334565b1561366e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e20697320616c72656164792070617573656400000000000000000081525060200191505060405180910390fd5b60016008600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fc2d830ac158eec7b589dfadf012044c95b8646222991556ab4cd311e38bc77d160405160405180910390a250565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b613746338261422f565b61379b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526067815260200180614d0d6067913960800191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166137bb82611f0d565b73ffffffffffffffffffffffffffffffffffffffff1614613827576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e9b6021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f605f746f6020697320746865207a65726f20616464726573732e00000000000081525060200191505060405180910390fd5b6138d3816136ca565b613945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e000081525060200191505060405180910390fd5b6139508383836142c4565b505050565b61395f8282613d68565b6139d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f726f6c6520646f73656e2774206861766520746865206163636f756e7400000081525060200191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080821415613aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d6f64756c6f206279203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b818381613ab057fe5b06905092915050565b600080821415613b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6469766973696f6e20627920300000000000000000000000000000000000000081525060200191505060405180910390fd5b818381613b3a57fe5b04905092915050565b60008082840190508363ffffffff168163ffffffff161015613bcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6164646974696f6e206f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b600080828401905083811015613c55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6164646974696f6e206f766572666c6f7700000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b613c6833612b85565b613cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d757374206265206d696e74657200000000000000000000000000000000000081525060200191505060405180910390fd5b613ce482826144ab565b5050565b613d038383836040518060200160405280600081525061466f565b613d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526039815260200180614da46039913960400191505060405180910390fd5b613d638383836115c9565b505050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613dcb8282613d68565b15613e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f726f6c6520616c72656164792068617320746865206163636f756e740000000081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b613eba338383614858565b5050565b6000815114613f35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f64617461206973206e6f7420696d706c656d656e74656400000000000000000081525060200191505060405180910390fd5b613f40848484611beb565b50505050565b6060600080600090506000841415613f88577f300000000000000000000000000000000000000000000000000000000000000091508080600101915050613ffe565b60008490505b6000811115613ffc576101008360001c81613fa557fe5b0460001b92507f01000000000000000000000000000000000000000000000000000000000000006030600a8381613fd857fe5b06010260001b83179250600a8181613fec57fe5b0490508180600101925050613f8e565b505b6060816040519080825280601f01601f1916602001820160405280156140335781602001600182028038833980820191505090505b50905060008090505b8281101561409c5783816020811061405057fe5b1a60f81b82828151811061406057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061403c565b81945050505050919050565b606082826040516020018083805190602001908083835b602083106140e257805182526020820191506020810190506020830392506140bf565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b602083106141335780518252602082019150602081019050602083039250614110565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905092915050565b600061417c838361495a565b905092915050565b600061418e612535565b905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008061423b83611f0d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806142aa57508373ffffffffffffffffffffffffffffffffffffffff16614292846113b3565b73ffffffffffffffffffffffffffffffffffffffff16145b806142bb57506142ba818561335e565b5b91505092915050565b6142cd816149ee565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506143726001600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614aac90919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144086001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6144b4816136ca565b15614527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d696e7420746f6b656e20616c7265616479206578697374730000000000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506145cc6001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006146908473ffffffffffffffffffffffffffffffffffffffff16613e9c565b61469d5760019050614850565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561477857808201518184015260208101905061475d565b50505050905090810190601f1680156147a55780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156147c757600080fd5b505af11580156147db573d6000803e3d6000fd5b505050506040513d60208110156147f157600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a3505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614aa95760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600081831015614b24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f7375627472616374696f6e206f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614b7057805160ff1916838001178555614b9e565b82800160010185558215614b9e579182015b82811115614b9d578251825591602001919060010190614b82565b5b509050614bab9190614baf565b5090565b614bd191905b80821115614bcd576000816000905550600101614bb5565b5090565b90565b6000808263ffffffff161415614c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f6d6f64756c6f206279203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8163ffffffff168363ffffffff1681614c6757fe5b06905092915050565b6000808263ffffffff161415614cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6469766973696f6e20627920300000000000000000000000000000000000000081525060200191505060405180910390fd5b8163ffffffff168363ffffffff1681614d0357fe5b0490509291505056fe556e6c65737320606d73672e73656e64657260206973207468652063757272656e74206f776e65722c20616e20617574686f72697a6564206f70657261746f722c206f722074686520617070726f766564206164647265737320666f722074686973204e46542e4e657720756e697420636170206d757374206265206c657373207468616e2070726576696f757320756e697420636170605f746f60206973206120736d61727420636f6e747261637420616e64206f6e455243373231526563656976656420697320696e76616c69644e657720756e697420636170206d757374206265206d6f7265207468616e2063757272656e7420756e697420636f756e744e657720756e697420636170206d757374206265206c657373207468616e2061737365742074797065206f6666736574556e6c65737320606d73672e73656e64657260206973207468652063757272656e74204e4654206f776e65722c206f7220616e20617574686f72697a6564206f70657261746f72206f66207468652063757272656e74206f776e65722e605f66726f6d60206973206e6f74207468652063757272656e74206f776e65722e4e65772074797065206361702063616e6e6f74206265206c657373207468616e206578697374696e672074797065206361704e6577207479706520636170206d757374206265206d6f7265207468616e2063757272656e74207479706520636f756e744f6e6c7920746f6b656e207061757365722063616e2063616c6c2074686973206d6574686f64a265627a7a72315820ba2ee7403bc3ef745afefe5c6351f6fb712469b15b2177655d00f8b181f927b564736f6c63430005110032

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

000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c

-----Decoded View---------------
Arg [0] : _approvalProxy (address): 0xAa06e5c117dbe8bC52dBaa18AaF447eDA556B13c

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c


Deployed Bytecode Sourcemap

26618:1290:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5770:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5770:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5770:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17720:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17720:84:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17720:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11430:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11430:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11430:206:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10631:419;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10631:419:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21240:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21240:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26395:216;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26395:216:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22042:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22042:90:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19066:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19066:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19066:141:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16684:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16684:124:0;;;:::i;:::-;;23527:448;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23527:448:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23527:448:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26163:224;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26163:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26952:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26952:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19219:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19219:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19219:100:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23402:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23402:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23402:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16468:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16468:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21688:346;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21688:346:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21688:346:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;9279:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9279:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9279:199:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16046:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16046:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16046:112:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9164:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9164:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9164:107:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16816:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16816:108:0;;;:::i;:::-;;23208:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23208:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23208:186:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25586:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25586:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25586:147:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25110:219;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25110:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25110:219:0;;;;;;;;;;;;;;;;;:::i;:::-;;22140:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22140:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16554:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16554:122:0;;;:::i;:::-;;14784:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14784:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17812:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17812:88:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17812:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18925:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18925:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18925:133:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16166:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16166:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16166:139:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17526:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17526:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17526:186:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17526:186:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17526:186:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17526:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;17526:186:0;;;;;;;;;;;;;;;:::i;:::-;;27096:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27096:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27096:158:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27262:301;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27262:301:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27262:301:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18809:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18809:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18809:108:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16313:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16313:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16313:147:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25904:251;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25904:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25904:251:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25904:251:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25904:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25904:251:0;;;;;;;;;;;;;;;:::i;:::-;;22242:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22242:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22242:118:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21584:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21584:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25741:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25741:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25741:155:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17908:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17908:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17908:142:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17908:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22368:832;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22368:832:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22368:832:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25337:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25337:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25337:116:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27571:334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27571:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27571:334:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25461:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25461:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25461:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15922:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15922:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15922:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;24883:219;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24883:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24883:219:0;;;;;;;;;;;;;;;;;:::i;:::-;;5770:135;5840:4;5864:20;:33;5885:11;5864:33;;;;;;;;;;;;;;;;;;;;;;;;;;;5857:40;;5770:135;;;:::o;17720:84::-;17757:13;17790:6;17783:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17720:84;:::o;11430:206::-;11490:7;11518:16;11525:8;11518:6;:16::i;:::-;11510:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11604:14;:24;11619:8;11604:24;;;;;;;;;;;;;;;;;;;;;11597:31;;11430:206;;;:::o;10631:419::-;10711:13;10727:17;10735:8;10727:7;:17::i;:::-;10711:33;;10777:5;10763:19;;:10;:19;;;:58;;;;10786:35;10803:5;10810:10;10786:16;:35::i;:::-;10763:58;10755:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10976:9;10949:14;:24;10964:8;10949:24;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;11033:8;11022:9;11001:41;;11010:10;11001:41;;;;;;;;;;;;10631:419;;;:::o;21240:89::-;21284:7;21311:10;;21304:17;;21240:89;:::o;26395:216::-;15765:7;;;;;;;;;;;15764:8;15756:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26542:8;24663:23;24677:8;24663:13;:23::i;:::-;24662:24;24654:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26563:40;26582:5;26589:3;26594:8;26563:18;:40::i;:::-;15804:1;26395:216;;;:::o;22042:90::-;22085:7;22112:12;;22105:19;;22042:90;:::o;19066:141::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:23;19153:7;19138;:14;;:23;;;;:::i;:::-;19191:7;19177:22;;;;;;;;;;;;19066:141;:::o;16684:124::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15862:7;;;;;;;;;;;15854:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16759:5;16749:7;;:15;;;;;;;;;;;;;;;;;;16780:20;16789:10;16780:20;;;;;;;;;;;;;;;;;;;;;;16684:124::o;23527:448::-;18742:20;18751:10;18742:8;:20::i;:::-;18734:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23644:1;23611:29;23624:15;;;;;;;;;;;23611:29;;:8;:12;;:29;;;;:::i;:::-;:34;;23603:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23680:16;23706:29;23719:15;;;;;;;;;;;23706:29;;:8;:12;;:29;;;;:::i;:::-;23680:56;;23770:27;23795:1;23770:9;:20;23780:9;23770:20;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;;:27;;;;:::i;:::-;23747:9;:20;23757:9;23747:20;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;23821:17;23836:1;23821:10;;:14;;:17;;;;:::i;:::-;23808:10;:30;;;;23881:21;23892:9;23881:10;:21::i;:::-;23857:45;;:9;:20;23867:9;23857:20;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;23849:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23942:25;23953:3;23958:8;23942:10;:25::i;:::-;18792:1;23527:448;;:::o;26163:224::-;15765:7;;;;;;;;;;;15764:8;15756:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26314:8;24663:23;24677:8;24663:13;:23::i;:::-;24662:24;24654:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26335:44;26358:5;26365:3;26370:8;26335:22;:44::i;:::-;15804:1;26163:224;;;:::o;26952:35::-;;;;;;;;;;;;;:::o;19219:100::-;19272:4;19296:15;19303:7;19296:6;:15::i;:::-;19289:22;;19219:100;;;:::o;23402:117::-;23464:6;23490:9;:21;23500:10;23490:21;;;;;;;;;;;;;;;;;;;;;;;;;23483:28;;23402:117;;;:::o;16468:78::-;16507:4;16531:7;;;;;;;;;;;16524:14;;16468:78;:::o;21688:346::-;18742:20;18751:10;18742:8;:20::i;:::-;18734:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21781:12;;21767:11;:26;;;21759:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21882:14;;21867:11;:29;;;;21859:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21976:11;21961:26;;:12;:26;;;;22003:23;22014:11;22003:23;;;;;;;;;;;;;;;;;;;;21688:346;:::o;9279:199::-;9335:7;9363:16;9370:8;9363:6;:16::i;:::-;9355:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9449:11;:21;9461:8;9449:21;;;;;;;;;;;;;;;;;;;;;9442:28;;9279:199;;;:::o;16046:112::-;16104:4;16128:22;16142:7;16128:9;:13;;:22;;;;:::i;:::-;16121:29;;16046:112;;;:::o;9164:107::-;9220:7;9247:8;:16;9256:6;9247:16;;;;;;;;;;;;;;;;9240:23;;9164:107;;;:::o;16816:108::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16874:10;:19;;:42;16894:21;16874:42;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16874:42:0;16816:108::o;23208:186::-;23268:6;23295:24;23308:10;23295:12;:24::i;:::-;23287:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23367:7;:19;23375:10;23367:19;;;;;;;;;;;;;;;;;;;;;;;;;23360:26;;23208:186;;;:::o;25586:147::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25660:24;25676:7;25660:11;:15;;:24;;;;:::i;:::-;25717:7;25700:25;;;;;;;;;;;;25586:147;:::o;25110:219::-;24501:25;24515:10;24501:13;:25::i;:::-;24493:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25194:23;25208:8;25194:13;:23::i;:::-;25186:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25277:5;25252:12;:22;25265:8;25252:22;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25312:8;25298:23;;;;;;;;;;25110:219;:::o;22140:94::-;22185:7;22212:14;;22205:21;;22140:94;:::o;16554:122::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15765:7;;;;;;;;;;;15764:8;15756:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16630:4;16620:7;;:14;;;;;;;;;;;;;;;;;;16650:18;16657:10;16650:18;;;;;;;;;;;;;;;;;;;;;;16554:122::o;14784:79::-;14822:7;14849:6;;;;;;;;;;;14842:13;;14784:79;:::o;17812:88::-;17851:13;17884:8;17877:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17812:88;:::o;18925:133::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18994:20;19006:7;18994;:11;;:20;;;;:::i;:::-;19042:7;19030:20;;;;;;;;;;;;18925:133;:::o;16166:139::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16237:22;16251:7;16237:9;:13;;:22;;;;:::i;:::-;16289:7;16275:22;;;;;;;;;;;;16166:139;:::o;17526:186::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17636:15;17617:16;:34;;;;;;;;;;;;:::i;:::-;;17667:37;17688:15;17667:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17667:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:186;:::o;27096:158::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27200:4;27169:13;;:36;;;;;;;;;;;;;;;;;;27221:25;27241:4;27221:25;;;;;;;;;;;;;;;;;;;;;;27096:158;:::o;27262:301::-;27379:3;27345:38;;27353:13;;;;;;;;;;;27345:38;;;;:63;;;;;27387:21;:8;:19;;;:21::i;:::-;27345:63;27341:160;;;27425:13;;;;;;;;;;;:31;;;27457:10;27469:8;27479:9;27425:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27425:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27425:64:0;;;;27341:160;27511:44;27535:8;27545:9;27511:23;:44::i;:::-;27262:301;;:::o;18809:108::-;18865:4;18889:20;18901:7;18889;:11;;:20;;;;:::i;:::-;18882:27;;18809:108;;;:::o;16313:147::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16387:25;16404:7;16387:9;:16;;:25;;;;:::i;:::-;16444:7;16428:24;;;;;;;;;;;;16313:147;:::o;25904:251::-;15765:7;;;;;;;;;;;15764:8;15756:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26075:8;24663:23;24677:8;24663:13;:23::i;:::-;24662:24;24654:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26096:51;26119:5;26126:3;26131:8;26141:5;26096:22;:51::i;:::-;15804:1;25904:251;;;;:::o;22242:118::-;22304:4;22328:12;:24;22341:10;22328:24;;;;;;;;;;;;;;;;;;;;;;;;;22321:31;;22242:118;;;:::o;21584:96::-;21630:7;21657:15;;;;;;;;;;;21650:22;;;;21584:96;:::o;25741:155::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25818:27;25837:7;25818:11;:18;;:27;;;;:::i;:::-;25880:7;25861:27;;;;;;;;;;;;25741:155;:::o;17908:142::-;17965:13;17998:44;18022:19;:8;:17;:19::i;:::-;17998:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;17991:51;;17908:142;;;:::o;22368:832::-;18742:20;18751:10;18742:8;:20::i;:::-;18734:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22480:1;22466:10;:15;;;;22458:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22543:15;;;;;;;;;;;22529:29;;:11;:29;;;22521:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22629:24;22642:10;22629:12;:24::i;:::-;22624:472;;22697:4;22670:12;:24;22683:10;22670:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22733:21;22752:1;22733:14;;:18;;:21;;;;:::i;:::-;22716:14;:38;;;;22795:12;;22777:14;;:30;;22769:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22624:472;;;22893:22;22904:10;22893;:22::i;:::-;22879:36;;:11;:36;;;22871:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23006:24;23019:10;23006:12;:24::i;:::-;22991:39;;:11;:39;;;;22983:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22624:472;23130:11;23108:7;:19;23116:10;23108:19;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;23157:35;23168:10;23180:11;23157:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22368:832;;:::o;25337:116::-;25399:4;25423:12;:22;25436:8;25423:22;;;;;;;;;;;;;;;;;;;;;25416:29;;25337:116;;;:::o;27571:334::-;27652:4;27669:13;27685:40;27708:6;27716:8;27685:22;:40::i;:::-;27669:56;;27774:3;27740:38;;27748:13;;;;;;;;;;;27740:38;;;27736:136;;27802:13;;;;;;;;;;;:30;;;27833:6;27841:8;27851;27802:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27802:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27802:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27802:58:0;;;;;;;;;;;;;;;;27795:65;;;;;27736:136;27889:8;27882:15;;;27571:334;;;;;:::o;25461:117::-;25522:4;25546:24;25562:7;25546:11;:15;;:24;;;;:::i;:::-;25539:31;;25461:117;;;:::o;15922:116::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16001:29;16020:9;16001:18;:29::i;:::-;15922:116;:::o;24883:219::-;24501:25;24515:10;24501:13;:25::i;:::-;24493:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24966:23;24980:8;24966:13;:23::i;:::-;24965:24;24957:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25053:4;25028:12;:22;25041:8;25028:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25085:8;25073:21;;;;;;;;;;24883:219;:::o;13170:156::-;13227:4;13244:13;13260:11;:21;13272:8;13260:21;;;;;;;;;;;;;;;;;;;;;13244:37;;13316:1;13299:19;;:5;:19;;;;13292:26;;;13170:156;;;:::o;10016:607::-;10118:35;10132:10;10144:8;10118:13;:35::i;:::-;10110:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10342:5;10321:26;;:17;10329:8;10321:7;:17::i;:::-;:26;;;10313:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10436:1;10421:17;;:3;:17;;;;10413:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10505:16;10512:8;10505:6;:16::i;:::-;10497:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10584:31;10594:5;10601:3;10606:8;10584:9;:31::i;:::-;10016:607;;;:::o;2885:179::-;2965:18;2969:4;2975:7;2965:3;:18::i;:::-;2957:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3051:5;3028:4;:11;;:20;3040:7;3028:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2885:179;;:::o;7745:139::-;7803:7;7836:1;7831;:6;;7823:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7875:1;7871;:5;;;;;;7864:12;;7745:139;;;;:::o;7596:141::-;7654:7;7687:1;7682;:6;;7674:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7728:1;7724;:5;;;;;;7717:12;;7596:141;;;;:::o;6137:165::-;6193:6;6212:8;6227:1;6223;:5;6212:16;;6252:1;6247:6;;:1;:6;;;;6239:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6293:1;6286:8;;;6137:165;;;;:::o;7019:169::-;7077:7;7097:9;7113:1;7109;:5;7097:17;;7138:1;7133;:6;;7125:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7179:1;7172:8;;;7019:169;;;;:::o;19327:100::-;18742:20;18751:10;18742:8;:20::i;:::-;18734:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19401:18;19407:2;19411:7;19401:5;:18::i;:::-;19327:100;;:::o;9722:286::-;9828:48;9851:5;9858:3;9863:8;9828:48;;;;;;;;;;;;:22;:48::i;:::-;9820:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9966:34;9979:5;9986:3;9991:8;9966:12;:34::i;:::-;9722:286;;;:::o;3072:124::-;3144:4;3168;:11;;:20;3180:7;3168:20;;;;;;;;;;;;;;;;;;;;;;;;;3161:27;;3072:124;;;;:::o;2702:175::-;2780:18;2784:4;2790:7;2780:3;:18::i;:::-;2779:19;2771:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2865:4;2842;:11;;:20;2854:7;2842:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;2702:175;;:::o;785:174::-;845:4;862:12;916:7;904:20;896:28;;950:1;943:4;:8;936:15;;;785:174;;;:::o;11058:140::-;11138:52;11157:10;11169:9;11180;11138:18;:52::i;:::-;11058:140;;:::o;9486:228::-;9628:1;9612:5;:12;:17;9604:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9668:38;9685:5;9692:3;9697:8;9668:16;:38::i;:::-;9486:228;;;;:::o;7892:697::-;7944:13;7970:18;7999:11;8013:1;7999:15;;8034:1;8029;:6;8025:375;;;8052:16;;;8083:5;;;;;;;8025:375;;;8121:13;8137:1;8121:17;;8153:236;8168:1;8160:5;:9;8153:236;;;8234:6;8219:10;8211:19;;:30;;;;;;8203:39;;8190:52;;8305:13;8299:2;8293;8285:5;:10;;;;;;8284:17;8283:35;8275:44;;8261:58;;;;8347:2;8338:11;;;;;;;;;8368:5;;;;;;;8153:236;;;8025:375;;8412:16;8441:3;8431:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;8431:14:0;;;;8412:33;;8456:9;8487:1;8483:5;;8478:75;8494:3;8490:1;:7;8478:75;;;8528:10;8539:1;8528:13;;;;;;;;;;8519:3;8523:1;8519:6;;;;;;;;;;;:22;;;;;;;;;;;8499:3;;;;;;;8478:75;;;8577:3;8563:18;;;;;;7892:697;;;:::o;4055:148::-;4130:13;4187:2;4191;4170:24;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4170:24:0;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4170:24:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4170:24:0;;;4156:39;;4055:148;;;;:::o;11644:150::-;11726:4;11750:36;11768:6;11776:9;11750:17;:36::i;:::-;11743:43;;11644:150;;;;:::o;14992:190::-;15059:21;15083:7;:5;:7::i;:::-;15059:31;;15103:9;15094:6;;:18;;;;;;;;;;;;;;;;;;15164:9;15128:46;;15149:13;15128:46;;;;;;;;;;;;14992:190;;:::o;11968:250::-;12050:4;12066:13;12082:17;12090:8;12082:7;:17::i;:::-;12066:33;;12130:5;12118:17;;:8;:17;;;:54;;;;12164:8;12139:33;;:21;12151:8;12139:11;:21::i;:::-;:33;;;12118:54;:91;;;;12176:33;12193:5;12200:8;12176:16;:33::i;:::-;12118:91;12110:100;;;11968:250;;;;:::o;12226:299::-;12311:24;12326:8;12311:14;:24::i;:::-;12370:3;12346:11;:21;12358:8;12346:21;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;12402:22;12422:1;12402:8;:15;12411:5;12402:15;;;;;;;;;;;;;;;;:19;;:22;;;;:::i;:::-;12384:8;:15;12393:5;12384:15;;;;;;;;;;;;;;;:40;;;;12451:20;12469:1;12451:8;:13;12460:3;12451:13;;;;;;;;;;;;;;;;:17;;:20;;;;:::i;:::-;12435:8;:13;12444:3;12435:13;;;;;;;;;;;;;;;:36;;;;12508:8;12503:3;12487:30;;12496:5;12487:30;;;;;;;;;;;;12226:299;;;:::o;12535:265::-;12610:16;12617:8;12610:6;:16::i;:::-;12609:17;12601:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12691:3;12667:11;:21;12679:8;12667:21;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;12721:20;12739:1;12721:8;:13;12730:3;12721:13;;;;;;;;;;;;;;;;:17;;:20;;;;:::i;:::-;12705:8;:13;12714:3;12705:13;;;;;;;;;;;;;;;:36;;;;12783:8;12778:3;12757:35;;12774:1;12757:35;;;;;;;;;;;;12535:265;;:::o;13334:420::-;13512:4;13540:16;:3;:14;;;:16::i;:::-;13535:61;;13580:4;13573:11;;;;13535:61;13606:13;13643:3;13622:42;;;13665:10;13677:5;13684:8;13694:5;13622:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;13622:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13622:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13622:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13622:78:0;;;;;;;;;;;;;;;;13606:94;;8747:10;13729:16;;13719:26;;;:6;:26;;;;13711:35;;;13334:420;;;;;;;:::o;11206:216::-;11345:9;11305:18;:26;11324:6;11305:26;;;;;;;;;;;;;;;:37;11332:9;11305:37;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;11393:9;11370:44;;11385:6;11370:44;;;11404:9;11370:44;;;;;;;;;;;;;;;;;;;;;;11206:216;;;:::o;11806:154::-;11891:4;11915:18;:26;11934:6;11915:26;;;;;;;;;;;;;;;:37;11942:9;11915:37;;;;;;;;;;;;;;;;;;;;;;;;;11908:44;;11806:154;;;;:::o;13762:174::-;13862:1;13827:37;;:14;:23;13842:7;13827:23;;;;;;;;;;;;;;;;;;;;;:37;;;13823:106;;13915:1;13881:14;:23;13896:7;13881:23;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13823:106;13762:174;:::o;7196:148::-;7254:7;7287:1;7282;:6;;7274:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7335:1;7331;:5;7324:12;;7196:148;;;;:::o;26618:1290::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6849:136::-;6905:6;6937:1;6932;:6;;;;6924:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6976:1;6972:5;;:1;:5;;;;;;;;6965:12;;6849:136;;;;:::o;6703:138::-;6759:6;6791:1;6786;:6;;;;6778:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6832:1;6828:5;;:1;:5;;;;;;;;6821:12;;6703:138;;;;:::o

Swarm Source

bzzr://ba2ee7403bc3ef745afefe5c6351f6fb712469b15b2177655d00f8b181f927b5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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