Contract 0x379103AE932c7eed64913E53a0121A0495f30d36 1

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1eb7889652e1b7107f9573f78bbbfe528e892b4703a1846dc75cebbf8a9de0fdSet Approval For...136196002021-12-19 19:21:3438 days 21 hrs ago0x8d16c866e86057e471bae86dcc6251277e99dc41 IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000131235
0xe7c414e217aebcca4cd3e983b7cf06608d919aeeac1b4c23f10a5d03b52dc3a2Set Approval For...127678262021-11-19 3:21:0069 days 13 hrs ago0xa6c6a2e63c32e909f071fb5e879ce472f71ad114 IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000227235
0xd10919d4c370abc14d315bbe59cdea9c8f532cc199d3450a4d969808b690adc1Mint127553242021-11-18 16:31:3270 days 26 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0x34c91a83965983c742eff2f0c753c1fc37971bc45daf4f44e763d84ad4bee1fdMint127553192021-11-18 16:31:1770 days 26 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0x8f6af73434571b379ee340329f6b7491c1858d86cb1a796bb9176f568b98d4caMint127553162021-11-18 16:31:0770 days 27 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0x09aaeb52969c0c60896d627f630f24fbbb3e1b16e83543c00931ddd6933540c7Mint127553122021-11-18 16:30:5070 days 27 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0x483a22d94baaed6daecc7eae1f1e5af1d723228e187dc47d411257051722d937Mint127553082021-11-18 16:30:3470 days 27 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0x98bad47c025de41e6dda4c70aad1b57a2997457faf7947fdab264de6f2acecb2Mint127553042021-11-18 16:30:2170 days 27 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0xf83721dc255f15d686c6ec850e88cacac9eff232b5b6b3b0c88d505f8d6300e9Mint127553012021-11-18 16:30:1270 days 28 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0xad3c16a81cff44dcd9681f9e51c757a27643ef04c6c32fd916e244958ae87a17Mint127552962021-11-18 16:29:5670 days 28 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0xb57505f254a82ea2a6f41bf5f987694a604efea07806e62623ccd6a83b3485c1Mint127552922021-11-18 16:29:4470 days 28 mins agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0x541dae9f4608e953bfb60cc312682f761686557456e78e2ff5bc19ed5d5c4eabMint127532312021-11-18 14:40:1070 days 2 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263265
0xf248a48e39b7c645f4de5050ef833b9ea3d02847741adf052ec51ad76e365a62Set Approval For...126852222021-11-16 2:31:1072 days 14 hrs ago0xdbb3f882d6c83fe5ab4f334715ee638ac3683d9c IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000227235
0xebf0d857c0966d0523d5ea04956388f0eff2eee775de3cf6cccb123ba4c498a6Safe Transfer Fr...126851032021-11-16 2:25:1372 days 14 hrs ago0x084de16ff152c514bab5fc345319680afc11b2b0 IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.00022253
0x50b6034c2b902fe80f9df73287053350858c904febbc0bb22f45030a58f65449Set Approval For...126542512021-11-14 23:17:2973 days 17 hrs ago0xa6c6a2e63c32e909f071fb5e879ce472f71ad114 IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000077175
0x2164388dc93befe9eac9b2bd81390c7e1449c0f64be2d9cbcd7d175870cf9b43Mint124486682021-11-07 15:22:3081 days 1 hr agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263145
0x797159c1d3e6d4f81aa1b4ac2c9e50fc1dd143380697b49e5f3076129b3c4dd5Mint119905462021-10-22 10:36:5097 days 6 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
0x8d9a3b2bc4bb5d4d16765ef8cb542e5988cee2237a82e1a947e4fa2bbbcf2697Set Approval For...119830442021-10-22 4:01:0897 days 12 hrs ago0xa6c6a2e63c32e909f071fb5e879ce472f71ad114 IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000227235
0x16e287e97cdd9cc54e8e4230b1e19d1064baf1c710106d5d100b90c112c3eabbSet Approval For...119830232021-10-22 3:59:5497 days 12 hrs ago0xa6c6a2e63c32e909f071fb5e879ce472f71ad114 IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000077175
0x4236a8eaea0e20094f92a4e395d3b49eb5c83dfa278d02c3ef9ae936978f282cMint119750172021-10-21 21:13:0497 days 19 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
0x86aae3571c8c5092427ecae20ca77bc858e6e3ac5b44152241767f83c6ade27aMint119749792021-10-21 21:11:1097 days 19 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
0xd5f82c87050479ef010083dd2e4190725898b3a36dbc7f88d42997bbf3d89a88Mint119749612021-10-21 21:10:1697 days 19 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
0x73bc4c2763a3c22c79b20221d0b0ac7e3121fde728b5dd136181ee47696b1193Mint119749432021-10-21 21:09:2297 days 19 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
0x4cd5496c2c3b4e2bda65c3cdaad10a64364a026eea23c75ad61186ffcdaa96a3Mint119749232021-10-21 21:08:2297 days 19 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
0x66648ea9964e0fac97d09811c1d44890503dd7c62eda0ef11b660fb075911fd9Mint119749042021-10-21 21:07:2597 days 19 hrs agoSpore Engineering: Deployer IN  0x379103ae932c7eed64913e53a0121a0495f30d360 BNB0.000263205
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Spore1155NFT

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-04
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.3;

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

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

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

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

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

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

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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

library ERC165Checker {
    bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;

    function supportsERC165(address account) internal view returns (bool) {
        return _supportsERC165Interface(account, type(IERC165).interfaceId) &&
            !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
    }

    function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
        return supportsERC165(account) &&
            _supportsERC165Interface(account, interfaceId);
    }

    function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) {
        bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);

        if (supportsERC165(account)) {
            for (uint256 i = 0; i < interfaceIds.length; i++) {
                interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);
            }
        }

        return interfaceIdsSupported;
    }

    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
        if (!supportsERC165(account)) {
            return false;
        }

        for (uint256 i = 0; i < interfaceIds.length; i++) {
            if (!_supportsERC165Interface(account, interfaceIds[i])) {
                return false;
            }
        }

        return true;
    }

    function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
        bytes memory encodedParams = abi.encodeWithSelector(IERC165(account).supportsInterface.selector, interfaceId);
        (bool success, bytes memory result) = account.staticcall{ gas: 30000 }(encodedParams);
        if (result.length < 32) return false;
        return success && abi.decode(result, (bool));
    }
}

interface IAccessControlEnumerable {
    function getRoleMember(bytes32 role, uint256 index) external view returns (address);
    function getRoleMemberCount(bytes32 role) external view returns (uint256);
}

interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

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

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155Receiver is IERC165 {

    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

interface IERC1155MetadataURI is IERC1155 {
    function uri(uint256 id) external view returns (string memory);
}

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

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

abstract contract Pausable is Context {

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

    bool private _paused;

    constructor () {
        _paused = false;
    }

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

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

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

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

    mapping (address => mapping(address => bool)) private _operatorApprovals;

    string private _uri;
    string private _name;
    string private _symbol;

    constructor (string memory uri_, string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _setURI(uri_);
    }
    
    function name() public view virtual returns (string memory) {
        return _name;
    }

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

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155).interfaceId
            || interfaceId == type(IERC1155MetadataURI).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        _balances[id][from] = fromBalance - amount;
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            _balances[id][from] = fromBalance - amount;
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    function _burn(address account, uint256 id, uint256 amount) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        _balances[id][account] = accountBalance - amount;

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        internal
        virtual
    { }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

abstract contract ERC1155Burnable is ERC1155 {
    function burn(address account, uint256 id, uint256 value) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

abstract contract ERC1155Pausable is ERC1155, Pausable {

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        internal
        virtual
        override
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        require(!paused(), "ERC1155Pausable: token transfer while paused");
    }
}

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

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

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

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }
    
    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

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

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

abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (bytes32 => EnumerableSet.AddressSet) private _roleMembers;

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControlEnumerable).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function getRoleMember(bytes32 role, uint256 index) public view override returns (address) {
        return _roleMembers[role].at(index);
    }

    function getRoleMemberCount(bytes32 role) public view override returns (uint256) {
        return _roleMembers[role].length();
    }

    function grantRole(bytes32 role, address account) public virtual override {
        super.grantRole(role, account);
        _roleMembers[role].add(account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        super.revokeRole(role, account);
        _roleMembers[role].remove(account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        super.renounceRole(role, account);
        _roleMembers[role].remove(account);
    }

    function _setupRole(bytes32 role, address account) internal virtual override {
        super._setupRole(role, account);
        _roleMembers[role].add(account);
    }
}

contract Spore1155NFT is Context, AccessControlEnumerable, ERC1155Burnable, ERC1155Pausable {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
    bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");

    mapping (uint256 => bool) public nonTransferableTokens;
    
    constructor() ERC1155("https://nft.spore.engineering/erc1155_config_files/{id}.json", "Spore NFT Collectives", "nftSPORE") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());

        _setupRole(MINTER_ROLE, _msgSender());
        _setupRole(BURNER_ROLE, _msgSender());
        _setupRole(PAUSER_ROLE, _msgSender());
    }
    
    function setURI(string memory newuri) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "needs to be admin");
        
        _setURI(newuri);
    }
    
    function addNonTransferableTokens(uint256[] memory ids) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "needs to be admin");
        
        for (uint i = 0; i < ids.length; i++) {
            nonTransferableTokens[ids[i]] = true;
        }
    }
    
    function removeNonTransferableTokens(uint256[] memory ids) public {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "needs to be admin");
        
        for (uint i = 0; i < ids.length; i++) {
            nonTransferableTokens[ids[i]] = false;
        }
    }

    function mint(address to, uint256 id, uint256 amount, bytes memory data) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");

        _mint(to, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");

        _mintBatch(to, ids, amounts, data);
    }
    
    function burn(address account, uint256 id, uint256 amount) public override {
        require(hasRole(BURNER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have burner role to burn");

        _burn(account, id, amount);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public override {
        require(hasRole(BURNER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have minter role to mint");

        _burnBatch(account, ids, amounts);
    }

    function pause() public virtual {
        require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to pause");
        _pause();
    }

    function unpause() public virtual {
        require(hasRole(PAUSER_ROLE, _msgSender()), "ERC1155PresetMinterPauser: must have pauser role to unpause");
        _unpause();
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControlEnumerable, ERC1155) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)  internal virtual override(ERC1155, ERC1155Pausable) {
        
        for (uint i = 0; i < ids.length; i++) {
            if(!hasRole(MINTER_ROLE, _msgSender())) {
                require(nonTransferableTokens[ids[i]] == false, "some of the tokens on your batch are restricted for transfer");
            }
        }
        
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BURNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"addNonTransferableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonTransferableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"removeNonTransferableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060600160405280603c8152602001620059c6603c91396040518060400160405280601581526020017f53706f7265204e465420436f6c6c6563746976657300000000000000000000008152506040518060400160405280600881526020017f6e667453504f52450000000000000000000000000000000000000000000000008152508160059080519060200190620000b092919062000498565b508060069080519060200190620000c992919062000498565b50620000db83620001e660201b60201c565b5050506000600760006101000a81548160ff0219169083151502179055506200011d6000801b620001116200020260201b60201c565b6200020a60201b60201c565b6200015e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620001526200020260201b60201c565b6200020a60201b60201c565b6200019f7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848620001936200020260201b60201c565b6200020a60201b60201c565b620001e07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a620001d46200020260201b60201c565b6200020a60201b60201c565b620005ad565b8060049080519060200190620001fe92919062000498565b5050565b600033905090565b6200022182826200025260201b62001ad11760201c565b6200024d81600160008581526020019081526020016000206200026860201b62001adf1790919060201c565b505050565b620002648282620002a060201b60201c565b5050565b600062000298836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200039160201b60201c565b905092915050565b620002b282826200040b60201b60201c565b6200038d57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003326200020260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003a583836200047560201b60201c565b6200040057826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000405565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054620004a69062000548565b90600052602060002090601f016020900481019282620004ca576000855562000516565b82601f10620004e557805160ff191683800117855562000516565b8280016001018555821562000516579182015b8281111562000515578251825591602001919060010190620004f8565b5b50905062000525919062000529565b5090565b5b80821115620005445760008160009055506001016200052a565b5090565b600060028204905060018216806200056157607f821691505b602082108114156200057857620005776200057e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61540980620005bd6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c806376f7a2521161010f578063ca15c873116100a2578063e985e9c511610071578063e985e9c5146105a2578063f242432a146105d2578063f2df7f5d146105ee578063f5298aca1461060a576101ef565b8063ca15c8731461051a578063d53913931461054a578063d547741f14610568578063e63ab1e914610584576101ef565b806395d89b41116100de57806395d89b4114610492578063a217fddf146104b0578063a22cb465146104ce578063c7c67e81146104ea576101ef565b806376f7a2521461040c5780638456cb59146104285780639010d07c1461043257806391d1485414610462576101ef565b80632eb2c2d6116101875780634e1273f4116101565780634e1273f4146103865780635c975abb146103b65780636b20c454146103d4578063731133e9146103f0576101ef565b80632eb2c2d6146103285780632f2ff15d1461034457806336568abe146103605780633f4ba83a1461037c576101ef565b80630e89341c116101c35780630e89341c1461028e5780631f7fdffa146102be578063248a9ca3146102da578063282c51f31461030a576101ef565b8062fdd58e146101f457806301ffc9a71461022457806302fe53051461025457806306fdde0314610270575b600080fd5b61020e60048036038101906102099190613a40565b610626565b60405161021b91906146df565b60405180910390f35b61023e60048036038101906102399190613c94565b6106f0565b60405161024b9190614347565b60405180910390f35b61026e60048036038101906102699190613ce6565b610702565b005b610278610761565b604051610285919061437d565b60405180910390f35b6102a860048036038101906102a39190613d27565b6107f3565b6040516102b5919061437d565b60405180910390f35b6102d860048036038101906102d39190613959565b610887565b005b6102f460048036038101906102ef9190613bf3565b610909565b6040516103019190614362565b60405180910390f35b610312610928565b60405161031f9190614362565b60405180910390f35b610342600480360381019061033d919061378c565b61094c565b005b61035e60048036038101906103599190613c1c565b610d45565b005b61037a60048036038101906103759190613c1c565b610d79565b005b610384610dad565b005b6103a0600480360381019061039b9190613b46565b610e27565b6040516103ad91906142ee565b60405180910390f35b6103be610fd8565b6040516103cb9190614347565b60405180910390f35b6103ee60048036038101906103e991906138da565b610fef565b005b61040a60048036038101906104059190613acb565b61106f565b005b61042660048036038101906104219190613bb2565b6110f1565b005b6104306111d3565b005b61044c60048036038101906104479190613c58565b61124d565b6040516104599190614211565b60405180910390f35b61047c60048036038101906104779190613c1c565b61127c565b6040516104899190614347565b60405180910390f35b61049a6112e6565b6040516104a7919061437d565b60405180910390f35b6104b8611378565b6040516104c59190614362565b60405180910390f35b6104e860048036038101906104e39190613a04565b61137f565b005b61050460048036038101906104ff9190613d27565b611500565b6040516105119190614347565b60405180910390f35b610534600480360381019061052f9190613bf3565b611520565b60405161054191906146df565b60405180910390f35b610552611544565b60405161055f9190614362565b60405180910390f35b610582600480360381019061057d9190613c1c565b611568565b005b61058c61159c565b6040516105999190614362565b60405180910390f35b6105bc60048036038101906105b79190613750565b6115c0565b6040516105c99190614347565b60405180910390f35b6105ec60048036038101906105e7919061384b565b611654565b005b61060860048036038101906106039190613bb2565b61196f565b005b610624600480360381019061061f9190613a7c565b611a51565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068e9061443f565b60405180910390fd5b6002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006106fb82611b0f565b9050919050565b6107166000801b610711611bf1565b61127c565b610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074c906144bf565b60405180910390fd5b61075e81611bf9565b50565b606060058054610770906149bd565b80601f016020809104026020016040519081016040528092919081815260200182805461079c906149bd565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b606060048054610802906149bd565b80601f016020809104026020016040519081016040528092919081815260200182805461082e906149bd565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b50505050509050919050565b6108b87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108b3611bf1565b61127c565b6108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee9061459f565b60405180910390fd5b61090384848484611c13565b50505050565b6000806000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b8151835114610990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109879061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f79061453f565b60405180910390fd5b610a08611bf1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a4e5750610a4d85610a48611bf1565b6115c0565b5b610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a849061455f565b60405180910390fd5b6000610a97611bf1565b9050610aa7818787878787611e7e565b60005b8451811015610cb0576000858281518110610aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110610b33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006002600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906145bf565b60405180910390fd5b8181610be191906148c9565b6002600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c959190614873565b9250508190555050505080610ca990614a20565b9050610aaa565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d27929190614310565b60405180910390a4610d3d818787878787611f91565b505050505050565b610d4f8282612178565b610d748160016000858152602001908152602001600020611adf90919063ffffffff16565b505050565b610d8382826121de565b610da8816001600085815260200190815260200160002061226190919063ffffffff16565b505050565b610dde7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610dd9611bf1565b61127c565b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906145df565b60405180910390fd5b610e25612291565b565b60608151835114610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e649061465f565b60405180910390fd5b6000835167ffffffffffffffff811115610eb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610ede5781602001602082028036833780820191505090505b50905060005b8451811015610fcd57610f77858281518110610f29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610f6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610626565b828281518110610fb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610fc690614a20565b9050610ee4565b508091505092915050565b6000600760009054906101000a900460ff16905090565b6110207f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861101b611bf1565b61127c565b61105f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110569061459f565b60405180910390fd5b61106a838383612333565b505050565b6110a07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661109b611bf1565b61127c565b6110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d69061459f565b60405180910390fd5b6110eb8484848461263b565b50505050565b6111056000801b611100611bf1565b61127c565b611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b906144bf565b60405180910390fd5b60005b81518110156111cf5760006008600084848151811061118f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c790614a20565b915050611147565b5050565b6112047f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111ff611bf1565b61127c565b611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a9061461f565b60405180910390fd5b61124b6127d2565b565b6000611274826001600086815260200190815260200160002061287590919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600680546112f5906149bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611321906149bd565b801561136e5780601f106113435761010080835404028352916020019161136e565b820191906000526020600020905b81548152906001019060200180831161135157829003601f168201915b5050505050905090565b6000801b81565b8173ffffffffffffffffffffffffffffffffffffffff1661139e611bf1565b73ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec9061463f565b60405180910390fd5b8060036000611402611bf1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114af611bf1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114f49190614347565b60405180910390a35050565b60086020528060005260406000206000915054906101000a900460ff1681565b600061153d6001600084815260200190815260200160002061288f565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61157282826128a4565b611597816001600085815260200190815260200160002061226190919063ffffffff16565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061453f565b60405180910390fd5b6116cc611bf1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061171257506117118561170c611bf1565b6115c0565b5b611751576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117489061449f565b60405180910390fd5b600061175b611bf1565b905061177b81878761176c8861290a565b6117758861290a565b87611e7e565b60006002600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906145bf565b60405180910390fd5b838161181f91906148c9565b6002600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836002600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d39190614873565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516119509291906146fa565b60405180910390a46119668288888888886129d0565b50505050505050565b6119836000801b61197e611bf1565b61127c565b6119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b9906144bf565b60405180910390fd5b60005b8151811015611a4d57600160086000848481518110611a0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a4590614a20565b9150506119c5565b5050565b611a827f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848611a7d611bf1565b61127c565b611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061451f565b60405180910390fd5b611acc838383612bb7565b505050565b611adb8282612ddf565b5050565b6000611b07836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ebf565b905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bda57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bea5750611be982612f2f565b5b9050919050565b600033905090565b8060049080519060200190611c0f929190613433565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a9061469f565b60405180910390fd5b8151835114611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe9061467f565b60405180910390fd5b6000611cd1611bf1565b9050611ce281600087878787611e7e565b60005b8451811015611de857838181518110611d27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160026000878481518110611d6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dce9190614873565b925050819055508080611de090614a20565b915050611ce5565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e60929190614310565b60405180910390a4611e7781600087878787611f91565b5050505050565b60005b8351811015611f7a57611ebb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6611eb6611bf1565b61127c565b611f67576000151560086000868481518110611f00577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff16151514611f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5d906145ff565b60405180910390fd5b5b8080611f7290614a20565b915050611e81565b50611f89868686868686612fa9565b505050505050565b611fb08473ffffffffffffffffffffffffffffffffffffffff16613007565b15612170578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ff695949392919061422c565b602060405180830381600087803b15801561201057600080fd5b505af192505050801561204157506040513d601f19601f8201168201806040525081019061203e9190613cbd565b60015b6120e75761204d614af6565b806308c379a014156120aa57506120626152ca565b8061206d57506120ac565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1919061437d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de9061439f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461216e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612165906143df565b60405180910390fd5b505b505050505050565b61219161218483610909565b61218c611bf1565b61127c565b6121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c7906143ff565b60405180910390fd5b6121da8282612ddf565b5050565b6121e6611bf1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906146bf565b60405180910390fd5b61225d828261301a565b5050565b6000612289836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6130fb565b905092915050565b612299610fd8565b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf9061441f565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61231c611bf1565b6040516123299190614211565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a9061457f565b60405180910390fd5b80518251146123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de9061467f565b60405180910390fd5b60006123f1611bf1565b905061241181856000868660405180602001604052806000815250611e7e565b60005b83518110156125b5576000848281518110612458577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061249d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006002600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061445f565b60405180910390fd5b818161254b91906148c9565b6002600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806125ad90614a20565b915050612414565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161262d929190614310565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061469f565b60405180910390fd5b60006126b5611bf1565b90506126d6816000876126c78861290a565b6126d08861290a565b87611e7e565b826002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127369190614873565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127b49291906146fa565b60405180910390a46127cb816000878787876129d0565b5050505050565b6127da610fd8565b1561281a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612811906144ff565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861285e611bf1565b60405161286b9190614211565b60405180910390a1565b60006128848360000183613279565b60001c905092915050565b600061289d82600001613313565b9050919050565b6128bd6128b083610909565b6128b8611bf1565b61127c565b6128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906144df565b60405180910390fd5b612906828261301a565b5050565b60606000600167ffffffffffffffff81111561294f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561297d5781602001602082028036833780820191505090505b50905082816000815181106129bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6129ef8473ffffffffffffffffffffffffffffffffffffffff16613007565b15612baf578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612a35959493929190614294565b602060405180830381600087803b158015612a4f57600080fd5b505af1925050508015612a8057506040513d601f19601f82011682018060405250810190612a7d9190613cbd565b60015b612b2657612a8c614af6565b806308c379a01415612ae95750612aa16152ca565b80612aac5750612aeb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae0919061437d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d9061439f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba4906143df565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e9061457f565b60405180910390fd5b6000612c31611bf1565b9050612c6181856000612c438761290a565b612c4c8761290a565b60405180602001604052806000815250611e7e565b60006002600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061445f565b60405180910390fd5b8281612d0591906148c9565b6002600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612dd09291906146fa565b60405180910390a45050505050565b612de9828261127c565b612ebb57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e60611bf1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000612ecb8383613324565b612f24578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612f29565b600090505b92915050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fa25750612fa182613347565b5b9050919050565b612fb78686868686866133c1565b612fbf610fd8565b15612fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff69061447f565b60405180910390fd5b505050505050565b600080823b905060008111915050919050565b613024828261127c565b156130f757600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061309c611bf1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808360010160008481526020019081526020016000205490506000811461326d57600060018261312d91906148c9565b905060006001866000018054905061314591906148c9565b90506000866000018281548110613185577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106131cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480613231577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613273565b60009150505b92915050565b6000818360000180549050116132c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bb906143bf565b60405180910390fd5b826000018281548110613300577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806133ba57506133b9826133c9565b5b9050919050565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b82805461343f906149bd565b90600052602060002090601f01602090048101928261346157600085556134a8565b82601f1061347a57805160ff19168380011785556134a8565b828001600101855582156134a8579182015b828111156134a757825182559160200191906001019061348c565b5b5090506134b591906134b9565b5090565b5b808211156134d25760008160009055506001016134ba565b5090565b60006134e96134e484614748565b614723565b9050808382526020820190508285602086028201111561350857600080fd5b60005b85811015613538578161351e888261362a565b84526020840193506020830192505060018101905061350b565b5050509392505050565b600061355561355084614774565b614723565b9050808382526020820190508285602086028201111561357457600080fd5b60005b858110156135a4578161358a888261373b565b845260208401935060208301925050600181019050613577565b5050509392505050565b60006135c16135bc846147a0565b614723565b9050828152602081018484840111156135d957600080fd5b6135e484828561497b565b509392505050565b60006135ff6135fa846147d1565b614723565b90508281526020810184848401111561361757600080fd5b61362284828561497b565b509392505050565b60008135905061363981615360565b92915050565b600082601f83011261365057600080fd5b81356136608482602086016134d6565b91505092915050565b600082601f83011261367a57600080fd5b813561368a848260208601613542565b91505092915050565b6000813590506136a281615377565b92915050565b6000813590506136b78161538e565b92915050565b6000813590506136cc816153a5565b92915050565b6000815190506136e1816153a5565b92915050565b600082601f8301126136f857600080fd5b81356137088482602086016135ae565b91505092915050565b600082601f83011261372257600080fd5b81356137328482602086016135ec565b91505092915050565b60008135905061374a816153bc565b92915050565b6000806040838503121561376357600080fd5b60006137718582860161362a565b92505060206137828582860161362a565b9150509250929050565b600080600080600060a086880312156137a457600080fd5b60006137b28882890161362a565b95505060206137c38882890161362a565b945050604086013567ffffffffffffffff8111156137e057600080fd5b6137ec88828901613669565b935050606086013567ffffffffffffffff81111561380957600080fd5b61381588828901613669565b925050608086013567ffffffffffffffff81111561383257600080fd5b61383e888289016136e7565b9150509295509295909350565b600080600080600060a0868803121561386357600080fd5b60006138718882890161362a565b95505060206138828882890161362a565b94505060406138938882890161373b565b93505060606138a48882890161373b565b925050608086013567ffffffffffffffff8111156138c157600080fd5b6138cd888289016136e7565b9150509295509295909350565b6000806000606084860312156138ef57600080fd5b60006138fd8682870161362a565b935050602084013567ffffffffffffffff81111561391a57600080fd5b61392686828701613669565b925050604084013567ffffffffffffffff81111561394357600080fd5b61394f86828701613669565b9150509250925092565b6000806000806080858703121561396f57600080fd5b600061397d8782880161362a565b945050602085013567ffffffffffffffff81111561399a57600080fd5b6139a687828801613669565b935050604085013567ffffffffffffffff8111156139c357600080fd5b6139cf87828801613669565b925050606085013567ffffffffffffffff8111156139ec57600080fd5b6139f8878288016136e7565b91505092959194509250565b60008060408385031215613a1757600080fd5b6000613a258582860161362a565b9250506020613a3685828601613693565b9150509250929050565b60008060408385031215613a5357600080fd5b6000613a618582860161362a565b9250506020613a728582860161373b565b9150509250929050565b600080600060608486031215613a9157600080fd5b6000613a9f8682870161362a565b9350506020613ab08682870161373b565b9250506040613ac18682870161373b565b9150509250925092565b60008060008060808587031215613ae157600080fd5b6000613aef8782880161362a565b9450506020613b008782880161373b565b9350506040613b118782880161373b565b925050606085013567ffffffffffffffff811115613b2e57600080fd5b613b3a878288016136e7565b91505092959194509250565b60008060408385031215613b5957600080fd5b600083013567ffffffffffffffff811115613b7357600080fd5b613b7f8582860161363f565b925050602083013567ffffffffffffffff811115613b9c57600080fd5b613ba885828601613669565b9150509250929050565b600060208284031215613bc457600080fd5b600082013567ffffffffffffffff811115613bde57600080fd5b613bea84828501613669565b91505092915050565b600060208284031215613c0557600080fd5b6000613c13848285016136a8565b91505092915050565b60008060408385031215613c2f57600080fd5b6000613c3d858286016136a8565b9250506020613c4e8582860161362a565b9150509250929050565b60008060408385031215613c6b57600080fd5b6000613c79858286016136a8565b9250506020613c8a8582860161373b565b9150509250929050565b600060208284031215613ca657600080fd5b6000613cb4848285016136bd565b91505092915050565b600060208284031215613ccf57600080fd5b6000613cdd848285016136d2565b91505092915050565b600060208284031215613cf857600080fd5b600082013567ffffffffffffffff811115613d1257600080fd5b613d1e84828501613711565b91505092915050565b600060208284031215613d3957600080fd5b6000613d478482850161373b565b91505092915050565b6000613d5c83836141f3565b60208301905092915050565b613d71816148fd565b82525050565b6000613d8282614812565b613d8c8185614840565b9350613d9783614802565b8060005b83811015613dc8578151613daf8882613d50565b9750613dba83614833565b925050600181019050613d9b565b5085935050505092915050565b613dde8161490f565b82525050565b613ded8161491b565b82525050565b6000613dfe8261481d565b613e088185614851565b9350613e1881856020860161498a565b613e2181614b18565b840191505092915050565b6000613e3782614828565b613e418185614862565b9350613e5181856020860161498a565b613e5a81614b18565b840191505092915050565b6000613e72603483614862565b9150613e7d82614b36565b604082019050919050565b6000613e95602283614862565b9150613ea082614b85565b604082019050919050565b6000613eb8602883614862565b9150613ec382614bd4565b604082019050919050565b6000613edb602f83614862565b9150613ee682614c23565b604082019050919050565b6000613efe601483614862565b9150613f0982614c72565b602082019050919050565b6000613f21602b83614862565b9150613f2c82614c9b565b604082019050919050565b6000613f44602483614862565b9150613f4f82614cea565b604082019050919050565b6000613f67602c83614862565b9150613f7282614d39565b604082019050919050565b6000613f8a602983614862565b9150613f9582614d88565b604082019050919050565b6000613fad601183614862565b9150613fb882614dd7565b602082019050919050565b6000613fd0603083614862565b9150613fdb82614e00565b604082019050919050565b6000613ff3601083614862565b9150613ffe82614e4f565b602082019050919050565b6000614016603883614862565b915061402182614e78565b604082019050919050565b6000614039602583614862565b915061404482614ec7565b604082019050919050565b600061405c603283614862565b915061406782614f16565b604082019050919050565b600061407f602383614862565b915061408a82614f65565b604082019050919050565b60006140a2603883614862565b91506140ad82614fb4565b604082019050919050565b60006140c5602a83614862565b91506140d082615003565b604082019050919050565b60006140e8603b83614862565b91506140f382615052565b604082019050919050565b600061410b603c83614862565b9150614116826150a1565b604082019050919050565b600061412e603983614862565b9150614139826150f0565b604082019050919050565b6000614151602983614862565b915061415c8261513f565b604082019050919050565b6000614174602983614862565b915061417f8261518e565b604082019050919050565b6000614197602883614862565b91506141a2826151dd565b604082019050919050565b60006141ba602183614862565b91506141c58261522c565b604082019050919050565b60006141dd602f83614862565b91506141e88261527b565b604082019050919050565b6141fc81614971565b82525050565b61420b81614971565b82525050565b60006020820190506142266000830184613d68565b92915050565b600060a0820190506142416000830188613d68565b61424e6020830187613d68565b81810360408301526142608186613d77565b905081810360608301526142748185613d77565b905081810360808301526142888184613df3565b90509695505050505050565b600060a0820190506142a96000830188613d68565b6142b66020830187613d68565b6142c36040830186614202565b6142d06060830185614202565b81810360808301526142e28184613df3565b90509695505050505050565b600060208201905081810360008301526143088184613d77565b905092915050565b6000604082019050818103600083015261432a8185613d77565b9050818103602083015261433e8184613d77565b90509392505050565b600060208201905061435c6000830184613dd5565b92915050565b60006020820190506143776000830184613de4565b92915050565b600060208201905081810360008301526143978184613e2c565b905092915050565b600060208201905081810360008301526143b881613e65565b9050919050565b600060208201905081810360008301526143d881613e88565b9050919050565b600060208201905081810360008301526143f881613eab565b9050919050565b6000602082019050818103600083015261441881613ece565b9050919050565b6000602082019050818103600083015261443881613ef1565b9050919050565b6000602082019050818103600083015261445881613f14565b9050919050565b6000602082019050818103600083015261447881613f37565b9050919050565b6000602082019050818103600083015261449881613f5a565b9050919050565b600060208201905081810360008301526144b881613f7d565b9050919050565b600060208201905081810360008301526144d881613fa0565b9050919050565b600060208201905081810360008301526144f881613fc3565b9050919050565b6000602082019050818103600083015261451881613fe6565b9050919050565b6000602082019050818103600083015261453881614009565b9050919050565b600060208201905081810360008301526145588161402c565b9050919050565b600060208201905081810360008301526145788161404f565b9050919050565b6000602082019050818103600083015261459881614072565b9050919050565b600060208201905081810360008301526145b881614095565b9050919050565b600060208201905081810360008301526145d8816140b8565b9050919050565b600060208201905081810360008301526145f8816140db565b9050919050565b60006020820190508181036000830152614618816140fe565b9050919050565b6000602082019050818103600083015261463881614121565b9050919050565b6000602082019050818103600083015261465881614144565b9050919050565b6000602082019050818103600083015261467881614167565b9050919050565b600060208201905081810360008301526146988161418a565b9050919050565b600060208201905081810360008301526146b8816141ad565b9050919050565b600060208201905081810360008301526146d8816141d0565b9050919050565b60006020820190506146f46000830184614202565b92915050565b600060408201905061470f6000830185614202565b61471c6020830184614202565b9392505050565b600061472d61473e565b905061473982826149ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561476357614762614ac7565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561478f5761478e614ac7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147bb576147ba614ac7565b5b6147c482614b18565b9050602081019050919050565b600067ffffffffffffffff8211156147ec576147eb614ac7565b5b6147f582614b18565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061487e82614971565b915061488983614971565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148be576148bd614a69565b5b828201905092915050565b60006148d482614971565b91506148df83614971565b9250828210156148f2576148f1614a69565b5b828203905092915050565b600061490882614951565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149a857808201518184015260208101905061498d565b838111156149b7576000848401525b50505050565b600060028204905060018216806149d557607f821691505b602082108114156149e9576149e8614a98565b5b50919050565b6149f882614b18565b810181811067ffffffffffffffff82111715614a1757614a16614ac7565b5b80604052505050565b6000614a2b82614971565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5e57614a5d614a69565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614b155760046000803e614b12600051614b29565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135355061757361626c653a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f6e6565647320746f2062652061646d696e000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f68617665206275726e657220726f6c6520746f206275726e0000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f686176652070617573657220726f6c6520746f20756e70617573650000000000602082015250565b7f736f6d65206f662074686520746f6b656e73206f6e20796f757220626174636860008201527f20617265207265737472696374656420666f72207472616e7366657200000000602082015250565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f686176652070617573657220726f6c6520746f20706175736500000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600060443d10156152da5761535d565b6152e261473e565b60043d036004823e80513d602482011167ffffffffffffffff8211171561530a57505061535d565b808201805167ffffffffffffffff811115615328575050505061535d565b80602083010160043d03850181111561534557505050505061535d565b615354826020018501866149ef565b82955050505050505b90565b615369816148fd565b811461537457600080fd5b50565b6153808161490f565b811461538b57600080fd5b50565b6153978161491b565b81146153a257600080fd5b50565b6153ae81614925565b81146153b957600080fd5b50565b6153c581614971565b81146153d057600080fd5b5056fea2646970667358221220ef5cf050b35fa6fd936214808ec43d7ca15bea65ac1ed86d1affef4760cce77d64736f6c6343000803003368747470733a2f2f6e66742e73706f72652e656e67696e656572696e672f657263313135355f636f6e6669675f66696c65732f7b69647d2e6a736f6e

Deployed ByteCode Sourcemap

29026:3673:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15405:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31942:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29745:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14785:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15292:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30758:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25922:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29194:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17688:1239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28317:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28668:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31754:180;;;:::i;:::-;;15644:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13506:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31296:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30500:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30214:278;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31572:174;;;:::i;:::-;;28022:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25775:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14884:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16201:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29334:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28175:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29125:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28490:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29263:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16520:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16696:984;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29928:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31052:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15405:231;15491:7;15538:1;15519:21;;:7;:21;;;;15511:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;15606:9;:13;15616:2;15606:13;;;;;;;;;;;:22;15620:7;15606:22;;;;;;;;;;;;;;;;15599:29;;15405:231;;;;:::o;31942:187::-;32061:4;32085:36;32109:11;32085:23;:36::i;:::-;32078:43;;31942:187;;;:::o;29745:171::-;29809:41;25229:4;29817:18;;29837:12;:10;:12::i;:::-;29809:7;:41::i;:::-;29801:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29893:15;29901:6;29893:7;:15::i;:::-;29745:171;:::o;14785:91::-;14830:13;14863:5;14856:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14785:91;:::o;15292:105::-;15352:13;15385:4;15378:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15292:105;;;:::o;30758:282::-;30890:34;29163:24;30911:12;:10;:12::i;:::-;30890:7;:34::i;:::-;30882:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30998:34;31009:2;31013:3;31018:7;31027:4;30998:10;:34::i;:::-;30758:282;;;;:::o;25922:123::-;25988:7;26015:6;:12;26022:4;26015:12;;;;;;;;;;;:22;;;26008:29;;25922:123;;;:::o;29194:62::-;29232:24;29194:62;:::o;17688:1239::-;17953:7;:14;17939:3;:10;:28;17931:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;18045:1;18031:16;;:2;:16;;;;18023:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18130:12;:10;:12::i;:::-;18122:20;;:4;:20;;;:60;;;;18146:36;18163:4;18169:12;:10;:12::i;:::-;18146:16;:36::i;:::-;18122:60;18100:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;18273:16;18292:12;:10;:12::i;:::-;18273:31;;18317:60;18338:8;18348:4;18354:2;18358:3;18363:7;18372:4;18317:20;:60::i;:::-;18395:9;18390:377;18414:3;:10;18410:1;:14;18390:377;;;18446:10;18459:3;18463:1;18459:6;;;;;;;;;;;;;;;;;;;;;;18446:19;;18480:14;18497:7;18505:1;18497:10;;;;;;;;;;;;;;;;;;;;;;18480:27;;18524:19;18546:9;:13;18556:2;18546:13;;;;;;;;;;;:19;18560:4;18546:19;;;;;;;;;;;;;;;;18524:41;;18603:6;18588:11;:21;;18580:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;18707:6;18693:11;:20;;;;:::i;:::-;18671:9;:13;18681:2;18671:13;;;;;;;;;;;:19;18685:4;18671:19;;;;;;;;;;;;;;;:42;;;;18749:6;18728:9;:13;18738:2;18728:13;;;;;;;;;;;:17;18742:2;18728:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;18390:377;;;18426:3;;;;:::i;:::-;;;18390:377;;;;18814:2;18784:47;;18808:4;18784:47;;18798:8;18784:47;;;18818:3;18823:7;18784:47;;;;;;;:::i;:::-;;;;;;;;18844:75;18880:8;18890:4;18896:2;18900:3;18905:7;18914:4;18844:35;:75::i;:::-;17688:1239;;;;;;:::o;28317:165::-;28402:30;28418:4;28424:7;28402:15;:30::i;:::-;28443:31;28466:7;28443:12;:18;28456:4;28443:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;28317:165;;:::o;28668:174::-;28756:33;28775:4;28781:7;28756:18;:33::i;:::-;28800:34;28826:7;28800:12;:18;28813:4;28800:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;28668:174;;:::o;31754:180::-;31807:34;29301:24;31828:12;:10;:12::i;:::-;31807:7;:34::i;:::-;31799:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;31916:10;:8;:10::i;:::-;31754:180::o;15644:549::-;15825:16;15886:3;:10;15867:8;:15;:29;15859:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;15955:30;16002:8;:15;15988:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15955:63;;16036:9;16031:122;16055:8;:15;16051:1;:19;16031:122;;;16111:30;16121:8;16130:1;16121:11;;;;;;;;;;;;;;;;;;;;;;16134:3;16138:1;16134:6;;;;;;;;;;;;;;;;;;;;;;16111:9;:30::i;:::-;16092:13;16106:1;16092:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;16072:3;;;;:::i;:::-;;;16031:122;;;;16172:13;16165:20;;;15644:549;;;;:::o;13506:86::-;13553:4;13577:7;;;;;;;;;;;13570:14;;13506:86;:::o;31296:268::-;31415:34;29232:24;31436:12;:10;:12::i;:::-;31415:7;:34::i;:::-;31407:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31523:33;31534:7;31543:3;31548:7;31523:10;:33::i;:::-;31296:268;;;:::o;30500:250::-;30607:34;29163:24;30628:12;:10;:12::i;:::-;30607:7;:34::i;:::-;30599:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30715:27;30721:2;30725;30729:6;30737:4;30715:5;:27::i;:::-;30500:250;;;;:::o;30214:278::-;30299:41;25229:4;30307:18;;30327:12;:10;:12::i;:::-;30299:7;:41::i;:::-;30291:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30388:6;30383:102;30404:3;:10;30400:1;:14;30383:102;;;30468:5;30436:21;:29;30458:3;30462:1;30458:6;;;;;;;;;;;;;;;;;;;;;;30436:29;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30416:3;;;;;:::i;:::-;;;;30383:102;;;;30214:278;:::o;31572:174::-;31623:34;29301:24;31644:12;:10;:12::i;:::-;31623:7;:34::i;:::-;31615:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;31730:8;:6;:8::i;:::-;31572:174::o;28022:145::-;28104:7;28131:28;28153:5;28131:12;:18;28144:4;28131:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;28124:35;;28022:145;;;;:::o;25775:139::-;25853:4;25877:6;:12;25884:4;25877:12;;;;;;;;;;;:20;;:29;25898:7;25877:29;;;;;;;;;;;;;;;;;;;;;;;;;25870:36;;25775:139;;;;:::o;14884:95::-;14931:13;14964:7;14957:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14884:95;:::o;25184:49::-;25229:4;25184:49;;;:::o;16201:311::-;16320:8;16304:24;;:12;:10;:12::i;:::-;:24;;;;16296:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;16432:8;16387:18;:32;16406:12;:10;:12::i;:::-;16387:32;;;;;;;;;;;;;;;:42;16420:8;16387:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16485:8;16456:48;;16471:12;:10;:12::i;:::-;16456:48;;;16495:8;16456:48;;;;;;:::i;:::-;;;;;;;;16201:311;;:::o;29334:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;28175:134::-;28247:7;28274:27;:12;:18;28287:4;28274:18;;;;;;;;;;;:25;:27::i;:::-;28267:34;;28175:134;;;:::o;29125:62::-;29163:24;29125:62;:::o;28490:170::-;28576:31;28593:4;28599:7;28576:16;:31::i;:::-;28618:34;28644:7;28618:12;:18;28631:4;28618:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;28490:170;;:::o;29263:62::-;29301:24;29263:62;:::o;16520:168::-;16619:4;16643:18;:27;16662:7;16643:27;;;;;;;;;;;;;;;:37;16671:8;16643:37;;;;;;;;;;;;;;;;;;;;;;;;;16636:44;;16520:168;;;;:::o;16696:984::-;16936:1;16922:16;;:2;:16;;;;16914:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17021:12;:10;:12::i;:::-;17013:20;;:4;:20;;;:60;;;;17037:36;17054:4;17060:12;:10;:12::i;:::-;17037:16;:36::i;:::-;17013:60;16991:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;17155:16;17174:12;:10;:12::i;:::-;17155:31;;17199:96;17220:8;17230:4;17236:2;17240:21;17258:2;17240:17;:21::i;:::-;17263:25;17281:6;17263:17;:25::i;:::-;17290:4;17199:20;:96::i;:::-;17308:19;17330:9;:13;17340:2;17330:13;;;;;;;;;;;:19;17344:4;17330:19;;;;;;;;;;;;;;;;17308:41;;17383:6;17368:11;:21;;17360:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17483:6;17469:11;:20;;;;:::i;:::-;17447:9;:13;17457:2;17447:13;;;;;;;;;;;:19;17461:4;17447:19;;;;;;;;;;;;;;;:42;;;;17521:6;17500:9;:13;17510:2;17500:13;;;;;;;;;;;:17;17514:2;17500:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;17576:2;17545:46;;17570:4;17545:46;;17560:8;17545:46;;;17580:2;17584:6;17545:46;;;;;;;:::i;:::-;;;;;;;;17604:68;17635:8;17645:4;17651:2;17655;17659:6;17667:4;17604:30;:68::i;:::-;16696:984;;;;;;;:::o;29928:274::-;30010:41;25229:4;30018:18;;30038:12;:10;:12::i;:::-;30010:7;:41::i;:::-;30002:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30099:6;30094:101;30115:3;:10;30111:1;:14;30094:101;;;30179:4;30147:21;:29;30169:3;30173:1;30169:6;;;;;;;;;;;;;;;;;;;;;;30147:29;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30127:3;;;;;:::i;:::-;;;;30094:101;;;;29928:274;:::o;31052:236::-;31146:34;29232:24;31167:12;:10;:12::i;:::-;31146:7;:34::i;:::-;31138:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31254:26;31260:7;31269:2;31273:6;31254:5;:26::i;:::-;31052:236;;;:::o;26766:112::-;26845:25;26856:4;26862:7;26845:10;:25::i;:::-;26766:112;;:::o;2409:152::-;2479:4;2503:50;2508:3;:10;;2544:5;2528:23;;2520:32;;2503:4;:50::i;:::-;2496:57;;2409:152;;;;:::o;14987:297::-;15089:4;15128:26;15113:41;;;:11;:41;;;;:110;;;;15186:37;15171:52;;;:11;:52;;;;15113:110;:163;;;;15240:36;15264:11;15240:23;:36::i;:::-;15113:163;15106:170;;14987:297;;;:::o;13068:98::-;13121:7;13148:10;13141:17;;13068:98;:::o;18935:88::-;19009:6;19002:4;:13;;;;;;;;;;;;:::i;:::-;;18935:88;:::o;19595:689::-;19744:1;19730:16;;:2;:16;;;;19722:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19817:7;:14;19803:3;:10;:28;19795:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;19889:16;19908:12;:10;:12::i;:::-;19889:31;;19933:66;19954:8;19972:1;19976:2;19980:3;19985:7;19994:4;19933:20;:66::i;:::-;20017:6;20012:100;20033:3;:10;20029:1;:14;20012:100;;;20090:7;20098:1;20090:10;;;;;;;;;;;;;;;;;;;;;;20065:9;:17;20075:3;20079:1;20075:6;;;;;;;;;;;;;;;;;;;;;;20065:17;;;;;;;;;;;:21;20083:2;20065:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;20045:3;;;;;:::i;:::-;;;;20012:100;;;;20165:2;20129:53;;20161:1;20129:53;;20143:8;20129:53;;;20169:3;20174:7;20129:53;;;;;;;:::i;:::-;;;;;;;;20195:81;20231:8;20249:1;20253:2;20257:3;20262:7;20271:4;20195:35;:81::i;:::-;19595:689;;;;;:::o;32137:559::-;32357:6;32352:250;32373:3;:10;32369:1;:14;32352:250;;;32409:34;29163:24;32430:12;:10;:12::i;:::-;32409:7;:34::i;:::-;32405:186;;32505:5;32472:38;;:21;:29;32494:3;32498:1;32494:6;;;;;;;;;;;;;;;;;;;;;;32472:29;;;;;;;;;;;;;;;;;;;;;:38;;;32464:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32405:186;32385:3;;;;;:::i;:::-;;;;32352:250;;;;32622:66;32649:8;32659:4;32665:2;32669:3;32674:7;32683:4;32622:26;:66::i;:::-;32137:559;;;;;;:::o;22773:799::-;23027:15;:2;:13;;;:15::i;:::-;23023:542;;;23080:2;23063:43;;;23107:8;23117:4;23123:3;23128:7;23137:4;23063:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23059:495;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;23427:6;23420:14;;;;;;;;;;;:::i;:::-;;;;;;;;23059:495;;;23476:62;;;;;;;;;;:::i;:::-;;;;;;;;23059:495;23204:52;;;23192:64;;;:8;:64;;;;23188:163;;23281:50;;;;;;;;;;:::i;:::-;;;;;;;;23188:163;23143:223;23023:542;22773:799;;;;;;:::o;26053:232::-;26146:41;26154:18;26167:4;26154:12;:18::i;:::-;26174:12;:10;:12::i;:::-;26146:7;:41::i;:::-;26138:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;26252:25;26263:4;26269:7;26252:10;:25::i;:::-;26053:232;;:::o;26540:218::-;26647:12;:10;:12::i;:::-;26636:23;;:7;:23;;;26628:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26724:26;26736:4;26742:7;26724:11;:26::i;:::-;26540:218;;:::o;2569:158::-;2642:4;2666:53;2674:3;:10;;2710:5;2694:23;;2686:32;;2666:7;:53::i;:::-;2659:60;;2569:158;;;;:::o;13930:120::-;13743:8;:6;:8::i;:::-;13735:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;13999:5:::1;13989:7;;:15;;;;;;;;;;;;;;;;;;14020:22;14029:12;:10;:12::i;:::-;14020:22;;;;;;:::i;:::-;;;;;;;;13930:120::o:0;20905:837::-;21045:1;21026:21;;:7;:21;;;;21018:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21120:7;:14;21106:3;:10;:28;21098:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;21192:16;21211:12;:10;:12::i;:::-;21192:31;;21236:69;21257:8;21267:7;21284:1;21288:3;21293:7;21236:69;;;;;;;;;;;;:20;:69::i;:::-;21323:6;21318:341;21339:3;:10;21335:1;:14;21318:341;;;21371:10;21384:3;21388:1;21384:6;;;;;;;;;;;;;;;;;;;;;;21371:19;;21405:14;21422:7;21430:1;21422:10;;;;;;;;;;;;;;;;;;;;;;21405:27;;21449:22;21474:9;:13;21484:2;21474:13;;;;;;;;;;;:22;21488:7;21474:22;;;;;;;;;;;;;;;;21449:47;;21537:6;21519:14;:24;;21511:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21641:6;21624:14;:23;;;;:::i;:::-;21599:9;:13;21609:2;21599:13;;;;;;;;;;;:22;21613:7;21599:22;;;;;;;;;;;;;;;:48;;;;21318:341;;;21351:3;;;;;:::i;:::-;;;;21318:341;;;;21717:1;21676:58;;21700:7;21676:58;;21690:8;21676:58;;;21721:3;21726:7;21676:58;;;;;;;:::i;:::-;;;;;;;;20905:837;;;;:::o;19031:556::-;19165:1;19146:21;;:7;:21;;;;19138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19218:16;19237:12;:10;:12::i;:::-;19218:31;;19262:107;19283:8;19301:1;19305:7;19314:21;19332:2;19314:17;:21::i;:::-;19337:25;19355:6;19337:17;:25::i;:::-;19364:4;19262:20;:107::i;:::-;19408:6;19382:9;:13;19392:2;19382:13;;;;;;;;;;;:22;19396:7;19382:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;19467:7;19430:57;;19463:1;19430:57;;19445:8;19430:57;;;19476:2;19480:6;19430:57;;;;;;;:::i;:::-;;;;;;;;19500:79;19531:8;19549:1;19553:7;19562:2;19566:6;19574:4;19500:30;:79::i;:::-;19031:556;;;;;:::o;13804:118::-;13645:8;:6;:8::i;:::-;13644:9;13636:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13874:4:::1;13864:7;;:14;;;;;;;;;;;;;;;;;;13894:20;13901:12;:10;:12::i;:::-;13894:20;;;;;;:::i;:::-;;;;;;;;13804:118::o:0;3035:158::-;3109:7;3160:22;3164:3;:10;;3176:5;3160:3;:22::i;:::-;3152:31;;3129:56;;3035:158;;;;:::o;2910:117::-;2973:7;3000:19;3008:3;:10;;3000:7;:19::i;:::-;2993:26;;2910:117;;;:::o;26297:235::-;26391:41;26399:18;26412:4;26399:12;:18::i;:::-;26419:12;:10;:12::i;:::-;26391:7;:41::i;:::-;26383:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26498:26;26510:4;26516:7;26498:11;:26::i;:::-;26297:235;;:::o;23580:198::-;23646:16;23675:22;23714:1;23700:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23675:41;;23738:7;23727:5;23733:1;23727:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;23765:5;23758:12;;;23580:198;;;:::o;22003:762::-;22232:15;:2;:13;;;:15::i;:::-;22228:530;;;22285:2;22268:38;;;22307:8;22317:4;22323:2;22327:6;22335:4;22268:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22264:483;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;22620:6;22613:14;;;;;;;;;;;:::i;:::-;;;;;;;;22264:483;;;22669:62;;;;;;;;;;:::i;:::-;;;;;;;;22264:483;22402:47;;;22390:59;;;:8;:59;;;;22386:158;;22474:50;;;;;;;;;;:::i;:::-;;;;;;;;22386:158;22341:218;22228:530;22003:762;;;;;;:::o;20292:605::-;20407:1;20388:21;;:7;:21;;;;20380:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20462:16;20481:12;:10;:12::i;:::-;20462:31;;20506:105;20527:8;20537:7;20554:1;20558:21;20576:2;20558:17;:21::i;:::-;20581:25;20599:6;20581:17;:25::i;:::-;20506:105;;;;;;;;;;;;:20;:105::i;:::-;20624:22;20649:9;:13;20659:2;20649:13;;;;;;;;;;;:22;20663:7;20649:22;;;;;;;;;;;;;;;;20624:47;;20708:6;20690:14;:24;;20682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20808:6;20791:14;:23;;;;:::i;:::-;20766:9;:13;20776:2;20766:13;;;;;;;;;;;:22;20780:7;20766:22;;;;;;;;;;;;;;;:48;;;;20874:1;20832:57;;20857:7;20832:57;;20847:8;20832:57;;;20878:2;20882:6;20832:57;;;;;;;:::i;:::-;;;;;;;;20292:605;;;;;:::o;27089:229::-;27164:22;27172:4;27178:7;27164;:22::i;:::-;27159:152;;27235:4;27203:6;:12;27210:4;27203:12;;;;;;;;;;;:20;;:29;27224:7;27203:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;27286:12;:10;:12::i;:::-;27259:40;;27277:7;27259:40;;27271:4;27259:40;;;;;;;;;;27159:152;27089:229;;:::o;205:291::-;268:4;290:21;300:3;305:5;290:9;:21::i;:::-;285:204;;328:3;:11;;345:5;328:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;388:3;:11;;:18;;;;366:3;:12;;:19;379:5;366:19;;;;;;;;;;;:40;;;;428:4;421:11;;;;285:204;472:5;465:12;;205:291;;;;;:::o;27787:227::-;27872:4;27911:42;27896:57;;;:11;:57;;;;:110;;;;27970:36;27994:11;27970:23;:36::i;:::-;27896:110;27889:117;;27787:227;;;:::o;24522:424::-;24793:66;24820:8;24830:4;24836:2;24840:3;24845:7;24854:4;24793:26;:66::i;:::-;24881:8;:6;:8::i;:::-;24880:9;24872:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24522:424;;;;;;:::o;5408:174::-;5468:4;5485:12;5539:7;5527:20;5519:28;;5573:1;5566:4;:8;5559:15;;;5408:174;;;:::o;27326:230::-;27401:22;27409:4;27415:7;27401;:22::i;:::-;27397:152;;;27472:5;27440:6;:12;27447:4;27440:12;;;;;;;;;;;:20;;:29;27461:7;27440:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;27524:12;:10;:12::i;:::-;27497:40;;27515:7;27497:40;;27509:4;27497:40;;;;;;;;;;27397:152;27326:230;;:::o;504:637::-;570:4;587:18;608:3;:12;;:19;621:5;608:19;;;;;;;;;;;;587:40;;658:1;644:10;:15;640:494;;714:21;751:1;738:10;:14;;;;:::i;:::-;714:38;;767:17;808:1;787:3;:11;;:18;;;;:22;;;;:::i;:::-;767:42;;824:17;844:3;:11;;856:9;844:22;;;;;;;;;;;;;;;;;;;;;;;;824:42;;912:9;883:3;:11;;895:13;883:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;962:10;936:3;:12;;:23;949:9;936:23;;;;;;;;;;;:36;;;;989:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1030:3;:12;;:19;1043:5;1030:19;;;;;;;;;;;1023:26;;;1073:4;1066:11;;;;;;;;640:494;1117:5;1110:12;;;504:637;;;;;:::o;1403:204::-;1470:7;1519:5;1498:3;:11;;:18;;;;:26;1490:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1581:3;:11;;1593:5;1581:18;;;;;;;;;;;;;;;;;;;;;;;;1574:25;;1403:204;;;;:::o;1286:109::-;1342:7;1369:3;:11;;:18;;;;1362:25;;1286:109;;;:::o;1149:129::-;1222:4;1269:1;1246:3;:12;;:19;1259:5;1246:19;;;;;;;;;;;;:24;;1239:31;;1149:129;;;;:::o;25550:217::-;25635:4;25674:32;25659:47;;;:11;:47;;;;:100;;;;25723:36;25747:11;25723:23;:36::i;:::-;25659:100;25652:107;;25550:217;;;:::o;21750:245::-;;;;;;;:::o;14100:157::-;14185:4;14224:25;14209:40;;;:11;:40;;;;14202:47;;14100:157;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;670:623::-;;791:81;807:64;864:6;807:64;:::i;:::-;791:81;:::i;:::-;782:90;;892:5;920:6;913:5;906:21;946:4;939:5;935:16;928:23;;971:6;1021:3;1013:4;1005:6;1001:17;996:3;992:27;989:36;986:2;;;1038:1;1035;1028:12;986:2;1066:1;1051:236;1076:6;1073:1;1070:13;1051:236;;;1143:3;1171:37;1204:3;1192:10;1171:37;:::i;:::-;1166:3;1159:50;1238:4;1233:3;1229:14;1222:21;;1272:4;1267:3;1263:14;1256:21;;1111:176;1098:1;1095;1091:9;1086:14;;1051:236;;;1055:14;772:521;;;;;;;:::o;1299:343::-;;1401:65;1417:48;1458:6;1417:48;:::i;:::-;1401:65;:::i;:::-;1392:74;;1489:6;1482:5;1475:21;1527:4;1520:5;1516:16;1565:3;1556:6;1551:3;1547:16;1544:25;1541:2;;;1582:1;1579;1572:12;1541:2;1595:41;1629:6;1624:3;1619;1595:41;:::i;:::-;1382:260;;;;;;:::o;1648:345::-;;1751:66;1767:49;1809:6;1767:49;:::i;:::-;1751:66;:::i;:::-;1742:75;;1840:6;1833:5;1826:21;1878:4;1871:5;1867:16;1916:3;1907:6;1902:3;1898:16;1895:25;1892:2;;;1933:1;1930;1923:12;1892:2;1946:41;1980:6;1975:3;1970;1946:41;:::i;:::-;1732:261;;;;;;:::o;1999:139::-;;2083:6;2070:20;2061:29;;2099:33;2126:5;2099:33;:::i;:::-;2051:87;;;;:::o;2161:303::-;;2281:3;2274:4;2266:6;2262:17;2258:27;2248:2;;2299:1;2296;2289:12;2248:2;2339:6;2326:20;2364:94;2454:3;2446:6;2439:4;2431:6;2427:17;2364:94;:::i;:::-;2355:103;;2238:226;;;;;:::o;2487:303::-;;2607:3;2600:4;2592:6;2588:17;2584:27;2574:2;;2625:1;2622;2615:12;2574:2;2665:6;2652:20;2690:94;2780:3;2772:6;2765:4;2757:6;2753:17;2690:94;:::i;:::-;2681:103;;2564:226;;;;;:::o;2796:133::-;;2877:6;2864:20;2855:29;;2893:30;2917:5;2893:30;:::i;:::-;2845:84;;;;:::o;2935:139::-;;3019:6;3006:20;2997:29;;3035:33;3062:5;3035:33;:::i;:::-;2987:87;;;;:::o;3080:137::-;;3163:6;3150:20;3141:29;;3179:32;3205:5;3179:32;:::i;:::-;3131:86;;;;:::o;3223:141::-;;3310:6;3304:13;3295:22;;3326:32;3352:5;3326:32;:::i;:::-;3285:79;;;;:::o;3383:271::-;;3487:3;3480:4;3472:6;3468:17;3464:27;3454:2;;3505:1;3502;3495:12;3454:2;3545:6;3532:20;3570:78;3644:3;3636:6;3629:4;3621:6;3617:17;3570:78;:::i;:::-;3561:87;;3444:210;;;;;:::o;3674:273::-;;3779:3;3772:4;3764:6;3760:17;3756:27;3746:2;;3797:1;3794;3787:12;3746:2;3837:6;3824:20;3862:79;3937:3;3929:6;3922:4;3914:6;3910:17;3862:79;:::i;:::-;3853:88;;3736:211;;;;;:::o;3953:139::-;;4037:6;4024:20;4015:29;;4053:33;4080:5;4053:33;:::i;:::-;4005:87;;;;:::o;4098:407::-;;;4223:2;4211:9;4202:7;4198:23;4194:32;4191:2;;;4239:1;4236;4229:12;4191:2;4282:1;4307:53;4352:7;4343:6;4332:9;4328:22;4307:53;:::i;:::-;4297:63;;4253:117;4409:2;4435:53;4480:7;4471:6;4460:9;4456:22;4435:53;:::i;:::-;4425:63;;4380:118;4181:324;;;;;:::o;4511:1241::-;;;;;;4746:3;4734:9;4725:7;4721:23;4717:33;4714:2;;;4763:1;4760;4753:12;4714:2;4806:1;4831:53;4876:7;4867:6;4856:9;4852:22;4831:53;:::i;:::-;4821:63;;4777:117;4933:2;4959:53;5004:7;4995:6;4984:9;4980:22;4959:53;:::i;:::-;4949:63;;4904:118;5089:2;5078:9;5074:18;5061:32;5120:18;5112:6;5109:30;5106:2;;;5152:1;5149;5142:12;5106:2;5180:78;5250:7;5241:6;5230:9;5226:22;5180:78;:::i;:::-;5170:88;;5032:236;5335:2;5324:9;5320:18;5307:32;5366:18;5358:6;5355:30;5352:2;;;5398:1;5395;5388:12;5352:2;5426:78;5496:7;5487:6;5476:9;5472:22;5426:78;:::i;:::-;5416:88;;5278:236;5581:3;5570:9;5566:19;5553:33;5613:18;5605:6;5602:30;5599:2;;;5645:1;5642;5635:12;5599:2;5673:62;5727:7;5718:6;5707:9;5703:22;5673:62;:::i;:::-;5663:72;;5524:221;4704:1048;;;;;;;;:::o;5758:955::-;;;;;;5943:3;5931:9;5922:7;5918:23;5914:33;5911:2;;;5960:1;5957;5950:12;5911:2;6003:1;6028:53;6073:7;6064:6;6053:9;6049:22;6028:53;:::i;:::-;6018:63;;5974:117;6130:2;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6101:118;6258:2;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6229:118;6386:2;6412:53;6457:7;6448:6;6437:9;6433:22;6412:53;:::i;:::-;6402:63;;6357:118;6542:3;6531:9;6527:19;6514:33;6574:18;6566:6;6563:30;6560:2;;;6606:1;6603;6596:12;6560:2;6634:62;6688:7;6679:6;6668:9;6664:22;6634:62;:::i;:::-;6624:72;;6485:221;5901:812;;;;;;;;:::o;6719:838::-;;;;6911:2;6899:9;6890:7;6886:23;6882:32;6879:2;;;6927:1;6924;6917:12;6879:2;6970:1;6995:53;7040:7;7031:6;7020:9;7016:22;6995:53;:::i;:::-;6985:63;;6941:117;7125:2;7114:9;7110:18;7097:32;7156:18;7148:6;7145:30;7142:2;;;7188:1;7185;7178:12;7142:2;7216:78;7286:7;7277:6;7266:9;7262:22;7216:78;:::i;:::-;7206:88;;7068:236;7371:2;7360:9;7356:18;7343:32;7402:18;7394:6;7391:30;7388:2;;;7434:1;7431;7424:12;7388:2;7462:78;7532:7;7523:6;7512:9;7508:22;7462:78;:::i;:::-;7452:88;;7314:236;6869:688;;;;;:::o;7563:1095::-;;;;;7781:3;7769:9;7760:7;7756:23;7752:33;7749:2;;;7798:1;7795;7788:12;7749:2;7841:1;7866:53;7911:7;7902:6;7891:9;7887:22;7866:53;:::i;:::-;7856:63;;7812:117;7996:2;7985:9;7981:18;7968:32;8027:18;8019:6;8016:30;8013:2;;;8059:1;8056;8049:12;8013:2;8087:78;8157:7;8148:6;8137:9;8133:22;8087:78;:::i;:::-;8077:88;;7939:236;8242:2;8231:9;8227:18;8214:32;8273:18;8265:6;8262:30;8259:2;;;8305:1;8302;8295:12;8259:2;8333:78;8403:7;8394:6;8383:9;8379:22;8333:78;:::i;:::-;8323:88;;8185:236;8488:2;8477:9;8473:18;8460:32;8519:18;8511:6;8508:30;8505:2;;;8551:1;8548;8541:12;8505:2;8579:62;8633:7;8624:6;8613:9;8609:22;8579:62;:::i;:::-;8569:72;;8431:220;7739:919;;;;;;;:::o;8664:401::-;;;8786:2;8774:9;8765:7;8761:23;8757:32;8754:2;;;8802:1;8799;8792:12;8754:2;8845:1;8870:53;8915:7;8906:6;8895:9;8891:22;8870:53;:::i;:::-;8860:63;;8816:117;8972:2;8998:50;9040:7;9031:6;9020:9;9016:22;8998:50;:::i;:::-;8988:60;;8943:115;8744:321;;;;;:::o;9071:407::-;;;9196:2;9184:9;9175:7;9171:23;9167:32;9164:2;;;9212:1;9209;9202:12;9164:2;9255:1;9280:53;9325:7;9316:6;9305:9;9301:22;9280:53;:::i;:::-;9270:63;;9226:117;9382:2;9408:53;9453:7;9444:6;9433:9;9429:22;9408:53;:::i;:::-;9398:63;;9353:118;9154:324;;;;;:::o;9484:552::-;;;;9626:2;9614:9;9605:7;9601:23;9597:32;9594:2;;;9642:1;9639;9632:12;9594:2;9685:1;9710:53;9755:7;9746:6;9735:9;9731:22;9710:53;:::i;:::-;9700:63;;9656:117;9812:2;9838:53;9883:7;9874:6;9863:9;9859:22;9838:53;:::i;:::-;9828:63;;9783:118;9940:2;9966:53;10011:7;10002:6;9991:9;9987:22;9966:53;:::i;:::-;9956:63;;9911:118;9584:452;;;;;:::o;10042:809::-;;;;;10210:3;10198:9;10189:7;10185:23;10181:33;10178:2;;;10227:1;10224;10217:12;10178:2;10270:1;10295:53;10340:7;10331:6;10320:9;10316:22;10295:53;:::i;:::-;10285:63;;10241:117;10397:2;10423:53;10468:7;10459:6;10448:9;10444:22;10423:53;:::i;:::-;10413:63;;10368:118;10525:2;10551:53;10596:7;10587:6;10576:9;10572:22;10551:53;:::i;:::-;10541:63;;10496:118;10681:2;10670:9;10666:18;10653:32;10712:18;10704:6;10701:30;10698:2;;;10744:1;10741;10734:12;10698:2;10772:62;10826:7;10817:6;10806:9;10802:22;10772:62;:::i;:::-;10762:72;;10624:220;10168:683;;;;;;;:::o;10857:693::-;;;11032:2;11020:9;11011:7;11007:23;11003:32;11000:2;;;11048:1;11045;11038:12;11000:2;11119:1;11108:9;11104:17;11091:31;11149:18;11141:6;11138:30;11135:2;;;11181:1;11178;11171:12;11135:2;11209:78;11279:7;11270:6;11259:9;11255:22;11209:78;:::i;:::-;11199:88;;11062:235;11364:2;11353:9;11349:18;11336:32;11395:18;11387:6;11384:30;11381:2;;;11427:1;11424;11417:12;11381:2;11455:78;11525:7;11516:6;11505:9;11501:22;11455:78;:::i;:::-;11445:88;;11307:236;10990:560;;;;;:::o;11556:405::-;;11689:2;11677:9;11668:7;11664:23;11660:32;11657:2;;;11705:1;11702;11695:12;11657:2;11776:1;11765:9;11761:17;11748:31;11806:18;11798:6;11795:30;11792:2;;;11838:1;11835;11828:12;11792:2;11866:78;11936:7;11927:6;11916:9;11912:22;11866:78;:::i;:::-;11856:88;;11719:235;11647:314;;;;:::o;11967:262::-;;12075:2;12063:9;12054:7;12050:23;12046:32;12043:2;;;12091:1;12088;12081:12;12043:2;12134:1;12159:53;12204:7;12195:6;12184:9;12180:22;12159:53;:::i;:::-;12149:63;;12105:117;12033:196;;;;:::o;12235:407::-;;;12360:2;12348:9;12339:7;12335:23;12331:32;12328:2;;;12376:1;12373;12366:12;12328:2;12419:1;12444:53;12489:7;12480:6;12469:9;12465:22;12444:53;:::i;:::-;12434:63;;12390:117;12546:2;12572:53;12617:7;12608:6;12597:9;12593:22;12572:53;:::i;:::-;12562:63;;12517:118;12318:324;;;;;:::o;12648:407::-;;;12773:2;12761:9;12752:7;12748:23;12744:32;12741:2;;;12789:1;12786;12779:12;12741:2;12832:1;12857:53;12902:7;12893:6;12882:9;12878:22;12857:53;:::i;:::-;12847:63;;12803:117;12959:2;12985:53;13030:7;13021:6;13010:9;13006:22;12985:53;:::i;:::-;12975:63;;12930:118;12731:324;;;;;:::o;13061:260::-;;13168:2;13156:9;13147:7;13143:23;13139:32;13136:2;;;13184:1;13181;13174:12;13136:2;13227:1;13252:52;13296:7;13287:6;13276:9;13272:22;13252:52;:::i;:::-;13242:62;;13198:116;13126:195;;;;:::o;13327:282::-;;13445:2;13433:9;13424:7;13420:23;13416:32;13413:2;;;13461:1;13458;13451:12;13413:2;13504:1;13529:63;13584:7;13575:6;13564:9;13560:22;13529:63;:::i;:::-;13519:73;;13475:127;13403:206;;;;:::o;13615:375::-;;13733:2;13721:9;13712:7;13708:23;13704:32;13701:2;;;13749:1;13746;13739:12;13701:2;13820:1;13809:9;13805:17;13792:31;13850:18;13842:6;13839:30;13836:2;;;13882:1;13879;13872:12;13836:2;13910:63;13965:7;13956:6;13945:9;13941:22;13910:63;:::i;:::-;13900:73;;13763:220;13691:299;;;;:::o;13996:262::-;;14104:2;14092:9;14083:7;14079:23;14075:32;14072:2;;;14120:1;14117;14110:12;14072:2;14163:1;14188:53;14233:7;14224:6;14213:9;14209:22;14188:53;:::i;:::-;14178:63;;14134:117;14062:196;;;;:::o;14264:179::-;;14354:46;14396:3;14388:6;14354:46;:::i;:::-;14432:4;14427:3;14423:14;14409:28;;14344:99;;;;:::o;14449:118::-;14536:24;14554:5;14536:24;:::i;:::-;14531:3;14524:37;14514:53;;:::o;14603:732::-;;14751:54;14799:5;14751:54;:::i;:::-;14821:86;14900:6;14895:3;14821:86;:::i;:::-;14814:93;;14931:56;14981:5;14931:56;:::i;:::-;15010:7;15041:1;15026:284;15051:6;15048:1;15045:13;15026:284;;;15127:6;15121:13;15154:63;15213:3;15198:13;15154:63;:::i;:::-;15147:70;;15240:60;15293:6;15240:60;:::i;:::-;15230:70;;15086:224;15073:1;15070;15066:9;15061:14;;15026:284;;;15030:14;15326:3;15319:10;;14727:608;;;;;;;:::o;15341:109::-;15422:21;15437:5;15422:21;:::i;:::-;15417:3;15410:34;15400:50;;:::o;15456:118::-;15543:24;15561:5;15543:24;:::i;:::-;15538:3;15531:37;15521:53;;:::o;15580:360::-;;15694:38;15726:5;15694:38;:::i;:::-;15748:70;15811:6;15806:3;15748:70;:::i;:::-;15741:77;;15827:52;15872:6;15867:3;15860:4;15853:5;15849:16;15827:52;:::i;:::-;15904:29;15926:6;15904:29;:::i;:::-;15899:3;15895:39;15888:46;;15670:270;;;;;:::o;15946:364::-;;16062:39;16095:5;16062:39;:::i;:::-;16117:71;16181:6;16176:3;16117:71;:::i;:::-;16110:78;;16197:52;16242:6;16237:3;16230:4;16223:5;16219:16;16197:52;:::i;:::-;16274:29;16296:6;16274:29;:::i;:::-;16269:3;16265:39;16258:46;;16038:272;;;;;:::o;16316:366::-;;16479:67;16543:2;16538:3;16479:67;:::i;:::-;16472:74;;16555:93;16644:3;16555:93;:::i;:::-;16673:2;16668:3;16664:12;16657:19;;16462:220;;;:::o;16688:366::-;;16851:67;16915:2;16910:3;16851:67;:::i;:::-;16844:74;;16927:93;17016:3;16927:93;:::i;:::-;17045:2;17040:3;17036:12;17029:19;;16834:220;;;:::o;17060:366::-;;17223:67;17287:2;17282:3;17223:67;:::i;:::-;17216:74;;17299:93;17388:3;17299:93;:::i;:::-;17417:2;17412:3;17408:12;17401:19;;17206:220;;;:::o;17432:366::-;;17595:67;17659:2;17654:3;17595:67;:::i;:::-;17588:74;;17671:93;17760:3;17671:93;:::i;:::-;17789:2;17784:3;17780:12;17773:19;;17578:220;;;:::o;17804:366::-;;17967:67;18031:2;18026:3;17967:67;:::i;:::-;17960:74;;18043:93;18132:3;18043:93;:::i;:::-;18161:2;18156:3;18152:12;18145:19;;17950:220;;;:::o;18176:366::-;;18339:67;18403:2;18398:3;18339:67;:::i;:::-;18332:74;;18415:93;18504:3;18415:93;:::i;:::-;18533:2;18528:3;18524:12;18517:19;;18322:220;;;:::o;18548:366::-;;18711:67;18775:2;18770:3;18711:67;:::i;:::-;18704:74;;18787:93;18876:3;18787:93;:::i;:::-;18905:2;18900:3;18896:12;18889:19;;18694:220;;;:::o;18920:366::-;;19083:67;19147:2;19142:3;19083:67;:::i;:::-;19076:74;;19159:93;19248:3;19159:93;:::i;:::-;19277:2;19272:3;19268:12;19261:19;;19066:220;;;:::o;19292:366::-;;19455:67;19519:2;19514:3;19455:67;:::i;:::-;19448:74;;19531:93;19620:3;19531:93;:::i;:::-;19649:2;19644:3;19640:12;19633:19;;19438:220;;;:::o;19664:366::-;;19827:67;19891:2;19886:3;19827:67;:::i;:::-;19820:74;;19903:93;19992:3;19903:93;:::i;:::-;20021:2;20016:3;20012:12;20005:19;;19810:220;;;:::o;20036:366::-;;20199:67;20263:2;20258:3;20199:67;:::i;:::-;20192:74;;20275:93;20364:3;20275:93;:::i;:::-;20393:2;20388:3;20384:12;20377:19;;20182:220;;;:::o;20408:366::-;;20571:67;20635:2;20630:3;20571:67;:::i;:::-;20564:74;;20647:93;20736:3;20647:93;:::i;:::-;20765:2;20760:3;20756:12;20749:19;;20554:220;;;:::o;20780:366::-;;20943:67;21007:2;21002:3;20943:67;:::i;:::-;20936:74;;21019:93;21108:3;21019:93;:::i;:::-;21137:2;21132:3;21128:12;21121:19;;20926:220;;;:::o;21152:366::-;;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21298:220;;;:::o;21524:366::-;;21687:67;21751:2;21746:3;21687:67;:::i;:::-;21680:74;;21763:93;21852:3;21763:93;:::i;:::-;21881:2;21876:3;21872:12;21865:19;;21670:220;;;:::o;21896:366::-;;22059:67;22123:2;22118:3;22059:67;:::i;:::-;22052:74;;22135:93;22224:3;22135:93;:::i;:::-;22253:2;22248:3;22244:12;22237:19;;22042:220;;;:::o;22268:366::-;;22431:67;22495:2;22490:3;22431:67;:::i;:::-;22424:74;;22507:93;22596:3;22507:93;:::i;:::-;22625:2;22620:3;22616:12;22609:19;;22414:220;;;:::o;22640:366::-;;22803:67;22867:2;22862:3;22803:67;:::i;:::-;22796:74;;22879:93;22968:3;22879:93;:::i;:::-;22997:2;22992:3;22988:12;22981:19;;22786:220;;;:::o;23012:366::-;;23175:67;23239:2;23234:3;23175:67;:::i;:::-;23168:74;;23251:93;23340:3;23251:93;:::i;:::-;23369:2;23364:3;23360:12;23353:19;;23158:220;;;:::o;23384:366::-;;23547:67;23611:2;23606:3;23547:67;:::i;:::-;23540:74;;23623:93;23712:3;23623:93;:::i;:::-;23741:2;23736:3;23732:12;23725:19;;23530:220;;;:::o;23756:366::-;;23919:67;23983:2;23978:3;23919:67;:::i;:::-;23912:74;;23995:93;24084:3;23995:93;:::i;:::-;24113:2;24108:3;24104:12;24097:19;;23902:220;;;:::o;24128:366::-;;24291:67;24355:2;24350:3;24291:67;:::i;:::-;24284:74;;24367:93;24456:3;24367:93;:::i;:::-;24485:2;24480:3;24476:12;24469:19;;24274:220;;;:::o;24500:366::-;;24663:67;24727:2;24722:3;24663:67;:::i;:::-;24656:74;;24739:93;24828:3;24739:93;:::i;:::-;24857:2;24852:3;24848:12;24841:19;;24646:220;;;:::o;24872:366::-;;25035:67;25099:2;25094:3;25035:67;:::i;:::-;25028:74;;25111:93;25200:3;25111:93;:::i;:::-;25229:2;25224:3;25220:12;25213:19;;25018:220;;;:::o;25244:366::-;;25407:67;25471:2;25466:3;25407:67;:::i;:::-;25400:74;;25483:93;25572:3;25483:93;:::i;:::-;25601:2;25596:3;25592:12;25585:19;;25390:220;;;:::o;25616:366::-;;25779:67;25843:2;25838:3;25779:67;:::i;:::-;25772:74;;25855:93;25944:3;25855:93;:::i;:::-;25973:2;25968:3;25964:12;25957:19;;25762:220;;;:::o;25988:108::-;26065:24;26083:5;26065:24;:::i;:::-;26060:3;26053:37;26043:53;;:::o;26102:118::-;26189:24;26207:5;26189:24;:::i;:::-;26184:3;26177:37;26167:53;;:::o;26226:222::-;;26357:2;26346:9;26342:18;26334:26;;26370:71;26438:1;26427:9;26423:17;26414:6;26370:71;:::i;:::-;26324:124;;;;:::o;26454:1053::-;;26815:3;26804:9;26800:19;26792:27;;26829:71;26897:1;26886:9;26882:17;26873:6;26829:71;:::i;:::-;26910:72;26978:2;26967:9;26963:18;26954:6;26910:72;:::i;:::-;27029:9;27023:4;27019:20;27014:2;27003:9;26999:18;26992:48;27057:108;27160:4;27151:6;27057:108;:::i;:::-;27049:116;;27212:9;27206:4;27202:20;27197:2;27186:9;27182:18;27175:48;27240:108;27343:4;27334:6;27240:108;:::i;:::-;27232:116;;27396:9;27390:4;27386:20;27380:3;27369:9;27365:19;27358:49;27424:76;27495:4;27486:6;27424:76;:::i;:::-;27416:84;;26782:725;;;;;;;;:::o;27513:751::-;;27774:3;27763:9;27759:19;27751:27;;27788:71;27856:1;27845:9;27841:17;27832:6;27788:71;:::i;:::-;27869:72;27937:2;27926:9;27922:18;27913:6;27869:72;:::i;:::-;27951;28019:2;28008:9;28004:18;27995:6;27951:72;:::i;:::-;28033;28101:2;28090:9;28086:18;28077:6;28033:72;:::i;:::-;28153:9;28147:4;28143:20;28137:3;28126:9;28122:19;28115:49;28181:76;28252:4;28243:6;28181:76;:::i;:::-;28173:84;;27741:523;;;;;;;;:::o;28270:373::-;;28451:2;28440:9;28436:18;28428:26;;28500:9;28494:4;28490:20;28486:1;28475:9;28471:17;28464:47;28528:108;28631:4;28622:6;28528:108;:::i;:::-;28520:116;;28418:225;;;;:::o;28649:634::-;;28908:2;28897:9;28893:18;28885:26;;28957:9;28951:4;28947:20;28943:1;28932:9;28928:17;28921:47;28985:108;29088:4;29079:6;28985:108;:::i;:::-;28977:116;;29140:9;29134:4;29130:20;29125:2;29114:9;29110:18;29103:48;29168:108;29271:4;29262:6;29168:108;:::i;:::-;29160:116;;28875:408;;;;;:::o;29289:210::-;;29414:2;29403:9;29399:18;29391:26;;29427:65;29489:1;29478:9;29474:17;29465:6;29427:65;:::i;:::-;29381:118;;;;:::o;29505:222::-;;29636:2;29625:9;29621:18;29613:26;;29649:71;29717:1;29706:9;29702:17;29693:6;29649:71;:::i;:::-;29603:124;;;;:::o;29733:313::-;;29884:2;29873:9;29869:18;29861:26;;29933:9;29927:4;29923:20;29919:1;29908:9;29904:17;29897:47;29961:78;30034:4;30025:6;29961:78;:::i;:::-;29953:86;;29851:195;;;;:::o;30052:419::-;;30256:2;30245:9;30241:18;30233:26;;30305:9;30299:4;30295:20;30291:1;30280:9;30276:17;30269:47;30333:131;30459:4;30333:131;:::i;:::-;30325:139;;30223:248;;;:::o;30477:419::-;;30681:2;30670:9;30666:18;30658:26;;30730:9;30724:4;30720:20;30716:1;30705:9;30701:17;30694:47;30758:131;30884:4;30758:131;:::i;:::-;30750:139;;30648:248;;;:::o;30902:419::-;;31106:2;31095:9;31091:18;31083:26;;31155:9;31149:4;31145:20;31141:1;31130:9;31126:17;31119:47;31183:131;31309:4;31183:131;:::i;:::-;31175:139;;31073:248;;;:::o;31327:419::-;;31531:2;31520:9;31516:18;31508:26;;31580:9;31574:4;31570:20;31566:1;31555:9;31551:17;31544:47;31608:131;31734:4;31608:131;:::i;:::-;31600:139;;31498:248;;;:::o;31752:419::-;;31956:2;31945:9;31941:18;31933:26;;32005:9;31999:4;31995:20;31991:1;31980:9;31976:17;31969:47;32033:131;32159:4;32033:131;:::i;:::-;32025:139;;31923:248;;;:::o;32177:419::-;;32381:2;32370:9;32366:18;32358:26;;32430:9;32424:4;32420:20;32416:1;32405:9;32401:17;32394:47;32458:131;32584:4;32458:131;:::i;:::-;32450:139;;32348:248;;;:::o;32602:419::-;;32806:2;32795:9;32791:18;32783:26;;32855:9;32849:4;32845:20;32841:1;32830:9;32826:17;32819:47;32883:131;33009:4;32883:131;:::i;:::-;32875:139;;32773:248;;;:::o;33027:419::-;;33231:2;33220:9;33216:18;33208:26;;33280:9;33274:4;33270:20;33266:1;33255:9;33251:17;33244:47;33308:131;33434:4;33308:131;:::i;:::-;33300:139;;33198:248;;;:::o;33452:419::-;;33656:2;33645:9;33641:18;33633:26;;33705:9;33699:4;33695:20;33691:1;33680:9;33676:17;33669:47;33733:131;33859:4;33733:131;:::i;:::-;33725:139;;33623:248;;;:::o;33877:419::-;;34081:2;34070:9;34066:18;34058:26;;34130:9;34124:4;34120:20;34116:1;34105:9;34101:17;34094:47;34158:131;34284:4;34158:131;:::i;:::-;34150:139;;34048:248;;;:::o;34302:419::-;;34506:2;34495:9;34491:18;34483:26;;34555:9;34549:4;34545:20;34541:1;34530:9;34526:17;34519:47;34583:131;34709:4;34583:131;:::i;:::-;34575:139;;34473:248;;;:::o;34727:419::-;;34931:2;34920:9;34916:18;34908:26;;34980:9;34974:4;34970:20;34966:1;34955:9;34951:17;34944:47;35008:131;35134:4;35008:131;:::i;:::-;35000:139;;34898:248;;;:::o;35152:419::-;;35356:2;35345:9;35341:18;35333:26;;35405:9;35399:4;35395:20;35391:1;35380:9;35376:17;35369:47;35433:131;35559:4;35433:131;:::i;:::-;35425:139;;35323:248;;;:::o;35577:419::-;;35781:2;35770:9;35766:18;35758:26;;35830:9;35824:4;35820:20;35816:1;35805:9;35801:17;35794:47;35858:131;35984:4;35858:131;:::i;:::-;35850:139;;35748:248;;;:::o;36002:419::-;;36206:2;36195:9;36191:18;36183:26;;36255:9;36249:4;36245:20;36241:1;36230:9;36226:17;36219:47;36283:131;36409:4;36283:131;:::i;:::-;36275:139;;36173:248;;;:::o;36427:419::-;;36631:2;36620:9;36616:18;36608:26;;36680:9;36674:4;36670:20;36666:1;36655:9;36651:17;36644:47;36708:131;36834:4;36708:131;:::i;:::-;36700:139;;36598:248;;;:::o;36852:419::-;;37056:2;37045:9;37041:18;37033:26;;37105:9;37099:4;37095:20;37091:1;37080:9;37076:17;37069:47;37133:131;37259:4;37133:131;:::i;:::-;37125:139;;37023:248;;;:::o;37277:419::-;;37481:2;37470:9;37466:18;37458:26;;37530:9;37524:4;37520:20;37516:1;37505:9;37501:17;37494:47;37558:131;37684:4;37558:131;:::i;:::-;37550:139;;37448:248;;;:::o;37702:419::-;;37906:2;37895:9;37891:18;37883:26;;37955:9;37949:4;37945:20;37941:1;37930:9;37926:17;37919:47;37983:131;38109:4;37983:131;:::i;:::-;37975:139;;37873:248;;;:::o;38127:419::-;;38331:2;38320:9;38316:18;38308:26;;38380:9;38374:4;38370:20;38366:1;38355:9;38351:17;38344:47;38408:131;38534:4;38408:131;:::i;:::-;38400:139;;38298:248;;;:::o;38552:419::-;;38756:2;38745:9;38741:18;38733:26;;38805:9;38799:4;38795:20;38791:1;38780:9;38776:17;38769:47;38833:131;38959:4;38833:131;:::i;:::-;38825:139;;38723:248;;;:::o;38977:419::-;;39181:2;39170:9;39166:18;39158:26;;39230:9;39224:4;39220:20;39216:1;39205:9;39201:17;39194:47;39258:131;39384:4;39258:131;:::i;:::-;39250:139;;39148:248;;;:::o;39402:419::-;;39606:2;39595:9;39591:18;39583:26;;39655:9;39649:4;39645:20;39641:1;39630:9;39626:17;39619:47;39683:131;39809:4;39683:131;:::i;:::-;39675:139;;39573:248;;;:::o;39827:419::-;;40031:2;40020:9;40016:18;40008:26;;40080:9;40074:4;40070:20;40066:1;40055:9;40051:17;40044:47;40108:131;40234:4;40108:131;:::i;:::-;40100:139;;39998:248;;;:::o;40252:419::-;;40456:2;40445:9;40441:18;40433:26;;40505:9;40499:4;40495:20;40491:1;40480:9;40476:17;40469:47;40533:131;40659:4;40533:131;:::i;:::-;40525:139;;40423:248;;;:::o;40677:419::-;;40881:2;40870:9;40866:18;40858:26;;40930:9;40924:4;40920:20;40916:1;40905:9;40901:17;40894:47;40958:131;41084:4;40958:131;:::i;:::-;40950:139;;40848:248;;;:::o;41102:222::-;;41233:2;41222:9;41218:18;41210:26;;41246:71;41314:1;41303:9;41299:17;41290:6;41246:71;:::i;:::-;41200:124;;;;:::o;41330:332::-;;41489:2;41478:9;41474:18;41466:26;;41502:71;41570:1;41559:9;41555:17;41546:6;41502:71;:::i;:::-;41583:72;41651:2;41640:9;41636:18;41627:6;41583:72;:::i;:::-;41456:206;;;;;:::o;41668:129::-;;41729:20;;:::i;:::-;41719:30;;41758:33;41786:4;41778:6;41758:33;:::i;:::-;41709:88;;;:::o;41803:75::-;;41869:2;41863:9;41853:19;;41843:35;:::o;41884:311::-;;42051:18;42043:6;42040:30;42037:2;;;42073:18;;:::i;:::-;42037:2;42123:4;42115:6;42111:17;42103:25;;42183:4;42177;42173:15;42165:23;;41966:229;;;:::o;42201:311::-;;42368:18;42360:6;42357:30;42354:2;;;42390:18;;:::i;:::-;42354:2;42440:4;42432:6;42428:17;42420:25;;42500:4;42494;42490:15;42482:23;;42283:229;;;:::o;42518:307::-;;42669:18;42661:6;42658:30;42655:2;;;42691:18;;:::i;:::-;42655:2;42729:29;42751:6;42729:29;:::i;:::-;42721:37;;42813:4;42807;42803:15;42795:23;;42584:241;;;:::o;42831:308::-;;42983:18;42975:6;42972:30;42969:2;;;43005:18;;:::i;:::-;42969:2;43043:29;43065:6;43043:29;:::i;:::-;43035:37;;43127:4;43121;43117:15;43109:23;;42898:241;;;:::o;43145:132::-;;43235:3;43227:11;;43265:4;43260:3;43256:14;43248:22;;43217:60;;;:::o;43283:114::-;;43384:5;43378:12;43368:22;;43357:40;;;:::o;43403:98::-;;43488:5;43482:12;43472:22;;43461:40;;;:::o;43507:99::-;;43593:5;43587:12;43577:22;;43566:40;;;:::o;43612:113::-;;43714:4;43709:3;43705:14;43697:22;;43687:38;;;:::o;43731:184::-;;43864:6;43859:3;43852:19;43904:4;43899:3;43895:14;43880:29;;43842:73;;;;:::o;43921:168::-;;44038:6;44033:3;44026:19;44078:4;44073:3;44069:14;44054:29;;44016:73;;;;:::o;44095:169::-;;44213:6;44208:3;44201:19;44253:4;44248:3;44244:14;44229:29;;44191:73;;;;:::o;44270:305::-;;44329:20;44347:1;44329:20;:::i;:::-;44324:25;;44363:20;44381:1;44363:20;:::i;:::-;44358:25;;44517:1;44449:66;44445:74;44442:1;44439:81;44436:2;;;44523:18;;:::i;:::-;44436:2;44567:1;44564;44560:9;44553:16;;44314:261;;;;:::o;44581:191::-;;44641:20;44659:1;44641:20;:::i;:::-;44636:25;;44675:20;44693:1;44675:20;:::i;:::-;44670:25;;44714:1;44711;44708:8;44705:2;;;44719:18;;:::i;:::-;44705:2;44764:1;44761;44757:9;44749:17;;44626:146;;;;:::o;44778:96::-;;44844:24;44862:5;44844:24;:::i;:::-;44833:35;;44823:51;;;:::o;44880:90::-;;44957:5;44950:13;44943:21;44932:32;;44922:48;;;:::o;44976:77::-;;45042:5;45031:16;;45021:32;;;:::o;45059:149::-;;45135:66;45128:5;45124:78;45113:89;;45103:105;;;:::o;45214:126::-;;45291:42;45284:5;45280:54;45269:65;;45259:81;;;:::o;45346:77::-;;45412:5;45401:16;;45391:32;;;:::o;45429:154::-;45513:6;45508:3;45503;45490:30;45575:1;45566:6;45561:3;45557:16;45550:27;45480:103;;;:::o;45589:307::-;45657:1;45667:113;45681:6;45678:1;45675:13;45667:113;;;45766:1;45761:3;45757:11;45751:18;45747:1;45742:3;45738:11;45731:39;45703:2;45700:1;45696:10;45691:15;;45667:113;;;45798:6;45795:1;45792:13;45789:2;;;45878:1;45869:6;45864:3;45860:16;45853:27;45789:2;45638:258;;;;:::o;45902:320::-;;45983:1;45977:4;45973:12;45963:22;;46030:1;46024:4;46020:12;46051:18;46041:2;;46107:4;46099:6;46095:17;46085:27;;46041:2;46169;46161:6;46158:14;46138:18;46135:38;46132:2;;;46188:18;;:::i;:::-;46132:2;45953:269;;;;:::o;46228:281::-;46311:27;46333:4;46311:27;:::i;:::-;46303:6;46299:40;46441:6;46429:10;46426:22;46405:18;46393:10;46390:34;46387:62;46384:2;;;46452:18;;:::i;:::-;46384:2;46492:10;46488:2;46481:22;46271:238;;;:::o;46515:233::-;;46577:24;46595:5;46577:24;:::i;:::-;46568:33;;46623:66;46616:5;46613:77;46610:2;;;46693:18;;:::i;:::-;46610:2;46740:1;46733:5;46729:13;46722:20;;46558:190;;;:::o;46754:180::-;46802:77;46799:1;46792:88;46899:4;46896:1;46889:15;46923:4;46920:1;46913:15;46940:180;46988:77;46985:1;46978:88;47085:4;47082:1;47075:15;47109:4;47106:1;47099:15;47126:180;47174:77;47171:1;47164:88;47271:4;47268:1;47261:15;47295:4;47292:1;47285:15;47312:183;;47385:1;47367:16;47364:23;47361:2;;;47423:1;47420;47417;47402:23;47445:34;47476:1;47470:8;47445:34;:::i;:::-;47438:41;;47361:2;47351:144;:::o;47501:102::-;;47593:2;47589:7;47584:2;47577:5;47573:14;47569:28;47559:38;;47549:54;;;:::o;47609:106::-;;47702:5;47697:3;47693:15;47672:36;;47662:53;;;:::o;47721:239::-;47861:34;47857:1;47849:6;47845:14;47838:58;47930:22;47925:2;47917:6;47913:15;47906:47;47827:133;:::o;47966:221::-;48106:34;48102:1;48094:6;48090:14;48083:58;48175:4;48170:2;48162:6;48158:15;48151:29;48072:115;:::o;48193:227::-;48333:34;48329:1;48321:6;48317:14;48310:58;48402:10;48397:2;48389:6;48385:15;48378:35;48299:121;:::o;48426:234::-;48566:34;48562:1;48554:6;48550:14;48543:58;48635:17;48630:2;48622:6;48618:15;48611:42;48532:128;:::o;48666:170::-;48806:22;48802:1;48794:6;48790:14;48783:46;48772:64;:::o;48842:230::-;48982:34;48978:1;48970:6;48966:14;48959:58;49051:13;49046:2;49038:6;49034:15;49027:38;48948:124;:::o;49078:223::-;49218:34;49214:1;49206:6;49202:14;49195:58;49287:6;49282:2;49274:6;49270:15;49263:31;49184:117;:::o;49307:231::-;49447:34;49443:1;49435:6;49431:14;49424:58;49516:14;49511:2;49503:6;49499:15;49492:39;49413:125;:::o;49544:228::-;49684:34;49680:1;49672:6;49668:14;49661:58;49753:11;49748:2;49740:6;49736:15;49729:36;49650:122;:::o;49778:167::-;49918:19;49914:1;49906:6;49902:14;49895:43;49884:61;:::o;49951:235::-;50091:34;50087:1;50079:6;50075:14;50068:58;50160:18;50155:2;50147:6;50143:15;50136:43;50057:129;:::o;50192:166::-;50332:18;50328:1;50320:6;50316:14;50309:42;50298:60;:::o;50364:243::-;50504:34;50500:1;50492:6;50488:14;50481:58;50573:26;50568:2;50560:6;50556:15;50549:51;50470:137;:::o;50613:224::-;50753:34;50749:1;50741:6;50737:14;50730:58;50822:7;50817:2;50809:6;50805:15;50798:32;50719:118;:::o;50843:237::-;50983:34;50979:1;50971:6;50967:14;50960:58;51052:20;51047:2;51039:6;51035:15;51028:45;50949:131;:::o;51086:222::-;51226:34;51222:1;51214:6;51210:14;51203:58;51295:5;51290:2;51282:6;51278:15;51271:30;51192:116;:::o;51314:243::-;51454:34;51450:1;51442:6;51438:14;51431:58;51523:26;51518:2;51510:6;51506:15;51499:51;51420:137;:::o;51563:229::-;51703:34;51699:1;51691:6;51687:14;51680:58;51772:12;51767:2;51759:6;51755:15;51748:37;51669:123;:::o;51798:246::-;51938:34;51934:1;51926:6;51922:14;51915:58;52007:29;52002:2;51994:6;51990:15;51983:54;51904:140;:::o;52050:247::-;52190:34;52186:1;52178:6;52174:14;52167:58;52259:30;52254:2;52246:6;52242:15;52235:55;52156:141;:::o;52303:244::-;52443:34;52439:1;52431:6;52427:14;52420:58;52512:27;52507:2;52499:6;52495:15;52488:52;52409:138;:::o;52553:228::-;52693:34;52689:1;52681:6;52677:14;52670:58;52762:11;52757:2;52749:6;52745:15;52738:36;52659:122;:::o;52787:228::-;52927:34;52923:1;52915:6;52911:14;52904:58;52996:11;52991:2;52983:6;52979:15;52972:36;52893:122;:::o;53021:227::-;53161:34;53157:1;53149:6;53145:14;53138:58;53230:10;53225:2;53217:6;53213:15;53206:35;53127:121;:::o;53254:220::-;53394:34;53390:1;53382:6;53378:14;53371:58;53463:3;53458:2;53450:6;53446:15;53439:28;53360:114;:::o;53480:234::-;53620:34;53616:1;53608:6;53604:14;53597:58;53689:17;53684:2;53676:6;53672:15;53665:42;53586:128;:::o;53720:711::-;;53797:4;53779:16;53776:26;53773:2;;;53805:5;;53773:2;53834:20;;:::i;:::-;53909:1;53891:16;53887:24;53884:1;53878:4;53863:49;53942:4;53936:11;54041:16;54034:4;54026:6;54022:17;54019:39;53986:18;53978:6;53975:30;53959:113;53956:2;;;54087:5;;;;53956:2;54133:6;54127:4;54123:17;54169:3;54163:10;54196:18;54188:6;54185:30;54182:2;;;54218:5;;;;;;54182:2;54266:6;54259:4;54254:3;54250:14;54246:27;54325:1;54307:16;54303:24;54297:4;54293:35;54288:3;54285:44;54282:2;;;54332:5;;;;;;;54282:2;54349:57;54397:6;54391:4;54387:17;54379:6;54375:30;54369:4;54349:57;:::i;:::-;54422:3;54415:10;;53763:668;;;;;;;:::o;54437:122::-;54510:24;54528:5;54510:24;:::i;:::-;54503:5;54500:35;54490:2;;54549:1;54546;54539:12;54490:2;54480:79;:::o;54565:116::-;54635:21;54650:5;54635:21;:::i;:::-;54628:5;54625:32;54615:2;;54671:1;54668;54661:12;54615:2;54605:76;:::o;54687:122::-;54760:24;54778:5;54760:24;:::i;:::-;54753:5;54750:35;54740:2;;54799:1;54796;54789:12;54740:2;54730:79;:::o;54815:120::-;54887:23;54904:5;54887:23;:::i;:::-;54880:5;54877:34;54867:2;;54925:1;54922;54915:12;54867:2;54857:78;:::o;54941:122::-;55014:24;55032:5;55014:24;:::i;:::-;55007:5;55004:35;54994:2;;55053:1;55050;55043:12;54994:2;54984:79;:::o

Swarm Source

ipfs://ef5cf050b35fa6fd936214808ec43d7ca15bea65ac1ed86d1affef4760cce77d
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.