ETH Price: $2,652.42 (+1.23%)

Token

The Symbiosis (SYMB)
 

Overview

Max Total Supply

1,664 SYMB

Holders

852

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
electricmayhem.eth
Balance
1 SYMB
0xdd71339c50e434b4776b0c9faa7c7270774785fc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Symbiosis is an experimental breeding model from the Angry Boars project. A maximum of 3815 Symbiosis can ever be minted.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AngryBoarcats

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-15
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
pragma solidity ^0.8.10;

abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    string private _name;
    string private _symbol;
    address[] internal _owners;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint length = _owners.length;
        for( uint i = 0; i < length; ++i ){
            if( owner == _owners[i] ){
                ++count;
            }
        }
        delete length;
        return count;
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721P.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721P.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721P.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721P.ownerOf(tokenId), to, tokenId);
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.10;

abstract contract ERC721Enum is ERC721P, IERC721Enumerable {
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) {
        require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint count;
        for( uint i; i < _owners.length; ++i ){
            if( owner == _owners[i] ){
                if( count == index )
                    return i;
                else
                    ++count;
            }
        }
        require(false, "ERC721Enum: owner ioob");
    }
    function tokensOfOwner(address owner) public view returns (uint256[] memory) {
        require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob");
        return index;
    }
}

pragma solidity ^0.8.10;

interface IProducer {
    function ownerOf(uint256 _tokenId) external view returns(address);
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function burn(address add, uint256 amount) external;

    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

contract AngryBoarcats is ERC721Enum, Ownable, Pausable {
    using Strings for uint256;

    mapping(uint256 => bool) _claimedBoars;
    mapping(uint256 => bool) _claimedMeerkats;

    address public angryBoarsContractAddress;
    address public angryMeerkatsContractAddress;
    address public oinkTokenContractAddress;

    string private baseURI;
    uint256 private ETHER = 10 ** 18;

    event ChangeName(uint256 _tokenId, string text);
    event ChangeDescription(uint256 _tokenId, string text);

    uint256 public changeNamePrice = 100 ether;
    uint256 public changeDescriptionPrice = 200 ether;
    uint256 public symbiosisPrice = 450 ether;

    IProducer angryBoarsContractCaller;
    IProducer angryMeerkatsContractCaller;
    IERC20 oinkCaller;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        address _angryBoarsContractAddress,
        address _angryMeerkatsContractAddress,
        address _oinkTokenContractAddress
    ) ERC721P(_name, _symbol) {
        _pause();
        setBaseURI(_initBaseURI);

        angryBoarsContractAddress = _angryBoarsContractAddress;
        angryBoarsContractCaller = IProducer(_angryBoarsContractAddress);

        angryMeerkatsContractAddress = _angryMeerkatsContractAddress;
        angryMeerkatsContractCaller = IProducer(_angryMeerkatsContractAddress);

        oinkTokenContractAddress = _oinkTokenContractAddress;
        oinkCaller = IERC20(_oinkTokenContractAddress);
    }

    function isBoarClaimed (uint256 boar) public view returns (bool) {
        return _claimedBoars[boar];
    }

    function isMeerkatClaimed (uint256 boar) public view returns (bool) {
        return _claimedMeerkats[boar];
    }

    function updateChangeNamePrice(uint32 _value) external onlyOwner {
        changeNamePrice = _value * ETHER;
    }

    function updateChangeDescriptionPrice(uint32 _value) external onlyOwner {
        changeDescriptionPrice = _value * ETHER;
    }

    function updateSymbiosisPrice(uint32 _value) external onlyOwner {
        symbiosisPrice = _value * ETHER;
    }

    function setOinkAddress(address _address) external onlyOwner {
        oinkTokenContractAddress = _address;
        oinkCaller = IERC20(_address);
    }

    function setAngryBoarsAddress(address _address) external onlyOwner {
        angryBoarsContractAddress = _address;
        angryBoarsContractCaller = IProducer(_address);
    }

    function setMeerkatsAddress(address _address) external onlyOwner {

        angryMeerkatsContractAddress = _address;
        angryMeerkatsContractCaller = IProducer(_address);
    }

    function claimByIds(uint256[] memory angryBoarsIds, uint256[] memory angryMeerkatsIds, uint256 amount) external payable whenNotPaused {
        require(angryBoarsIds.length % 2 == 0 && angryMeerkatsIds.length % 2 == 0 && angryBoarsIds.length == angryMeerkatsIds.length, "Not enought boars and meerkats");
        require(amount == (symbiosisPrice * angryBoarsIds.length / 2), "Not enough $OINK");

        for (uint256  i = 0; i < angryBoarsIds.length; i++) {
            require(!isBoarClaimed(angryBoarsIds[i]), "The token has been already claimed");
            address angryBoarOwner = angryBoarsContractCaller.ownerOf(angryBoarsIds[i]);
            require(angryBoarOwner == msg.sender, "You do not own the token with the provided id");
        }

        for (uint256  i = 0; i < angryMeerkatsIds.length; i++) {
            require(!isMeerkatClaimed(angryMeerkatsIds[i]), "The token has been already claimed");
            address angryMeerkatOwner = angryMeerkatsContractCaller.ownerOf(angryMeerkatsIds[i]);
            require(angryMeerkatOwner == msg.sender, "You do not own the token with the provided id");
        }

        for (uint256  i = 0; i < angryBoarsIds.length; i++) {
            _claimedBoars[angryBoarsIds[i]] = true;
            _claimedMeerkats[angryMeerkatsIds[i]] = true;
        }

        oinkCaller.burn(msg.sender, amount);

        for (uint256  i = 0; i < (angryBoarsIds.length / 2); i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function claimByIdsOwner(uint256[] memory angryBoarsIds, uint256[] memory angryMeerkatsIds, uint256 amount) external payable onlyOwner {
        require(angryBoarsIds.length % 2 == 0 && angryMeerkatsIds.length % 2 == 0 && angryBoarsIds.length == angryMeerkatsIds.length, "Not enought boars and meerkats");
        require(amount == (symbiosisPrice * angryBoarsIds.length / 2), "Not enough $OINK");

        for (uint256  i = 0; i < angryBoarsIds.length; i++) {
            address angryBoarOwner = angryBoarsContractCaller.ownerOf(angryBoarsIds[i]);
            require(angryBoarOwner == msg.sender, "You do not own the token with the provided id");
            require(!isBoarClaimed(angryBoarsIds[i]), "The token has been already claimed");
        }

        for (uint256  i = 0; i < angryMeerkatsIds.length; i++) {
            address angryMeerkatOwner = angryMeerkatsContractCaller.ownerOf(angryMeerkatsIds[i]);
            require(angryMeerkatOwner == msg.sender, "You do not own the token with the provided id");
            require(!isMeerkatClaimed(angryMeerkatsIds[i]), "The token has been already claimed");
        }

        for (uint256  i = 0; i < angryBoarsIds.length; i++) {
            _claimedBoars[angryBoarsIds[i]] = true;
            _claimedMeerkats[angryMeerkatsIds[i]] = true;
        }

        oinkCaller.burn(msg.sender, amount);

        for (uint256  i = 0; i < (angryBoarsIds.length / 2); i++) {
            _safeMint(msg.sender, totalSupply());
        }
    }

    function changeName(uint256 _tokenId, string calldata _name, uint256 _amount) public payable whenNotPaused {
        address owner = ownerOf(_tokenId);
        require(owner == msg.sender, "You do not own the token with the provided id");
        require(_amount == changeNamePrice, "Not enough $OINK");
        oinkCaller.burn(msg.sender, _amount);
        emit ChangeName(_tokenId, _name);
    }

    function changeDescription(uint256 _tokenId, string calldata _description, uint256 _amount) public payable whenNotPaused {
        address owner = ownerOf(_tokenId);
        require(owner == msg.sender, "You do not own the token with the provided id");
        require(_amount == changeDescriptionPrice, "Not enough $OINK");
        oinkCaller.burn(msg.sender, _amount);
        emit ChangeDescription(_tokenId, _description);
    }

    // internal
    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }

    function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) {
        require(_exists(_tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : "";
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_angryBoarsContractAddress","type":"address"},{"internalType":"address","name":"_angryMeerkatsContractAddress","type":"address"},{"internalType":"address","name":"_oinkTokenContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"text","type":"string"}],"name":"ChangeDescription","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"text","type":"string"}],"name":"ChangeName","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"angryBoarsContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"angryMeerkatsContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeDescription","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"changeDescriptionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeName","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"changeNamePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"angryBoarsIds","type":"uint256[]"},{"internalType":"uint256[]","name":"angryMeerkatsIds","type":"uint256[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimByIds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"angryBoarsIds","type":"uint256[]"},{"internalType":"uint256[]","name":"angryMeerkatsIds","type":"uint256[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimByIdsOwner","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"boar","type":"uint256"}],"name":"isBoarClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"boar","type":"uint256"}],"name":"isMeerkatClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oinkTokenContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAngryBoarsAddress","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMeerkatsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setOinkAddress","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":"symbiosisPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_value","type":"uint32"}],"name":"updateChangeDescriptionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_value","type":"uint32"}],"name":"updateChangeNamePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_value","type":"uint32"}],"name":"updateSymbiosisPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a7640000600c5568056bc75e2d63100000600d55680ad78ebc5ac6200000600e556818650127cc3dc80000600f553480156200004457600080fd5b50604051620061313803806200613183398181016040528101906200006a9190620007b2565b858581600090805190602001906200008492919062000500565b5080600190805190602001906200009d92919062000500565b505050620000c0620000b46200028e60201b60201c565b6200029660201b60201c565b6000600560146101000a81548160ff021916908315150217905550620000eb6200035c60201b60201c565b620000fc846200041460201b60201c565b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000a33565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200036c620004bf60201b60201c565b15620003af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a6906200090c565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003fb6200028e60201b60201c565b6040516200040a91906200093f565b60405180910390a1565b620004246200028e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200044a620004d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049a90620009ac565b60405180910390fd5b80600b9080519060200190620004bb92919062000500565b5050565b6000600560149054906101000a900460ff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200050e90620009fd565b90600052602060002090601f0160209004810192826200053257600085556200057e565b82601f106200054d57805160ff19168380011785556200057e565b828001600101855582156200057e579182015b828111156200057d57825182559160200191906001019062000560565b5b5090506200058d919062000591565b5090565b5b80821115620005ac57600081600090555060010162000592565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061982620005ce565b810181811067ffffffffffffffff821117156200063b576200063a620005df565b5b80604052505050565b600062000650620005b0565b90506200065e82826200060e565b919050565b600067ffffffffffffffff821115620006815762000680620005df565b5b6200068c82620005ce565b9050602081019050919050565b60005b83811015620006b95780820151818401526020810190506200069c565b83811115620006c9576000848401525b50505050565b6000620006e6620006e08462000663565b62000644565b905082815260208101848484011115620007055762000704620005c9565b5b6200071284828562000699565b509392505050565b600082601f830112620007325762000731620005c4565b5b815162000744848260208601620006cf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200077a826200074d565b9050919050565b6200078c816200076d565b81146200079857600080fd5b50565b600081519050620007ac8162000781565b92915050565b60008060008060008060c08789031215620007d257620007d1620005ba565b5b600087015167ffffffffffffffff811115620007f357620007f2620005bf565b5b6200080189828a016200071a565b965050602087015167ffffffffffffffff811115620008255762000824620005bf565b5b6200083389828a016200071a565b955050604087015167ffffffffffffffff811115620008575762000856620005bf565b5b6200086589828a016200071a565b94505060606200087889828a016200079b565b93505060806200088b89828a016200079b565b92505060a06200089e89828a016200079b565b9150509295509295509295565b600082825260208201905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620008f4601083620008ab565b91506200090182620008bc565b602082019050919050565b600060208201905081810360008301526200092781620008e5565b9050919050565b62000939816200076d565b82525050565b60006020820190506200095660008301846200092e565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000994602083620008ab565b9150620009a1826200095c565b602082019050919050565b60006020820190508181036000830152620009c78162000985565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a1657607f821691505b6020821081141562000a2d5762000a2c620009ce565b5b50919050565b6156ee8062000a436000396000f3fe6080604052600436106102515760003560e01c806368fe33351161013957806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd14610873578063d078a1b6146108b0578063d7461f1e146108ed578063e985e9c514610916578063f2fde38b14610953578063fdabdd3d1461097c57610251565b806395d89b41146107af578063a22cb465146107da578063ae58409b14610803578063b88d4fde1461082e578063c147185d1461085757610251565b806377675ea0116100fd57806377675ea0146106dc5780637fd9cc01146107055780638456cb59146107305780638462151c146107475780638da5cb5b1461078457610251565b806368fe3335146106135780636ac196bd1461062f57806370a082311461064b578063715018a61461068857806373ae7d761461069f57610251565b80632ff3d10f116101d2578063437866351161019657806343786635146104f35780634f6ccce71461051c57806355f804b3146105595780635b384371146105825780635c975abb146105ab5780636352211e146105d657610251565b80632ff3d10f146104325780633076df451461045d5780633f327275146104885780633f4ba83a146104b357806342842e0e146104ca57610251565b80630d250cee116102195780630d250cee1461034d57806318160ddd1461037657806321f1971b146103a157806323b872dd146103cc5780632f745c59146103f557610251565b806301ffc9a71461025657806305c31e1b1461029357806306fdde03146102bc578063081812fc146102e7578063095ea7b314610324575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613bf7565b610998565b60405161028a9190613c3f565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613cb8565b610a12565b005b3480156102c857600080fd5b506102d1610b13565b6040516102de9190613d7e565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613dd6565b610ba5565b60405161031b9190613e12565b60405180910390f35b34801561033057600080fd5b5061034b60048036038101906103469190613e2d565b610c2a565b005b34801561035957600080fd5b50610374600480360381019061036f9190613ea9565b610d42565b005b34801561038257600080fd5b5061038b610ddb565b6040516103989190613ee5565b60405180910390f35b3480156103ad57600080fd5b506103b6610de8565b6040516103c39190613ee5565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613f00565b610dee565b005b34801561040157600080fd5b5061041c60048036038101906104179190613e2d565b610e4e565b6040516104299190613ee5565b60405180910390f35b34801561043e57600080fd5b50610447610f97565b6040516104549190613ee5565b60405180910390f35b34801561046957600080fd5b50610472610f9d565b60405161047f9190613e12565b60405180910390f35b34801561049457600080fd5b5061049d610fc3565b6040516104aa9190613ee5565b60405180910390f35b3480156104bf57600080fd5b506104c8610fc9565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613f00565b61104f565b005b3480156104ff57600080fd5b5061051a60048036038101906105159190613ea9565b61106f565b005b34801561052857600080fd5b50610543600480360381019061053e9190613dd6565b611108565b6040516105509190613ee5565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190614088565b61115b565b005b34801561058e57600080fd5b506105a960048036038101906105a49190613ea9565b6111f1565b005b3480156105b757600080fd5b506105c061128a565b6040516105cd9190613c3f565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613dd6565b6112a1565b60405161060a9190613e12565b60405180910390f35b61062d60048036038101906106289190614199565b61135e565b005b6106496004803603810190610644919061427f565b61194d565b005b34801561065757600080fd5b50610672600480360381019061066d9190613cb8565b611b25565b60405161067f9190613ee5565b60405180910390f35b34801561069457600080fd5b5061069d611c4b565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613dd6565b611cd3565b6040516106d39190613c3f565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190613cb8565b611cfd565b005b34801561071157600080fd5b5061071a611dfe565b6040516107279190613e12565b60405180910390f35b34801561073c57600080fd5b50610745611e24565b005b34801561075357600080fd5b5061076e60048036038101906107699190613cb8565b611eaa565b60405161077b91906143b1565b60405180910390f35b34801561079057600080fd5b50610799611fa3565b6040516107a69190613e12565b60405180910390f35b3480156107bb57600080fd5b506107c4611fcd565b6040516107d19190613d7e565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc91906143ff565b61205f565b005b34801561080f57600080fd5b506108186121e0565b6040516108259190613e12565b60405180910390f35b34801561083a57600080fd5b50610855600480360381019061085091906144e0565b612206565b005b610871600480360381019061086c919061427f565b612268565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613dd6565b612440565b6040516108a79190613d7e565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190613dd6565b6124e7565b6040516108e49190613c3f565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190613cb8565b612511565b005b34801561092257600080fd5b5061093d60048036038101906109389190614563565b612612565b60405161094a9190613c3f565b60405180910390f35b34801561095f57600080fd5b5061097a60048036038101906109759190613cb8565b6126a6565b005b61099660048036038101906109919190614199565b61279e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0b5750610a0a82612dc1565b5b9050919050565b610a1a612ea3565b73ffffffffffffffffffffffffffffffffffffffff16610a38611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a85906145ef565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610b229061463e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e9061463e565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b5050505050905090565b6000610bb082612eab565b610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be6906146e2565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c35826112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90614774565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc5612ea3565b73ffffffffffffffffffffffffffffffffffffffff161480610cf45750610cf381610cee612ea3565b612612565b5b610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614806565b60405180910390fd5b610d3d8383612f33565b505050565b610d4a612ea3565b73ffffffffffffffffffffffffffffffffffffffff16610d68611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db5906145ef565b60405180910390fd5b600c548163ffffffff16610dd29190614855565b600f8190555050565b6000600280549050905090565b600f5481565b610dff610df9612ea3565b82612fec565b610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590614921565b60405180910390fd5b610e498383836130ca565b505050565b6000610e5983611b25565b8210610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061498d565b60405180910390fd5b6000805b600280549050811015610f4d5760028181548110610ebf57610ebe6149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f3c5783821415610f2f578092505050610f91565b81610f39906149dc565b91505b80610f46906149dc565b9050610e9e565b506000610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061498d565b60405180910390fd5b505b92915050565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b610fd1612ea3565b73ffffffffffffffffffffffffffffffffffffffff16610fef611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c906145ef565b60405180910390fd5b61104d613283565b565b61106a83838360405180602001604052806000815250612206565b505050565b611077612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611095611fa3565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e2906145ef565b60405180910390fd5b600c548163ffffffff166110ff9190614855565b600e8190555050565b6000611112610ddb565b8210611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90614a71565b60405180910390fd5b819050919050565b611163612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611181611fa3565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce906145ef565b60405180910390fd5b80600b90805190602001906111ed929190613ae8565b5050565b6111f9612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611217611fa3565b73ffffffffffffffffffffffffffffffffffffffff161461126d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611264906145ef565b60405180910390fd5b600c548163ffffffff166112819190614855565b600d8190555050565b6000600560149054906101000a900460ff16905090565b600080600283815481106112b8576112b76149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90614b03565b60405180910390fd5b80915050919050565b61136661128a565b156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90614b6f565b60405180910390fd5b6000600284516113b69190614bbe565b1480156113d057506000600283516113ce9190614bbe565b145b80156113dd575081518351145b61141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390614c3b565b60405180910390fd5b60028351600f5461142d9190614855565b6114379190614c5b565b8114611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90614cd8565b60405180910390fd5b60005b8351811015611623576114a784828151811061149a576114996149ad565b5b6020026020010151611cd3565b156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90614d6a565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e86848151811061153a576115396149ad565b5b60200260200101516040518263ffffffff1660e01b815260040161155e9190613ee5565b602060405180830381865afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f9190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614e3e565b60405180910390fd5b50808061161b906149dc565b91505061147b565b5060005b82518110156117cf57611653838281518110611646576116456149ad565b5b60200260200101516124e7565b15611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90614d6a565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8584815181106116e6576116e56149ad565b5b60200260200101516040518263ffffffff1660e01b815260040161170a9190613ee5565b602060405180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b9190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290614e3e565b60405180910390fd5b5080806117c7906149dc565b915050611627565b5060005b835181101561187b576001600660008684815181106117f5576117f46149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600085848151811061183b5761183a6149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611873906149dc565b9150506117d3565b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b81526004016118d9929190614e5e565b600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b5050505060005b6002845161191c9190614c5b565b811015611947576119343361192f610ddb565b613325565b808061193f906149dc565b91505061190e565b50505050565b61195561128a565b15611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90614b6f565b60405180910390fd5b60006119a0856112a1565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790614e3e565b60405180910390fd5b600d548214611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90614cd8565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b8152600401611ab1929190614e5e565b600060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b505050507f355e6037a3f9c646870e44d77364164d02ab85580efdbb66363b503c3a25f5af858585604051611b1693929190614eb4565b60405180910390a15050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d90614f58565b60405180910390fd5b600080600280549050905060005b81811015611c3c5760028181548110611bc057611bbf6149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c2b5782611c28906149dc565b92505b80611c35906149dc565b9050611ba4565b50600090508192505050919050565b611c53612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611c71611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe906145ef565b60405180910390fd5b611cd16000613343565b565b60006006600083815260200190815260200160002060009054906101000a900460ff169050919050565b611d05612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611d23611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d70906145ef565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e2c612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611e4a611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e97906145ef565b60405180910390fd5b611ea8613409565b565b6060611eb582611b25565b600010611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee9061498d565b60405180910390fd5b6000611f0283611b25565b905060008167ffffffffffffffff811115611f2057611f1f613f5d565b5b604051908082528060200260200182016040528015611f4e5781602001602082028036833780820191505090505b50905060005b82811015611f9857611f668582610e4e565b828281518110611f7957611f786149ad565b5b6020026020010181815250508080611f90906149dc565b915050611f54565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611fdc9061463e565b80601f01602080910402602001604051908101604052809291908181526020018280546120089061463e565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b5050505050905090565b612067612ea3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614fc4565b60405180910390fd5b80600460006120e2612ea3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661218f612ea3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121d49190613c3f565b60405180910390a35050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612217612211612ea3565b83612fec565b612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90614921565b60405180910390fd5b612262848484846134ac565b50505050565b61227061128a565b156122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790614b6f565b60405180910390fd5b60006122bb856112a1565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232290614e3e565b60405180910390fd5b600e54821461236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236690614cd8565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b81526004016123cc929190614e5e565b600060405180830381600087803b1580156123e657600080fd5b505af11580156123fa573d6000803e3d6000fd5b505050507fe72a0fdc67c78145d43ca3ff95dee8fbcb620d013214e0c88e1039c9e6eed65f85858560405161243193929190614eb4565b60405180910390a15050505050565b606061244b82612eab565b61248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248190615056565b60405180910390fd5b6000612494613508565b905060008151116124b457604051806020016040528060008152506124df565b806124be8461359a565b6040516020016124cf9291906150fe565b6040516020818303038152906040525b915050919050565b60006007600083815260200190815260200160002060009054906101000a900460ff169050919050565b612519612ea3565b73ffffffffffffffffffffffffffffffffffffffff16612537611fa3565b73ffffffffffffffffffffffffffffffffffffffff161461258d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612584906145ef565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126ae612ea3565b73ffffffffffffffffffffffffffffffffffffffff166126cc611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612719906145ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612792576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127899061519f565b60405180910390fd5b61279b81613343565b50565b6127a6612ea3565b73ffffffffffffffffffffffffffffffffffffffff166127c4611fa3565b73ffffffffffffffffffffffffffffffffffffffff161461281a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612811906145ef565b60405180910390fd5b60006002845161282a9190614bbe565b14801561284457506000600283516128429190614bbe565b145b8015612851575081518351145b612890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288790614c3b565b60405180910390fd5b60028351600f546128a19190614855565b6128ab9190614c5b565b81146128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e390614cd8565b60405180910390fd5b60005b8351811015612a97576000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e86848151811061294b5761294a6149ad565b5b60200260200101516040518263ffffffff1660e01b815260040161296f9190613ee5565b602060405180830381865afa15801561298c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b09190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1790614e3e565b60405180910390fd5b612a43858381518110612a3657612a356149ad565b5b6020026020010151611cd3565b15612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a90614d6a565b60405180910390fd5b508080612a8f906149dc565b9150506128ef565b5060005b8251811015612c43576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858481518110612af757612af66149ad565b5b60200260200101516040518263ffffffff1660e01b8152600401612b1b9190613ee5565b602060405180830381865afa158015612b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5c9190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc390614e3e565b60405180910390fd5b612bef848381518110612be257612be16149ad565b5b60200260200101516124e7565b15612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2690614d6a565b60405180910390fd5b508080612c3b906149dc565b915050612a9b565b5060005b8351811015612cef57600160066000868481518110612c6957612c686149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000858481518110612caf57612cae6149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612ce7906149dc565b915050612c47565b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401612d4d929190614e5e565b600060405180830381600087803b158015612d6757600080fd5b505af1158015612d7b573d6000803e3d6000fd5b5050505060005b60028451612d909190614c5b565b811015612dbb57612da833612da3610ddb565b613325565b8080612db3906149dc565b915050612d82565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e9c5750612e9b826136fb565b5b9050919050565b600033905090565b600060028054905082108015612f2c5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110612ee857612ee76149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612fa6836112a1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612ff782612eab565b613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90615231565b60405180910390fd5b6000613041836112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130b057508373ffffffffffffffffffffffffffffffffffffffff1661309884610ba5565b73ffffffffffffffffffffffffffffffffffffffff16145b806130c157506130c08185612612565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130ea826112a1565b73ffffffffffffffffffffffffffffffffffffffff1614613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906152c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a790615355565b60405180910390fd5b6131bb838383613765565b6131c6600082612f33565b81600282815481106131db576131da6149ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61328b61128a565b6132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c1906153c1565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61330e612ea3565b60405161331b9190613e12565b60405180910390a1565b61333f82826040518060200160405280600081525061376a565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61341161128a565b15613451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344890614b6f565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613495612ea3565b6040516134a29190613e12565b60405180910390a1565b6134b78484846130ca565b6134c3848484846137c5565b613502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f990615453565b60405180910390fd5b50505050565b6060600b80546135179061463e565b80601f01602080910402602001604051908101604052809291908181526020018280546135439061463e565b80156135905780601f1061356557610100808354040283529160200191613590565b820191906000526020600020905b81548152906001019060200180831161357357829003601f168201915b5050505050905090565b606060008214156135e2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506136f6565b600082905060005b600082146136145780806135fd906149dc565b915050600a8261360d9190614c5b565b91506135ea565b60008167ffffffffffffffff8111156136305761362f613f5d565b5b6040519080825280601f01601f1916602001820160405280156136625781602001600182028036833780820191505090505b5090505b600085146136ef5760018261367b9190615473565b9150600a8561368a9190614bbe565b603061369691906154a7565b60f81b8183815181106136ac576136ab6149ad565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856136e89190614c5b565b9450613666565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b613774838361394d565b61378160008484846137c5565b6137c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b790615453565b60405180910390fd5b505050565b60006137e68473ffffffffffffffffffffffffffffffffffffffff16613ad5565b15613940578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261380f612ea3565b8786866040518563ffffffff1660e01b81526004016138319493929190615552565b6020604051808303816000875af192505050801561386d57506040513d601f19601f8201168201806040525081019061386a91906155b3565b60015b6138f0573d806000811461389d576040519150601f19603f3d011682016040523d82523d6000602084013e6138a2565b606091505b506000815114156138e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138df90615453565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613945565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139b49061562c565b60405180910390fd5b6139c681612eab565b15613a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139fd90615698565b60405180910390fd5b613a1260008383613765565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613af49061463e565b90600052602060002090601f016020900481019282613b165760008555613b5d565b82601f10613b2f57805160ff1916838001178555613b5d565b82800160010185558215613b5d579182015b82811115613b5c578251825591602001919060010190613b41565b5b509050613b6a9190613b6e565b5090565b5b80821115613b87576000816000905550600101613b6f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613bd481613b9f565b8114613bdf57600080fd5b50565b600081359050613bf181613bcb565b92915050565b600060208284031215613c0d57613c0c613b95565b5b6000613c1b84828501613be2565b91505092915050565b60008115159050919050565b613c3981613c24565b82525050565b6000602082019050613c546000830184613c30565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c8582613c5a565b9050919050565b613c9581613c7a565b8114613ca057600080fd5b50565b600081359050613cb281613c8c565b92915050565b600060208284031215613cce57613ccd613b95565b5b6000613cdc84828501613ca3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d1f578082015181840152602081019050613d04565b83811115613d2e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d5082613ce5565b613d5a8185613cf0565b9350613d6a818560208601613d01565b613d7381613d34565b840191505092915050565b60006020820190508181036000830152613d988184613d45565b905092915050565b6000819050919050565b613db381613da0565b8114613dbe57600080fd5b50565b600081359050613dd081613daa565b92915050565b600060208284031215613dec57613deb613b95565b5b6000613dfa84828501613dc1565b91505092915050565b613e0c81613c7a565b82525050565b6000602082019050613e276000830184613e03565b92915050565b60008060408385031215613e4457613e43613b95565b5b6000613e5285828601613ca3565b9250506020613e6385828601613dc1565b9150509250929050565b600063ffffffff82169050919050565b613e8681613e6d565b8114613e9157600080fd5b50565b600081359050613ea381613e7d565b92915050565b600060208284031215613ebf57613ebe613b95565b5b6000613ecd84828501613e94565b91505092915050565b613edf81613da0565b82525050565b6000602082019050613efa6000830184613ed6565b92915050565b600080600060608486031215613f1957613f18613b95565b5b6000613f2786828701613ca3565b9350506020613f3886828701613ca3565b9250506040613f4986828701613dc1565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f9582613d34565b810181811067ffffffffffffffff82111715613fb457613fb3613f5d565b5b80604052505050565b6000613fc7613b8b565b9050613fd38282613f8c565b919050565b600067ffffffffffffffff821115613ff357613ff2613f5d565b5b613ffc82613d34565b9050602081019050919050565b82818337600083830152505050565b600061402b61402684613fd8565b613fbd565b90508281526020810184848401111561404757614046613f58565b5b614052848285614009565b509392505050565b600082601f83011261406f5761406e613f53565b5b813561407f848260208601614018565b91505092915050565b60006020828403121561409e5761409d613b95565b5b600082013567ffffffffffffffff8111156140bc576140bb613b9a565b5b6140c88482850161405a565b91505092915050565b600067ffffffffffffffff8211156140ec576140eb613f5d565b5b602082029050602081019050919050565b600080fd5b6000614115614110846140d1565b613fbd565b90508083825260208201905060208402830185811115614138576141376140fd565b5b835b81811015614161578061414d8882613dc1565b84526020840193505060208101905061413a565b5050509392505050565b600082601f8301126141805761417f613f53565b5b8135614190848260208601614102565b91505092915050565b6000806000606084860312156141b2576141b1613b95565b5b600084013567ffffffffffffffff8111156141d0576141cf613b9a565b5b6141dc8682870161416b565b935050602084013567ffffffffffffffff8111156141fd576141fc613b9a565b5b6142098682870161416b565b925050604061421a86828701613dc1565b9150509250925092565b600080fd5b60008083601f84011261423f5761423e613f53565b5b8235905067ffffffffffffffff81111561425c5761425b614224565b5b602083019150836001820283011115614278576142776140fd565b5b9250929050565b6000806000806060858703121561429957614298613b95565b5b60006142a787828801613dc1565b945050602085013567ffffffffffffffff8111156142c8576142c7613b9a565b5b6142d487828801614229565b935093505060406142e787828801613dc1565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61432881613da0565b82525050565b600061433a838361431f565b60208301905092915050565b6000602082019050919050565b600061435e826142f3565b61436881856142fe565b93506143738361430f565b8060005b838110156143a457815161438b888261432e565b975061439683614346565b925050600181019050614377565b5085935050505092915050565b600060208201905081810360008301526143cb8184614353565b905092915050565b6143dc81613c24565b81146143e757600080fd5b50565b6000813590506143f9816143d3565b92915050565b6000806040838503121561441657614415613b95565b5b600061442485828601613ca3565b9250506020614435858286016143ea565b9150509250929050565b600067ffffffffffffffff82111561445a57614459613f5d565b5b61446382613d34565b9050602081019050919050565b600061448361447e8461443f565b613fbd565b90508281526020810184848401111561449f5761449e613f58565b5b6144aa848285614009565b509392505050565b600082601f8301126144c7576144c6613f53565b5b81356144d7848260208601614470565b91505092915050565b600080600080608085870312156144fa576144f9613b95565b5b600061450887828801613ca3565b945050602061451987828801613ca3565b935050604061452a87828801613dc1565b925050606085013567ffffffffffffffff81111561454b5761454a613b9a565b5b614557878288016144b2565b91505092959194509250565b6000806040838503121561457a57614579613b95565b5b600061458885828601613ca3565b925050602061459985828601613ca3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145d9602083613cf0565b91506145e4826145a3565b602082019050919050565b60006020820190508181036000830152614608816145cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061465657607f821691505b6020821081141561466a5761466961460f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146cc602c83613cf0565b91506146d782614670565b604082019050919050565b600060208201905081810360008301526146fb816146bf565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061475e602183613cf0565b915061476982614702565b604082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006147f0603883613cf0565b91506147fb82614794565b604082019050919050565b6000602082019050818103600083015261481f816147e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061486082613da0565b915061486b83613da0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a4576148a3614826565b5b828202905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061490b603183613cf0565b9150614916826148af565b604082019050919050565b6000602082019050818103600083015261493a816148fe565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000614977601683613cf0565b915061498282614941565b602082019050919050565b600060208201905081810360008301526149a68161496a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149e782613da0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a1a57614a19614826565b5b600182019050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000614a5b601783613cf0565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614aed602983613cf0565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614b59601083613cf0565b9150614b6482614b23565b602082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc982613da0565b9150614bd483613da0565b925082614be457614be3614b8f565b5b828206905092915050565b7f4e6f7420656e6f7567687420626f61727320616e64206d6565726b6174730000600082015250565b6000614c25601e83613cf0565b9150614c3082614bef565b602082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b6000614c6682613da0565b9150614c7183613da0565b925082614c8157614c80614b8f565b5b828204905092915050565b7f4e6f7420656e6f75676820244f494e4b00000000000000000000000000000000600082015250565b6000614cc2601083613cf0565b9150614ccd82614c8c565b602082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f54686520746f6b656e20686173206265656e20616c726561647920636c61696d60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d54602283613cf0565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b600081519050614d9981613c8c565b92915050565b600060208284031215614db557614db4613b95565b5b6000614dc384828501614d8a565b91505092915050565b7f596f7520646f206e6f74206f776e2074686520746f6b656e207769746820746860008201527f652070726f766964656420696400000000000000000000000000000000000000602082015250565b6000614e28602d83613cf0565b9150614e3382614dcc565b604082019050919050565b60006020820190508181036000830152614e5781614e1b565b9050919050565b6000604082019050614e736000830185613e03565b614e806020830184613ed6565b9392505050565b6000614e938385613cf0565b9350614ea0838584614009565b614ea983613d34565b840190509392505050565b6000604082019050614ec96000830186613ed6565b8181036020830152614edc818486614e87565b9050949350505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614f42602a83613cf0565b9150614f4d82614ee6565b604082019050919050565b60006020820190508181036000830152614f7181614f35565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614fae601983613cf0565b9150614fb982614f78565b602082019050919050565b60006020820190508181036000830152614fdd81614fa1565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000615040602183613cf0565b915061504b82614fe4565b604082019050919050565b6000602082019050818103600083015261506f81615033565b9050919050565b600081905092915050565b600061508c82613ce5565b6150968185615076565b93506150a6818560208601613d01565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006150e8600583615076565b91506150f3826150b2565b600582019050919050565b600061510a8285615081565b91506151168284615081565b9150615121826150db565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615189602683613cf0565b91506151948261512d565b604082019050919050565b600060208201905081810360008301526151b88161517c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061521b602c83613cf0565b9150615226826151bf565b604082019050919050565b6000602082019050818103600083015261524a8161520e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006152ad602983613cf0565b91506152b882615251565b604082019050919050565b600060208201905081810360008301526152dc816152a0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061533f602483613cf0565b915061534a826152e3565b604082019050919050565b6000602082019050818103600083015261536e81615332565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006153ab601483613cf0565b91506153b682615375565b602082019050919050565b600060208201905081810360008301526153da8161539e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061543d603283613cf0565b9150615448826153e1565b604082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b600061547e82613da0565b915061548983613da0565b92508282101561549c5761549b614826565b5b828203905092915050565b60006154b282613da0565b91506154bd83613da0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154f2576154f1614826565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000615524826154fd565b61552e8185615508565b935061553e818560208601613d01565b61554781613d34565b840191505092915050565b60006080820190506155676000830187613e03565b6155746020830186613e03565b6155816040830185613ed6565b81810360608301526155938184615519565b905095945050505050565b6000815190506155ad81613bcb565b92915050565b6000602082840312156155c9576155c8613b95565b5b60006155d78482850161559e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615616602083613cf0565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615682601c83613cf0565b915061568d8261564c565b602082019050919050565b600060208201905081810360008301526156b181615675565b905091905056fea26469706673582212201379780b27bc0840e66e3c59e7d59d5e7ed8318f1fc13c5df175ae378bae9cda64736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a66cc78067fd1e6aa3eec4ccdff88d81527f92c1000000000000000000000000d5c5927c9db9da82acfb29ed51554d25f2ef7b7e000000000000000000000000bbf449cf8174c0cca4452fbe4785d8851a2fd641000000000000000000000000000000000000000000000000000000000000000d5468652053796d62696f73697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453594d4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f61622d73796d62696f7369732f6d657461646174612f0000000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c806368fe33351161013957806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd14610873578063d078a1b6146108b0578063d7461f1e146108ed578063e985e9c514610916578063f2fde38b14610953578063fdabdd3d1461097c57610251565b806395d89b41146107af578063a22cb465146107da578063ae58409b14610803578063b88d4fde1461082e578063c147185d1461085757610251565b806377675ea0116100fd57806377675ea0146106dc5780637fd9cc01146107055780638456cb59146107305780638462151c146107475780638da5cb5b1461078457610251565b806368fe3335146106135780636ac196bd1461062f57806370a082311461064b578063715018a61461068857806373ae7d761461069f57610251565b80632ff3d10f116101d2578063437866351161019657806343786635146104f35780634f6ccce71461051c57806355f804b3146105595780635b384371146105825780635c975abb146105ab5780636352211e146105d657610251565b80632ff3d10f146104325780633076df451461045d5780633f327275146104885780633f4ba83a146104b357806342842e0e146104ca57610251565b80630d250cee116102195780630d250cee1461034d57806318160ddd1461037657806321f1971b146103a157806323b872dd146103cc5780632f745c59146103f557610251565b806301ffc9a71461025657806305c31e1b1461029357806306fdde03146102bc578063081812fc146102e7578063095ea7b314610324575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613bf7565b610998565b60405161028a9190613c3f565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613cb8565b610a12565b005b3480156102c857600080fd5b506102d1610b13565b6040516102de9190613d7e565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613dd6565b610ba5565b60405161031b9190613e12565b60405180910390f35b34801561033057600080fd5b5061034b60048036038101906103469190613e2d565b610c2a565b005b34801561035957600080fd5b50610374600480360381019061036f9190613ea9565b610d42565b005b34801561038257600080fd5b5061038b610ddb565b6040516103989190613ee5565b60405180910390f35b3480156103ad57600080fd5b506103b6610de8565b6040516103c39190613ee5565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613f00565b610dee565b005b34801561040157600080fd5b5061041c60048036038101906104179190613e2d565b610e4e565b6040516104299190613ee5565b60405180910390f35b34801561043e57600080fd5b50610447610f97565b6040516104549190613ee5565b60405180910390f35b34801561046957600080fd5b50610472610f9d565b60405161047f9190613e12565b60405180910390f35b34801561049457600080fd5b5061049d610fc3565b6040516104aa9190613ee5565b60405180910390f35b3480156104bf57600080fd5b506104c8610fc9565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613f00565b61104f565b005b3480156104ff57600080fd5b5061051a60048036038101906105159190613ea9565b61106f565b005b34801561052857600080fd5b50610543600480360381019061053e9190613dd6565b611108565b6040516105509190613ee5565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b9190614088565b61115b565b005b34801561058e57600080fd5b506105a960048036038101906105a49190613ea9565b6111f1565b005b3480156105b757600080fd5b506105c061128a565b6040516105cd9190613c3f565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613dd6565b6112a1565b60405161060a9190613e12565b60405180910390f35b61062d60048036038101906106289190614199565b61135e565b005b6106496004803603810190610644919061427f565b61194d565b005b34801561065757600080fd5b50610672600480360381019061066d9190613cb8565b611b25565b60405161067f9190613ee5565b60405180910390f35b34801561069457600080fd5b5061069d611c4b565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613dd6565b611cd3565b6040516106d39190613c3f565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190613cb8565b611cfd565b005b34801561071157600080fd5b5061071a611dfe565b6040516107279190613e12565b60405180910390f35b34801561073c57600080fd5b50610745611e24565b005b34801561075357600080fd5b5061076e60048036038101906107699190613cb8565b611eaa565b60405161077b91906143b1565b60405180910390f35b34801561079057600080fd5b50610799611fa3565b6040516107a69190613e12565b60405180910390f35b3480156107bb57600080fd5b506107c4611fcd565b6040516107d19190613d7e565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc91906143ff565b61205f565b005b34801561080f57600080fd5b506108186121e0565b6040516108259190613e12565b60405180910390f35b34801561083a57600080fd5b50610855600480360381019061085091906144e0565b612206565b005b610871600480360381019061086c919061427f565b612268565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613dd6565b612440565b6040516108a79190613d7e565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190613dd6565b6124e7565b6040516108e49190613c3f565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190613cb8565b612511565b005b34801561092257600080fd5b5061093d60048036038101906109389190614563565b612612565b60405161094a9190613c3f565b60405180910390f35b34801561095f57600080fd5b5061097a60048036038101906109759190613cb8565b6126a6565b005b61099660048036038101906109919190614199565b61279e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0b5750610a0a82612dc1565b5b9050919050565b610a1a612ea3565b73ffffffffffffffffffffffffffffffffffffffff16610a38611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a85906145ef565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610b229061463e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e9061463e565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b5050505050905090565b6000610bb082612eab565b610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be6906146e2565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c35826112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90614774565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc5612ea3565b73ffffffffffffffffffffffffffffffffffffffff161480610cf45750610cf381610cee612ea3565b612612565b5b610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614806565b60405180910390fd5b610d3d8383612f33565b505050565b610d4a612ea3565b73ffffffffffffffffffffffffffffffffffffffff16610d68611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db5906145ef565b60405180910390fd5b600c548163ffffffff16610dd29190614855565b600f8190555050565b6000600280549050905090565b600f5481565b610dff610df9612ea3565b82612fec565b610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590614921565b60405180910390fd5b610e498383836130ca565b505050565b6000610e5983611b25565b8210610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061498d565b60405180910390fd5b6000805b600280549050811015610f4d5760028181548110610ebf57610ebe6149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f3c5783821415610f2f578092505050610f91565b81610f39906149dc565b91505b80610f46906149dc565b9050610e9e565b506000610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061498d565b60405180910390fd5b505b92915050565b600e5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b610fd1612ea3565b73ffffffffffffffffffffffffffffffffffffffff16610fef611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c906145ef565b60405180910390fd5b61104d613283565b565b61106a83838360405180602001604052806000815250612206565b505050565b611077612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611095611fa3565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e2906145ef565b60405180910390fd5b600c548163ffffffff166110ff9190614855565b600e8190555050565b6000611112610ddb565b8210611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90614a71565b60405180910390fd5b819050919050565b611163612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611181611fa3565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce906145ef565b60405180910390fd5b80600b90805190602001906111ed929190613ae8565b5050565b6111f9612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611217611fa3565b73ffffffffffffffffffffffffffffffffffffffff161461126d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611264906145ef565b60405180910390fd5b600c548163ffffffff166112819190614855565b600d8190555050565b6000600560149054906101000a900460ff16905090565b600080600283815481106112b8576112b76149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90614b03565b60405180910390fd5b80915050919050565b61136661128a565b156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90614b6f565b60405180910390fd5b6000600284516113b69190614bbe565b1480156113d057506000600283516113ce9190614bbe565b145b80156113dd575081518351145b61141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390614c3b565b60405180910390fd5b60028351600f5461142d9190614855565b6114379190614c5b565b8114611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90614cd8565b60405180910390fd5b60005b8351811015611623576114a784828151811061149a576114996149ad565b5b6020026020010151611cd3565b156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90614d6a565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e86848151811061153a576115396149ad565b5b60200260200101516040518263ffffffff1660e01b815260040161155e9190613ee5565b602060405180830381865afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f9190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614e3e565b60405180910390fd5b50808061161b906149dc565b91505061147b565b5060005b82518110156117cf57611653838281518110611646576116456149ad565b5b60200260200101516124e7565b15611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a90614d6a565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8584815181106116e6576116e56149ad565b5b60200260200101516040518263ffffffff1660e01b815260040161170a9190613ee5565b602060405180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b9190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290614e3e565b60405180910390fd5b5080806117c7906149dc565b915050611627565b5060005b835181101561187b576001600660008684815181106117f5576117f46149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600085848151811061183b5761183a6149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611873906149dc565b9150506117d3565b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b81526004016118d9929190614e5e565b600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b5050505060005b6002845161191c9190614c5b565b811015611947576119343361192f610ddb565b613325565b808061193f906149dc565b91505061190e565b50505050565b61195561128a565b15611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90614b6f565b60405180910390fd5b60006119a0856112a1565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790614e3e565b60405180910390fd5b600d548214611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90614cd8565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b8152600401611ab1929190614e5e565b600060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b505050507f355e6037a3f9c646870e44d77364164d02ab85580efdbb66363b503c3a25f5af858585604051611b1693929190614eb4565b60405180910390a15050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d90614f58565b60405180910390fd5b600080600280549050905060005b81811015611c3c5760028181548110611bc057611bbf6149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c2b5782611c28906149dc565b92505b80611c35906149dc565b9050611ba4565b50600090508192505050919050565b611c53612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611c71611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe906145ef565b60405180910390fd5b611cd16000613343565b565b60006006600083815260200190815260200160002060009054906101000a900460ff169050919050565b611d05612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611d23611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d70906145ef565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e2c612ea3565b73ffffffffffffffffffffffffffffffffffffffff16611e4a611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e97906145ef565b60405180910390fd5b611ea8613409565b565b6060611eb582611b25565b600010611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee9061498d565b60405180910390fd5b6000611f0283611b25565b905060008167ffffffffffffffff811115611f2057611f1f613f5d565b5b604051908082528060200260200182016040528015611f4e5781602001602082028036833780820191505090505b50905060005b82811015611f9857611f668582610e4e565b828281518110611f7957611f786149ad565b5b6020026020010181815250508080611f90906149dc565b915050611f54565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611fdc9061463e565b80601f01602080910402602001604051908101604052809291908181526020018280546120089061463e565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b5050505050905090565b612067612ea3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614fc4565b60405180910390fd5b80600460006120e2612ea3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661218f612ea3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121d49190613c3f565b60405180910390a35050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612217612211612ea3565b83612fec565b612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90614921565b60405180910390fd5b612262848484846134ac565b50505050565b61227061128a565b156122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790614b6f565b60405180910390fd5b60006122bb856112a1565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232290614e3e565b60405180910390fd5b600e54821461236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236690614cd8565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33846040518363ffffffff1660e01b81526004016123cc929190614e5e565b600060405180830381600087803b1580156123e657600080fd5b505af11580156123fa573d6000803e3d6000fd5b505050507fe72a0fdc67c78145d43ca3ff95dee8fbcb620d013214e0c88e1039c9e6eed65f85858560405161243193929190614eb4565b60405180910390a15050505050565b606061244b82612eab565b61248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248190615056565b60405180910390fd5b6000612494613508565b905060008151116124b457604051806020016040528060008152506124df565b806124be8461359a565b6040516020016124cf9291906150fe565b6040516020818303038152906040525b915050919050565b60006007600083815260200190815260200160002060009054906101000a900460ff169050919050565b612519612ea3565b73ffffffffffffffffffffffffffffffffffffffff16612537611fa3565b73ffffffffffffffffffffffffffffffffffffffff161461258d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612584906145ef565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126ae612ea3565b73ffffffffffffffffffffffffffffffffffffffff166126cc611fa3565b73ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612719906145ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612792576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127899061519f565b60405180910390fd5b61279b81613343565b50565b6127a6612ea3565b73ffffffffffffffffffffffffffffffffffffffff166127c4611fa3565b73ffffffffffffffffffffffffffffffffffffffff161461281a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612811906145ef565b60405180910390fd5b60006002845161282a9190614bbe565b14801561284457506000600283516128429190614bbe565b145b8015612851575081518351145b612890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288790614c3b565b60405180910390fd5b60028351600f546128a19190614855565b6128ab9190614c5b565b81146128ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e390614cd8565b60405180910390fd5b60005b8351811015612a97576000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e86848151811061294b5761294a6149ad565b5b60200260200101516040518263ffffffff1660e01b815260040161296f9190613ee5565b602060405180830381865afa15801561298c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b09190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1790614e3e565b60405180910390fd5b612a43858381518110612a3657612a356149ad565b5b6020026020010151611cd3565b15612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a90614d6a565b60405180910390fd5b508080612a8f906149dc565b9150506128ef565b5060005b8251811015612c43576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858481518110612af757612af66149ad565b5b60200260200101516040518263ffffffff1660e01b8152600401612b1b9190613ee5565b602060405180830381865afa158015612b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5c9190614d9f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc390614e3e565b60405180910390fd5b612bef848381518110612be257612be16149ad565b5b60200260200101516124e7565b15612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2690614d6a565b60405180910390fd5b508080612c3b906149dc565b915050612a9b565b5060005b8351811015612cef57600160066000868481518110612c6957612c686149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000858481518110612caf57612cae6149ad565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612ce7906149dc565b915050612c47565b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401612d4d929190614e5e565b600060405180830381600087803b158015612d6757600080fd5b505af1158015612d7b573d6000803e3d6000fd5b5050505060005b60028451612d909190614c5b565b811015612dbb57612da833612da3610ddb565b613325565b8080612db3906149dc565b915050612d82565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e9c5750612e9b826136fb565b5b9050919050565b600033905090565b600060028054905082108015612f2c5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110612ee857612ee76149ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612fa6836112a1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612ff782612eab565b613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90615231565b60405180910390fd5b6000613041836112a1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130b057508373ffffffffffffffffffffffffffffffffffffffff1661309884610ba5565b73ffffffffffffffffffffffffffffffffffffffff16145b806130c157506130c08185612612565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130ea826112a1565b73ffffffffffffffffffffffffffffffffffffffff1614613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906152c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a790615355565b60405180910390fd5b6131bb838383613765565b6131c6600082612f33565b81600282815481106131db576131da6149ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61328b61128a565b6132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c1906153c1565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61330e612ea3565b60405161331b9190613e12565b60405180910390a1565b61333f82826040518060200160405280600081525061376a565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61341161128a565b15613451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344890614b6f565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613495612ea3565b6040516134a29190613e12565b60405180910390a1565b6134b78484846130ca565b6134c3848484846137c5565b613502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f990615453565b60405180910390fd5b50505050565b6060600b80546135179061463e565b80601f01602080910402602001604051908101604052809291908181526020018280546135439061463e565b80156135905780601f1061356557610100808354040283529160200191613590565b820191906000526020600020905b81548152906001019060200180831161357357829003601f168201915b5050505050905090565b606060008214156135e2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506136f6565b600082905060005b600082146136145780806135fd906149dc565b915050600a8261360d9190614c5b565b91506135ea565b60008167ffffffffffffffff8111156136305761362f613f5d565b5b6040519080825280601f01601f1916602001820160405280156136625781602001600182028036833780820191505090505b5090505b600085146136ef5760018261367b9190615473565b9150600a8561368a9190614bbe565b603061369691906154a7565b60f81b8183815181106136ac576136ab6149ad565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856136e89190614c5b565b9450613666565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b613774838361394d565b61378160008484846137c5565b6137c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b790615453565b60405180910390fd5b505050565b60006137e68473ffffffffffffffffffffffffffffffffffffffff16613ad5565b15613940578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261380f612ea3565b8786866040518563ffffffff1660e01b81526004016138319493929190615552565b6020604051808303816000875af192505050801561386d57506040513d601f19601f8201168201806040525081019061386a91906155b3565b60015b6138f0573d806000811461389d576040519150601f19603f3d011682016040523d82523d6000602084013e6138a2565b606091505b506000815114156138e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138df90615453565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613945565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139b49061562c565b60405180910390fd5b6139c681612eab565b15613a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139fd90615698565b60405180910390fd5b613a1260008383613765565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613af49061463e565b90600052602060002090601f016020900481019282613b165760008555613b5d565b82601f10613b2f57805160ff1916838001178555613b5d565b82800160010185558215613b5d579182015b82811115613b5c578251825591602001919060010190613b41565b5b509050613b6a9190613b6e565b5090565b5b80821115613b87576000816000905550600101613b6f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613bd481613b9f565b8114613bdf57600080fd5b50565b600081359050613bf181613bcb565b92915050565b600060208284031215613c0d57613c0c613b95565b5b6000613c1b84828501613be2565b91505092915050565b60008115159050919050565b613c3981613c24565b82525050565b6000602082019050613c546000830184613c30565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c8582613c5a565b9050919050565b613c9581613c7a565b8114613ca057600080fd5b50565b600081359050613cb281613c8c565b92915050565b600060208284031215613cce57613ccd613b95565b5b6000613cdc84828501613ca3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d1f578082015181840152602081019050613d04565b83811115613d2e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d5082613ce5565b613d5a8185613cf0565b9350613d6a818560208601613d01565b613d7381613d34565b840191505092915050565b60006020820190508181036000830152613d988184613d45565b905092915050565b6000819050919050565b613db381613da0565b8114613dbe57600080fd5b50565b600081359050613dd081613daa565b92915050565b600060208284031215613dec57613deb613b95565b5b6000613dfa84828501613dc1565b91505092915050565b613e0c81613c7a565b82525050565b6000602082019050613e276000830184613e03565b92915050565b60008060408385031215613e4457613e43613b95565b5b6000613e5285828601613ca3565b9250506020613e6385828601613dc1565b9150509250929050565b600063ffffffff82169050919050565b613e8681613e6d565b8114613e9157600080fd5b50565b600081359050613ea381613e7d565b92915050565b600060208284031215613ebf57613ebe613b95565b5b6000613ecd84828501613e94565b91505092915050565b613edf81613da0565b82525050565b6000602082019050613efa6000830184613ed6565b92915050565b600080600060608486031215613f1957613f18613b95565b5b6000613f2786828701613ca3565b9350506020613f3886828701613ca3565b9250506040613f4986828701613dc1565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f9582613d34565b810181811067ffffffffffffffff82111715613fb457613fb3613f5d565b5b80604052505050565b6000613fc7613b8b565b9050613fd38282613f8c565b919050565b600067ffffffffffffffff821115613ff357613ff2613f5d565b5b613ffc82613d34565b9050602081019050919050565b82818337600083830152505050565b600061402b61402684613fd8565b613fbd565b90508281526020810184848401111561404757614046613f58565b5b614052848285614009565b509392505050565b600082601f83011261406f5761406e613f53565b5b813561407f848260208601614018565b91505092915050565b60006020828403121561409e5761409d613b95565b5b600082013567ffffffffffffffff8111156140bc576140bb613b9a565b5b6140c88482850161405a565b91505092915050565b600067ffffffffffffffff8211156140ec576140eb613f5d565b5b602082029050602081019050919050565b600080fd5b6000614115614110846140d1565b613fbd565b90508083825260208201905060208402830185811115614138576141376140fd565b5b835b81811015614161578061414d8882613dc1565b84526020840193505060208101905061413a565b5050509392505050565b600082601f8301126141805761417f613f53565b5b8135614190848260208601614102565b91505092915050565b6000806000606084860312156141b2576141b1613b95565b5b600084013567ffffffffffffffff8111156141d0576141cf613b9a565b5b6141dc8682870161416b565b935050602084013567ffffffffffffffff8111156141fd576141fc613b9a565b5b6142098682870161416b565b925050604061421a86828701613dc1565b9150509250925092565b600080fd5b60008083601f84011261423f5761423e613f53565b5b8235905067ffffffffffffffff81111561425c5761425b614224565b5b602083019150836001820283011115614278576142776140fd565b5b9250929050565b6000806000806060858703121561429957614298613b95565b5b60006142a787828801613dc1565b945050602085013567ffffffffffffffff8111156142c8576142c7613b9a565b5b6142d487828801614229565b935093505060406142e787828801613dc1565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61432881613da0565b82525050565b600061433a838361431f565b60208301905092915050565b6000602082019050919050565b600061435e826142f3565b61436881856142fe565b93506143738361430f565b8060005b838110156143a457815161438b888261432e565b975061439683614346565b925050600181019050614377565b5085935050505092915050565b600060208201905081810360008301526143cb8184614353565b905092915050565b6143dc81613c24565b81146143e757600080fd5b50565b6000813590506143f9816143d3565b92915050565b6000806040838503121561441657614415613b95565b5b600061442485828601613ca3565b9250506020614435858286016143ea565b9150509250929050565b600067ffffffffffffffff82111561445a57614459613f5d565b5b61446382613d34565b9050602081019050919050565b600061448361447e8461443f565b613fbd565b90508281526020810184848401111561449f5761449e613f58565b5b6144aa848285614009565b509392505050565b600082601f8301126144c7576144c6613f53565b5b81356144d7848260208601614470565b91505092915050565b600080600080608085870312156144fa576144f9613b95565b5b600061450887828801613ca3565b945050602061451987828801613ca3565b935050604061452a87828801613dc1565b925050606085013567ffffffffffffffff81111561454b5761454a613b9a565b5b614557878288016144b2565b91505092959194509250565b6000806040838503121561457a57614579613b95565b5b600061458885828601613ca3565b925050602061459985828601613ca3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145d9602083613cf0565b91506145e4826145a3565b602082019050919050565b60006020820190508181036000830152614608816145cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061465657607f821691505b6020821081141561466a5761466961460f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146cc602c83613cf0565b91506146d782614670565b604082019050919050565b600060208201905081810360008301526146fb816146bf565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061475e602183613cf0565b915061476982614702565b604082019050919050565b6000602082019050818103600083015261478d81614751565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006147f0603883613cf0565b91506147fb82614794565b604082019050919050565b6000602082019050818103600083015261481f816147e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061486082613da0565b915061486b83613da0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a4576148a3614826565b5b828202905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061490b603183613cf0565b9150614916826148af565b604082019050919050565b6000602082019050818103600083015261493a816148fe565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000614977601683613cf0565b915061498282614941565b602082019050919050565b600060208201905081810360008301526149a68161496a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149e782613da0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a1a57614a19614826565b5b600182019050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000614a5b601783613cf0565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614aed602983613cf0565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614b59601083613cf0565b9150614b6482614b23565b602082019050919050565b60006020820190508181036000830152614b8881614b4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc982613da0565b9150614bd483613da0565b925082614be457614be3614b8f565b5b828206905092915050565b7f4e6f7420656e6f7567687420626f61727320616e64206d6565726b6174730000600082015250565b6000614c25601e83613cf0565b9150614c3082614bef565b602082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b6000614c6682613da0565b9150614c7183613da0565b925082614c8157614c80614b8f565b5b828204905092915050565b7f4e6f7420656e6f75676820244f494e4b00000000000000000000000000000000600082015250565b6000614cc2601083613cf0565b9150614ccd82614c8c565b602082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f54686520746f6b656e20686173206265656e20616c726561647920636c61696d60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d54602283613cf0565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b600081519050614d9981613c8c565b92915050565b600060208284031215614db557614db4613b95565b5b6000614dc384828501614d8a565b91505092915050565b7f596f7520646f206e6f74206f776e2074686520746f6b656e207769746820746860008201527f652070726f766964656420696400000000000000000000000000000000000000602082015250565b6000614e28602d83613cf0565b9150614e3382614dcc565b604082019050919050565b60006020820190508181036000830152614e5781614e1b565b9050919050565b6000604082019050614e736000830185613e03565b614e806020830184613ed6565b9392505050565b6000614e938385613cf0565b9350614ea0838584614009565b614ea983613d34565b840190509392505050565b6000604082019050614ec96000830186613ed6565b8181036020830152614edc818486614e87565b9050949350505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614f42602a83613cf0565b9150614f4d82614ee6565b604082019050919050565b60006020820190508181036000830152614f7181614f35565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614fae601983613cf0565b9150614fb982614f78565b602082019050919050565b60006020820190508181036000830152614fdd81614fa1565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000615040602183613cf0565b915061504b82614fe4565b604082019050919050565b6000602082019050818103600083015261506f81615033565b9050919050565b600081905092915050565b600061508c82613ce5565b6150968185615076565b93506150a6818560208601613d01565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006150e8600583615076565b91506150f3826150b2565b600582019050919050565b600061510a8285615081565b91506151168284615081565b9150615121826150db565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615189602683613cf0565b91506151948261512d565b604082019050919050565b600060208201905081810360008301526151b88161517c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061521b602c83613cf0565b9150615226826151bf565b604082019050919050565b6000602082019050818103600083015261524a8161520e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006152ad602983613cf0565b91506152b882615251565b604082019050919050565b600060208201905081810360008301526152dc816152a0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061533f602483613cf0565b915061534a826152e3565b604082019050919050565b6000602082019050818103600083015261536e81615332565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006153ab601483613cf0565b91506153b682615375565b602082019050919050565b600060208201905081810360008301526153da8161539e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061543d603283613cf0565b9150615448826153e1565b604082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b600061547e82613da0565b915061548983613da0565b92508282101561549c5761549b614826565b5b828203905092915050565b60006154b282613da0565b91506154bd83613da0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154f2576154f1614826565b5b828201905092915050565b600081519050919050565b600082825260208201905092915050565b6000615524826154fd565b61552e8185615508565b935061553e818560208601613d01565b61554781613d34565b840191505092915050565b60006080820190506155676000830187613e03565b6155746020830186613e03565b6155816040830185613ed6565b81810360608301526155938184615519565b905095945050505050565b6000815190506155ad81613bcb565b92915050565b6000602082840312156155c9576155c8613b95565b5b60006155d78482850161559e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615616602083613cf0565b9150615621826155e0565b602082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615682601c83613cf0565b915061568d8261564c565b602082019050919050565b600060208201905081810360008301526156b181615675565b905091905056fea26469706673582212201379780b27bc0840e66e3c59e7d59d5e7ed8318f1fc13c5df175ae378bae9cda64736f6c634300080a0033

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

00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a66cc78067fd1e6aa3eec4ccdff88d81527f92c1000000000000000000000000d5c5927c9db9da82acfb29ed51554d25f2ef7b7e000000000000000000000000bbf449cf8174c0cca4452fbe4785d8851a2fd641000000000000000000000000000000000000000000000000000000000000000d5468652053796d62696f73697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453594d4200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f61622d73796d62696f7369732f6d657461646174612f0000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): The Symbiosis
Arg [1] : _symbol (string): SYMB
Arg [2] : _initBaseURI (string): https://storage.googleapis.com/ab-symbiosis/metadata/
Arg [3] : _angryBoarsContractAddress (address): 0xA66CC78067fd1E6Aa3eEC4CcdFF88D81527F92c1
Arg [4] : _angryMeerkatsContractAddress (address): 0xd5C5927c9db9dA82AcfB29ed51554d25F2ef7b7e
Arg [5] : _oinkTokenContractAddress (address): 0xBBF449CF8174C0ccA4452fBE4785d8851A2Fd641

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 000000000000000000000000a66cc78067fd1e6aa3eec4ccdff88d81527f92c1
Arg [4] : 000000000000000000000000d5c5927c9db9da82acfb29ed51554d25f2ef7b7e
Arg [5] : 000000000000000000000000bbf449cf8174c0cca4452fbe4785d8851a2fd641
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [7] : 5468652053796d62696f73697300000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 53594d4200000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [11] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f61
Arg [12] : 622d73796d62696f7369732f6d657461646174612f0000000000000000000000


Deployed Bytecode Sourcemap

33672:7372:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31491:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35855:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25582:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26216:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25798:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35733:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32652:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34301:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26914:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31722:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34245:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33961:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34196:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40974:67;;;;;;;;;;;;;:::i;:::-;;27259:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35595:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40791:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35471:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4047:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25337:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36398:1517;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39449:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24909:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2408:94;;;;;;;;;;;;;:::i;:::-;;35229:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36205:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33864:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40903:63;;;;;;;;;;;;;:::i;:::-;;32228:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1757:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26443:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33911:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27450:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39860:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40430:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35347:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36018:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2657:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37923:1518;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31491:225;31594:4;31633:35;31618:50;;;:11;:50;;;;:90;;;;31672:36;31696:11;31672:23;:36::i;:::-;31618:90;31611:97;;31491:225;;;:::o;35855:155::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35954:8:::1;35927:24;;:35;;;;;;;;;;;;;;;;;;35993:8;35973:10;;:29;;;;;;;;;;;;;;;;;;35855:155:::0;:::o;25582:100::-;25636:13;25669:5;25662:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25582:100;:::o;26216:221::-;26292:7;26320:16;26328:7;26320;:16::i;:::-;26312:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26405:15;:24;26421:7;26405:24;;;;;;;;;;;;;;;;;;;;;26398:31;;26216:221;;;:::o;25798:412::-;25879:13;25895:24;25911:7;25895:15;:24::i;:::-;25879:40;;25944:5;25938:11;;:2;:11;;;;25930:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26038:5;26022:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26047:37;26064:5;26071:12;:10;:12::i;:::-;26047:16;:37::i;:::-;26022:62;26000:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26181:21;26190:2;26194:7;26181:8;:21::i;:::-;25868:342;25798:412;;:::o;35733:114::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35834:5:::1;;35825:6;:14;;;;;;:::i;:::-;35808;:31;;;;35733:114:::0;:::o;32652:110::-;32713:7;32740;:14;;;;32733:21;;32652:110;:::o;34301:41::-;;;;:::o;26914:339::-;27109:41;27128:12;:10;:12::i;:::-;27142:7;27109:18;:41::i;:::-;27101:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27217:28;27227:4;27233:2;27237:7;27217:9;:28::i;:::-;26914:339;;;:::o;31722:500::-;31811:15;31855:24;31873:5;31855:17;:24::i;:::-;31847:5;:32;31839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31917:10;31943:6;31938:226;31955:7;:14;;;;31951:1;:18;31938:226;;;32004:7;32012:1;32004:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31995:19;;:5;:19;;;31991:162;;;32048:5;32039;:14;32035:102;;;32084:1;32077:8;;;;;;32035:102;32130:7;;;;:::i;:::-;;;31991:162;31971:3;;;;:::i;:::-;;;31938:226;;;;32182:5;32174:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;31828:394;31722:500;;;;;:::o;34245:49::-;;;;:::o;33961:39::-;;;;;;;;;;;;;:::o;34196:42::-;;;;:::o;40974:67::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41023:10:::1;:8;:10::i;:::-;40974:67::o:0;27259:185::-;27397:39;27414:4;27420:2;27424:7;27397:39;;;;;;;;;;;;:16;:39::i;:::-;27259:185;;;:::o;35595:130::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35712:5:::1;;35703:6;:14;;;;;;:::i;:::-;35678:22;:39;;;;35595:130:::0;:::o;32768:194::-;32843:7;32879:24;:22;:24::i;:::-;32871:5;:32;32863:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32949:5;32942:12;;32768:194;;;:::o;40791:104::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40876:11:::1;40866:7;:21;;;;;;;;;;;;:::i;:::-;;40791:104:::0;:::o;35471:116::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35574:5:::1;;35565:6;:14;;;;;;:::i;:::-;35547:15;:32;;;;35471:116:::0;:::o;4047:86::-;4094:4;4118:7;;;;;;;;;;;4111:14;;4047:86;:::o;25337:239::-;25409:7;25429:13;25445:7;25453;25445:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25429:32;;25497:1;25480:19;;:5;:19;;;;25472:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25563:5;25556:12;;;25337:239;;;:::o;36398:1517::-;4373:8;:6;:8::i;:::-;4372:9;4364:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36579:1:::1;36574;36551:13;:20;:24;;;;:::i;:::-;:29;:65;;;;;36615:1;36610;36584:16;:23;:27;;;;:::i;:::-;:32;36551:65;:116;;;;;36644:16;:23;36620:13;:20;:47;36551:116;36543:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;36772:1;36749:13;:20;36732:14;;:37;;;;:::i;:::-;:41;;;;:::i;:::-;36721:6;:53;36713:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;36813:10;36808:349;36833:13;:20;36829:1;:24;36808:349;;;36884:31;36898:13;36912:1;36898:16;;;;;;;;:::i;:::-;;;;;;;;36884:13;:31::i;:::-;36883:32;36875:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36969:22;36994:24;;;;;;;;;;;:32;;;37027:13;37041:1;37027:16;;;;;;;;:::i;:::-;;;;;;;;36994:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36969:75;;37085:10;37067:28;;:14;:28;;;37059:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36860:297;36855:3;;;;;:::i;:::-;;;;36808:349;;;;37174:10;37169:370;37194:16;:23;37190:1;:27;37169:370;;;37248:37;37265:16;37282:1;37265:19;;;;;;;;:::i;:::-;;;;;;;;37248:16;:37::i;:::-;37247:38;37239:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37339:25;37367:27;;;;;;;;;;;:35;;;37403:16;37420:1;37403:19;;;;;;;;:::i;:::-;;;;;;;;37367:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37339:84;;37467:10;37446:31;;:17;:31;;;37438:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;37224:315;37219:3;;;;;:::i;:::-;;;;37169:370;;;;37556:10;37551:176;37576:13;:20;37572:1;:24;37551:176;;;37652:4;37618:13;:31;37632:13;37646:1;37632:16;;;;;;;;:::i;:::-;;;;;;;;37618:31;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;37711:4;37671:16;:37;37688:16;37705:1;37688:19;;;;;;;;:::i;:::-;;;;;;;;37671:37;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;37598:3;;;;;:::i;:::-;;;;37551:176;;;;37739:10;;;;;;;;;;;:15;;;37755:10;37767:6;37739:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37792:10;37787:121;37836:1;37813:13;:20;:24;;;;:::i;:::-;37808:1;:30;37787:121;;;37860:36;37870:10;37882:13;:11;:13::i;:::-;37860:9;:36::i;:::-;37840:3;;;;;:::i;:::-;;;;37787:121;;;;36398:1517:::0;;;:::o;39449:403::-;4373:8;:6;:8::i;:::-;4372:9;4364:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39567:13:::1;39583:17;39591:8;39583:7;:17::i;:::-;39567:33;;39628:10;39619:19;;:5;:19;;;39611:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39718:15;;39707:7;:26;39699:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39765:10;;;;;;;;;;;:15;;;39781:10;39793:7;39765:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39817:27;39828:8;39838:5;;39817:27;;;;;;;;:::i;:::-;;;;;;;;39556:296;39449:403:::0;;;;:::o;24909:422::-;24981:7;25026:1;25009:19;;:5;:19;;;;25001:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:10;25111:11;25125:7;:14;;;;25111:28;;25155:6;25150:127;25171:6;25167:1;:10;25150:127;;;25212:7;25220:1;25212:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25203:19;;:5;:19;;;25199:67;;;25243:7;;;;:::i;:::-;;;25199:67;25179:3;;;;:::i;:::-;;;25150:127;;;;25287:13;;;25318:5;25311:12;;;;24909:422;;;:::o;2408:94::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2473:21:::1;2491:1;2473:9;:21::i;:::-;2408:94::o:0;35229:110::-;35288:4;35312:13;:19;35326:4;35312:19;;;;;;;;;;;;;;;;;;;;;35305:26;;35229:110;;;:::o;36205:185::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36314:8:::1;36283:28;;:39;;;;;;;;;;;;;;;;;;36373:8;36333:27;;:49;;;;;;;;;;;;;;;;;;36205:185:::0;:::o;33864:40::-;;;;;;;;;;;;;:::o;40903:63::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40950:8:::1;:6;:8::i;:::-;40903:63::o:0;32228:418::-;32287:16;32328:24;32346:5;32328:17;:24::i;:::-;32324:1;:28;32316:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32390:18;32411:16;32421:5;32411:9;:16::i;:::-;32390:37;;32438:25;32480:10;32466:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32438:53;;32507:9;32502:111;32526:10;32522:1;:14;32502:111;;;32572:29;32592:5;32599:1;32572:19;:29::i;:::-;32558:8;32567:1;32558:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;32538:3;;;;;:::i;:::-;;;;32502:111;;;;32630:8;32623:15;;;;32228:418;;;:::o;1757:87::-;1803:7;1830:6;;;;;;;;;;;1823:13;;1757:87;:::o;25688:104::-;25744:13;25777:7;25770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25688:104;:::o;26443:295::-;26558:12;:10;:12::i;:::-;26546:24;;:8;:24;;;;26538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26658:8;26613:18;:32;26632:12;:10;:12::i;:::-;26613:32;;;;;;;;;;;;;;;:42;26646:8;26613:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26711:8;26682:48;;26697:12;:10;:12::i;:::-;26682:48;;;26721:8;26682:48;;;;;;:::i;:::-;;;;;;;;26443:295;;:::o;33911:43::-;;;;;;;;;;;;;:::o;27450:328::-;27625:41;27644:12;:10;:12::i;:::-;27658:7;27625:18;:41::i;:::-;27617:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27731:39;27745:4;27751:2;27755:7;27764:5;27731:13;:39::i;:::-;27450:328;;;;:::o;39860:438::-;4373:8;:6;:8::i;:::-;4372:9;4364:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39992:13:::1;40008:17;40016:8;40008:7;:17::i;:::-;39992:33;;40053:10;40044:19;;:5;:19;;;40036:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40143:22;;40132:7;:33;40124:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40197:10;;;;;;;;;;;:15;;;40213:10;40225:7;40197:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40249:41;40267:8;40277:12;;40249:41;;;;;;;;:::i;:::-;;;;;;;;39981:317;39860:438:::0;;;;:::o;40430:353::-;40506:13;40540:17;40548:8;40540:7;:17::i;:::-;40532:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40606:28;40637:10;:8;:10::i;:::-;40606:41;;40696:1;40671:14;40665:28;:32;:110;;;;;;;;;;;;;;;;;40724:14;40740:19;:8;:17;:19::i;:::-;40707:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40665:110;40658:117;;;40430:353;;;:::o;35347:116::-;35409:4;35433:16;:22;35450:4;35433:22;;;;;;;;;;;;;;;;;;;;;35426:29;;35347:116;;;:::o;36018:179::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36124:8:::1;36096:25;;:36;;;;;;;;;;;;;;;;;;36180:8;36143:24;;:46;;;;;;;;;;;;;;;;;;36018:179:::0;:::o;26744:164::-;26841:4;26865:18;:25;26884:5;26865:25;;;;;;;;;;;;;;;:35;26891:8;26865:35;;;;;;;;;;;;;;;;;;;;;;;;;26858:42;;26744:164;;;;:::o;2657:192::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2766:1:::1;2746:22;;:8;:22;;;;2738:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2822:19;2832:8;2822:9;:19::i;:::-;2657:192:::0;:::o;37923:1518::-;1988:12;:10;:12::i;:::-;1977:23;;:7;:5;:7::i;:::-;:23;;;1969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38105:1:::1;38100;38077:13;:20;:24;;;;:::i;:::-;:29;:65;;;;;38141:1;38136;38110:16;:23;:27;;;;:::i;:::-;:32;38077:65;:116;;;;;38170:16;:23;38146:13;:20;:47;38077:116;38069:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;38298:1;38275:13;:20;38258:14;;:37;;;;:::i;:::-;:41;;;;:::i;:::-;38247:6;:53;38239:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38339:10;38334:349;38359:13;:20;38355:1;:24;38334:349;;;38401:22;38426:24;;;;;;;;;;;:32;;;38459:13;38473:1;38459:16;;;;;;;;:::i;:::-;;;;;;;;38426:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38401:75;;38517:10;38499:28;;:14;:28;;;38491:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38601:31;38615:13;38629:1;38615:16;;;;;;;;:::i;:::-;;;;;;;;38601:13;:31::i;:::-;38600:32;38592:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;38386:297;38381:3;;;;;:::i;:::-;;;;38334:349;;;;38700:10;38695:370;38720:16;:23;38716:1;:27;38695:370;;;38765:25;38793:27;;;;;;;;;;;:35;;;38829:16;38846:1;38829:19;;;;;;;;:::i;:::-;;;;;;;;38793:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38765:84;;38893:10;38872:31;;:17;:31;;;38864:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;38977:37;38994:16;39011:1;38994:19;;;;;;;;:::i;:::-;;;;;;;;38977:16;:37::i;:::-;38976:38;38968:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38750:315;38745:3;;;;;:::i;:::-;;;;38695:370;;;;39082:10;39077:176;39102:13;:20;39098:1;:24;39077:176;;;39178:4;39144:13;:31;39158:13;39172:1;39158:16;;;;;;;;:::i;:::-;;;;;;;;39144:31;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;39237:4;39197:16;:37;39214:16;39231:1;39214:19;;;;;;;;:::i;:::-;;;;;;;;39197:37;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;39124:3;;;;;:::i;:::-;;;;39077:176;;;;39265:10;;;;;;;;;;;:15;;;39281:10;39293:6;39265:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39318:10;39313:121;39362:1;39339:13;:20;:24;;;;:::i;:::-;39334:1;:30;39313:121;;;39386:36;39396:10;39408:13;:11;:13::i;:::-;39386:9;:36::i;:::-;39366:3;;;;;:::i;:::-;;;;39313:121;;;;37923:1518:::0;;;:::o;24610:293::-;24712:4;24760:25;24745:40;;;:11;:40;;;;:101;;;;24813:33;24798:48;;;:11;:48;;;;24745:101;:150;;;;24859:36;24883:11;24859:23;:36::i;:::-;24745:150;24729:166;;24610:293;;;:::o;606:98::-;659:7;686:10;679:17;;606:98;:::o;28105:155::-;28170:4;28204:7;:14;;;;28194:7;:24;:58;;;;;28250:1;28222:30;;:7;28230;28222:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;28194:58;28187:65;;28105:155;;;:::o;30278:175::-;30380:2;30353:15;:24;30369:7;30353:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30437:7;30433:2;30398:47;;30407:24;30423:7;30407:15;:24::i;:::-;30398:47;;;;;;;;;;;;30278:175;;:::o;28266:349::-;28359:4;28384:16;28392:7;28384;:16::i;:::-;28376:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28460:13;28476:24;28492:7;28476:15;:24::i;:::-;28460:40;;28530:5;28519:16;;:7;:16;;;:51;;;;28563:7;28539:31;;:20;28551:7;28539:11;:20::i;:::-;:31;;;28519:51;:87;;;;28574:32;28591:5;28598:7;28574:16;:32::i;:::-;28519:87;28511:96;;;28266:349;;;;:::o;29755:517::-;29915:4;29887:32;;:24;29903:7;29887:15;:24::i;:::-;:32;;;29879:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;29998:1;29984:16;;:2;:16;;;;29976:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30054:39;30075:4;30081:2;30085:7;30054:20;:39::i;:::-;30158:29;30175:1;30179:7;30158:8;:29::i;:::-;30217:2;30198:7;30206;30198:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30256:7;30252:2;30237:27;;30246:4;30237:27;;;;;;;;;;;;29755:517;;;:::o;5106:120::-;4650:8;:6;:8::i;:::-;4642:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5175:5:::1;5165:7;;:15;;;;;;;;;;;;;;;;;;5196:22;5205:12;:10;:12::i;:::-;5196:22;;;;;;:::i;:::-;;;;;;;;5106:120::o:0;28621:110::-;28697:26;28707:2;28711:7;28697:26;;;;;;;;;;;;:9;:26::i;:::-;28621:110;;:::o;2857:173::-;2913:16;2932:6;;;;;;;;;;;2913:25;;2958:8;2949:6;;:17;;;;;;;;;;;;;;;;;;3013:8;2982:40;;3003:8;2982:40;;;;;;;;;;;;2902:128;2857:173;:::o;4847:118::-;4373:8;:6;:8::i;:::-;4372:9;4364:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4917:4:::1;4907:7;;:14;;;;;;;;;;;;;;;;;;4937:20;4944:12;:10;:12::i;:::-;4937:20;;;;;;:::i;:::-;;;;;;;;4847:118::o:0;27784:315::-;27941:28;27951:4;27957:2;27961:7;27941:9;:28::i;:::-;27988:48;28011:4;28017:2;28021:7;28030:5;27988:22;:48::i;:::-;27980:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27784:315;;;;:::o;40323:99::-;40374:13;40407:7;40400:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40323:99;:::o;5486:723::-;5542:13;5772:1;5763:5;:10;5759:53;;;5790:10;;;;;;;;;;;;;;;;;;;;;5759:53;5822:12;5837:5;5822:20;;5853:14;5878:78;5893:1;5885:4;:9;5878:78;;5911:8;;;;;:::i;:::-;;;;5942:2;5934:10;;;;;:::i;:::-;;;5878:78;;;5966:19;5998:6;5988:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5966:39;;6016:154;6032:1;6023:5;:10;6016:154;;6060:1;6050:11;;;;;:::i;:::-;;;6127:2;6119:5;:10;;;;:::i;:::-;6106:2;:24;;;;:::i;:::-;6093:39;;6076:6;6083;6076:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6156:2;6147:11;;;;;:::i;:::-;;;6016:154;;;6194:6;6180:21;;;;;5486:723;;;;:::o;23963:157::-;24048:4;24087:25;24072:40;;;:11;:40;;;;24065:47;;23963:157;;;:::o;31264:126::-;;;;:::o;28737:321::-;28867:18;28873:2;28877:7;28867:5;:18::i;:::-;28918:54;28949:1;28953:2;28957:7;28966:5;28918:22;:54::i;:::-;28896:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28737:321;;;:::o;30459:799::-;30614:4;30635:15;:2;:13;;;:15::i;:::-;30631:620;;;30687:2;30671:36;;;30708:12;:10;:12::i;:::-;30722:4;30728:7;30737:5;30671:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30667:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30930:1;30913:6;:13;:18;30909:272;;;30956:60;;;;;;;;;;:::i;:::-;;;;;;;;30909:272;31131:6;31125:13;31116:6;31112:2;31108:15;31101:38;30667:529;30804:41;;;30794:51;;;:6;:51;;;;30787:58;;;;;30631:620;31235:4;31228:11;;30459:799;;;;;;;:::o;29064:346::-;29158:1;29144:16;;:2;:16;;;;29136:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29217:16;29225:7;29217;:16::i;:::-;29216:17;29208:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29279:45;29308:1;29312:2;29316:7;29279:20;:45::i;:::-;29335:7;29348:2;29335:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29394:7;29390:2;29369:33;;29386:1;29369:33;;;;;;;;;;;;29064:346;;:::o;15907:387::-;15967:4;16175:12;16242:7;16230:20;16222:28;;16285:1;16278:4;:8;16271:15;;;15907:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:329::-;2084:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:119;;;2139:79;;:::i;:::-;2101:119;2259:1;2284:53;2329:7;2320:6;2309:9;2305:22;2284:53;:::i;:::-;2274:63;;2230:117;2025:329;;;;:::o;2360:99::-;2412:6;2446:5;2440:12;2430:22;;2360:99;;;:::o;2465:169::-;2549:11;2583:6;2578:3;2571:19;2623:4;2618:3;2614:14;2599:29;;2465:169;;;;:::o;2640:307::-;2708:1;2718:113;2732:6;2729:1;2726:13;2718:113;;;2817:1;2812:3;2808:11;2802:18;2798:1;2793:3;2789:11;2782:39;2754:2;2751:1;2747:10;2742:15;;2718:113;;;2849:6;2846:1;2843:13;2840:101;;;2929:1;2920:6;2915:3;2911:16;2904:27;2840:101;2689:258;2640:307;;;:::o;2953:102::-;2994:6;3045:2;3041:7;3036:2;3029:5;3025:14;3021:28;3011:38;;2953:102;;;:::o;3061:364::-;3149:3;3177:39;3210:5;3177:39;:::i;:::-;3232:71;3296:6;3291:3;3232:71;:::i;:::-;3225:78;;3312:52;3357:6;3352:3;3345:4;3338:5;3334:16;3312:52;:::i;:::-;3389:29;3411:6;3389:29;:::i;:::-;3384:3;3380:39;3373:46;;3153:272;3061:364;;;;:::o;3431:313::-;3544:4;3582:2;3571:9;3567:18;3559:26;;3631:9;3625:4;3621:20;3617:1;3606:9;3602:17;3595:47;3659:78;3732:4;3723:6;3659:78;:::i;:::-;3651:86;;3431:313;;;;:::o;3750:77::-;3787:7;3816:5;3805:16;;3750:77;;;:::o;3833:122::-;3906:24;3924:5;3906:24;:::i;:::-;3899:5;3896:35;3886:63;;3945:1;3942;3935:12;3886:63;3833:122;:::o;3961:139::-;4007:5;4045:6;4032:20;4023:29;;4061:33;4088:5;4061:33;:::i;:::-;3961:139;;;;:::o;4106:329::-;4165:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:119;;;4220:79;;:::i;:::-;4182:119;4340:1;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;:::i;:::-;4355:63;;4311:117;4106:329;;;;:::o;4441:118::-;4528:24;4546:5;4528:24;:::i;:::-;4523:3;4516:37;4441:118;;:::o;4565:222::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:71;4777:1;4766:9;4762:17;4753:6;4709:71;:::i;:::-;4565:222;;;;:::o;4793:474::-;4861:6;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4793:474;;;;;:::o;5273:93::-;5309:7;5349:10;5342:5;5338:22;5327:33;;5273:93;;;:::o;5372:120::-;5444:23;5461:5;5444:23;:::i;:::-;5437:5;5434:34;5424:62;;5482:1;5479;5472:12;5424:62;5372:120;:::o;5498:137::-;5543:5;5581:6;5568:20;5559:29;;5597:32;5623:5;5597:32;:::i;:::-;5498:137;;;;:::o;5641:327::-;5699:6;5748:2;5736:9;5727:7;5723:23;5719:32;5716:119;;;5754:79;;:::i;:::-;5716:119;5874:1;5899:52;5943:7;5934:6;5923:9;5919:22;5899:52;:::i;:::-;5889:62;;5845:116;5641:327;;;;:::o;5974:118::-;6061:24;6079:5;6061:24;:::i;:::-;6056:3;6049:37;5974:118;;:::o;6098:222::-;6191:4;6229:2;6218:9;6214:18;6206:26;;6242:71;6310:1;6299:9;6295:17;6286:6;6242:71;:::i;:::-;6098:222;;;;:::o;6326:619::-;6403:6;6411;6419;6468:2;6456:9;6447:7;6443:23;6439:32;6436:119;;;6474:79;;:::i;:::-;6436:119;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6326:619;;;;;:::o;6951:117::-;7060:1;7057;7050:12;7074:117;7183:1;7180;7173:12;7197:180;7245:77;7242:1;7235:88;7342:4;7339:1;7332:15;7366:4;7363:1;7356:15;7383:281;7466:27;7488:4;7466:27;:::i;:::-;7458:6;7454:40;7596:6;7584:10;7581:22;7560:18;7548:10;7545:34;7542:62;7539:88;;;7607:18;;:::i;:::-;7539:88;7647:10;7643:2;7636:22;7426:238;7383:281;;:::o;7670:129::-;7704:6;7731:20;;:::i;:::-;7721:30;;7760:33;7788:4;7780:6;7760:33;:::i;:::-;7670:129;;;:::o;7805:308::-;7867:4;7957:18;7949:6;7946:30;7943:56;;;7979:18;;:::i;:::-;7943:56;8017:29;8039:6;8017:29;:::i;:::-;8009:37;;8101:4;8095;8091:15;8083:23;;7805:308;;;:::o;8119:154::-;8203:6;8198:3;8193;8180:30;8265:1;8256:6;8251:3;8247:16;8240:27;8119:154;;;:::o;8279:412::-;8357:5;8382:66;8398:49;8440:6;8398:49;:::i;:::-;8382:66;:::i;:::-;8373:75;;8471:6;8464:5;8457:21;8509:4;8502:5;8498:16;8547:3;8538:6;8533:3;8529:16;8526:25;8523:112;;;8554:79;;:::i;:::-;8523:112;8644:41;8678:6;8673:3;8668;8644:41;:::i;:::-;8363:328;8279:412;;;;;:::o;8711:340::-;8767:5;8816:3;8809:4;8801:6;8797:17;8793:27;8783:122;;8824:79;;:::i;:::-;8783:122;8941:6;8928:20;8966:79;9041:3;9033:6;9026:4;9018:6;9014:17;8966:79;:::i;:::-;8957:88;;8773:278;8711:340;;;;:::o;9057:509::-;9126:6;9175:2;9163:9;9154:7;9150:23;9146:32;9143:119;;;9181:79;;:::i;:::-;9143:119;9329:1;9318:9;9314:17;9301:31;9359:18;9351:6;9348:30;9345:117;;;9381:79;;:::i;:::-;9345:117;9486:63;9541:7;9532:6;9521:9;9517:22;9486:63;:::i;:::-;9476:73;;9272:287;9057:509;;;;:::o;9572:311::-;9649:4;9739:18;9731:6;9728:30;9725:56;;;9761:18;;:::i;:::-;9725:56;9811:4;9803:6;9799:17;9791:25;;9871:4;9865;9861:15;9853:23;;9572:311;;;:::o;9889:117::-;9998:1;9995;9988:12;10029:710;10125:5;10150:81;10166:64;10223:6;10166:64;:::i;:::-;10150:81;:::i;:::-;10141:90;;10251:5;10280:6;10273:5;10266:21;10314:4;10307:5;10303:16;10296:23;;10367:4;10359:6;10355:17;10347:6;10343:30;10396:3;10388:6;10385:15;10382:122;;;10415:79;;:::i;:::-;10382:122;10530:6;10513:220;10547:6;10542:3;10539:15;10513:220;;;10622:3;10651:37;10684:3;10672:10;10651:37;:::i;:::-;10646:3;10639:50;10718:4;10713:3;10709:14;10702:21;;10589:144;10573:4;10568:3;10564:14;10557:21;;10513:220;;;10517:21;10131:608;;10029:710;;;;;:::o;10762:370::-;10833:5;10882:3;10875:4;10867:6;10863:17;10859:27;10849:122;;10890:79;;:::i;:::-;10849:122;11007:6;10994:20;11032:94;11122:3;11114:6;11107:4;11099:6;11095:17;11032:94;:::i;:::-;11023:103;;10839:293;10762:370;;;;:::o;11138:1039::-;11265:6;11273;11281;11330:2;11318:9;11309:7;11305:23;11301:32;11298:119;;;11336:79;;:::i;:::-;11298:119;11484:1;11473:9;11469:17;11456:31;11514:18;11506:6;11503:30;11500:117;;;11536:79;;:::i;:::-;11500:117;11641:78;11711:7;11702:6;11691:9;11687:22;11641:78;:::i;:::-;11631:88;;11427:302;11796:2;11785:9;11781:18;11768:32;11827:18;11819:6;11816:30;11813:117;;;11849:79;;:::i;:::-;11813:117;11954:78;12024:7;12015:6;12004:9;12000:22;11954:78;:::i;:::-;11944:88;;11739:303;12081:2;12107:53;12152:7;12143:6;12132:9;12128:22;12107:53;:::i;:::-;12097:63;;12052:118;11138:1039;;;;;:::o;12183:117::-;12292:1;12289;12282:12;12320:553;12378:8;12388:6;12438:3;12431:4;12423:6;12419:17;12415:27;12405:122;;12446:79;;:::i;:::-;12405:122;12559:6;12546:20;12536:30;;12589:18;12581:6;12578:30;12575:117;;;12611:79;;:::i;:::-;12575:117;12725:4;12717:6;12713:17;12701:29;;12779:3;12771:4;12763:6;12759:17;12749:8;12745:32;12742:41;12739:128;;;12786:79;;:::i;:::-;12739:128;12320:553;;;;;:::o;12879:819::-;12968:6;12976;12984;12992;13041:2;13029:9;13020:7;13016:23;13012:32;13009:119;;;13047:79;;:::i;:::-;13009:119;13167:1;13192:53;13237:7;13228:6;13217:9;13213:22;13192:53;:::i;:::-;13182:63;;13138:117;13322:2;13311:9;13307:18;13294:32;13353:18;13345:6;13342:30;13339:117;;;13375:79;;:::i;:::-;13339:117;13488:65;13545:7;13536:6;13525:9;13521:22;13488:65;:::i;:::-;13470:83;;;;13265:298;13602:2;13628:53;13673:7;13664:6;13653:9;13649:22;13628:53;:::i;:::-;13618:63;;13573:118;12879:819;;;;;;;:::o;13704:114::-;13771:6;13805:5;13799:12;13789:22;;13704:114;;;:::o;13824:184::-;13923:11;13957:6;13952:3;13945:19;13997:4;13992:3;13988:14;13973:29;;13824:184;;;;:::o;14014:132::-;14081:4;14104:3;14096:11;;14134:4;14129:3;14125:14;14117:22;;14014:132;;;:::o;14152:108::-;14229:24;14247:5;14229:24;:::i;:::-;14224:3;14217:37;14152:108;;:::o;14266:179::-;14335:10;14356:46;14398:3;14390:6;14356:46;:::i;:::-;14434:4;14429:3;14425:14;14411:28;;14266:179;;;;:::o;14451:113::-;14521:4;14553;14548:3;14544:14;14536:22;;14451:113;;;:::o;14600:732::-;14719:3;14748:54;14796:5;14748:54;:::i;:::-;14818:86;14897:6;14892:3;14818:86;:::i;:::-;14811:93;;14928:56;14978:5;14928:56;:::i;:::-;15007:7;15038:1;15023:284;15048:6;15045:1;15042:13;15023:284;;;15124:6;15118:13;15151:63;15210:3;15195:13;15151:63;:::i;:::-;15144:70;;15237:60;15290:6;15237:60;:::i;:::-;15227:70;;15083:224;15070:1;15067;15063:9;15058:14;;15023:284;;;15027:14;15323:3;15316:10;;14724:608;;;14600:732;;;;:::o;15338:373::-;15481:4;15519:2;15508:9;15504:18;15496:26;;15568:9;15562:4;15558:20;15554:1;15543:9;15539:17;15532:47;15596:108;15699:4;15690:6;15596:108;:::i;:::-;15588:116;;15338:373;;;;:::o;15717:116::-;15787:21;15802:5;15787:21;:::i;:::-;15780:5;15777:32;15767:60;;15823:1;15820;15813:12;15767:60;15717:116;:::o;15839:133::-;15882:5;15920:6;15907:20;15898:29;;15936:30;15960:5;15936:30;:::i;:::-;15839:133;;;;:::o;15978:468::-;16043:6;16051;16100:2;16088:9;16079:7;16075:23;16071:32;16068:119;;;16106:79;;:::i;:::-;16068:119;16226:1;16251:53;16296:7;16287:6;16276:9;16272:22;16251:53;:::i;:::-;16241:63;;16197:117;16353:2;16379:50;16421:7;16412:6;16401:9;16397:22;16379:50;:::i;:::-;16369:60;;16324:115;15978:468;;;;;:::o;16452:307::-;16513:4;16603:18;16595:6;16592:30;16589:56;;;16625:18;;:::i;:::-;16589:56;16663:29;16685:6;16663:29;:::i;:::-;16655:37;;16747:4;16741;16737:15;16729:23;;16452:307;;;:::o;16765:410::-;16842:5;16867:65;16883:48;16924:6;16883:48;:::i;:::-;16867:65;:::i;:::-;16858:74;;16955:6;16948:5;16941:21;16993:4;16986:5;16982:16;17031:3;17022:6;17017:3;17013:16;17010:25;17007:112;;;17038:79;;:::i;:::-;17007:112;17128:41;17162:6;17157:3;17152;17128:41;:::i;:::-;16848:327;16765:410;;;;;:::o;17194:338::-;17249:5;17298:3;17291:4;17283:6;17279:17;17275:27;17265:122;;17306:79;;:::i;:::-;17265:122;17423:6;17410:20;17448:78;17522:3;17514:6;17507:4;17499:6;17495:17;17448:78;:::i;:::-;17439:87;;17255:277;17194:338;;;;:::o;17538:943::-;17633:6;17641;17649;17657;17706:3;17694:9;17685:7;17681:23;17677:33;17674:120;;;17713:79;;:::i;:::-;17674:120;17833:1;17858:53;17903:7;17894:6;17883:9;17879:22;17858:53;:::i;:::-;17848:63;;17804:117;17960:2;17986:53;18031:7;18022:6;18011:9;18007:22;17986:53;:::i;:::-;17976:63;;17931:118;18088:2;18114:53;18159:7;18150:6;18139:9;18135:22;18114:53;:::i;:::-;18104:63;;18059:118;18244:2;18233:9;18229:18;18216:32;18275:18;18267:6;18264:30;18261:117;;;18297:79;;:::i;:::-;18261:117;18402:62;18456:7;18447:6;18436:9;18432:22;18402:62;:::i;:::-;18392:72;;18187:287;17538:943;;;;;;;:::o;18487:474::-;18555:6;18563;18612:2;18600:9;18591:7;18587:23;18583:32;18580:119;;;18618:79;;:::i;:::-;18580:119;18738:1;18763:53;18808:7;18799:6;18788:9;18784:22;18763:53;:::i;:::-;18753:63;;18709:117;18865:2;18891:53;18936:7;18927:6;18916:9;18912:22;18891:53;:::i;:::-;18881:63;;18836:118;18487:474;;;;;:::o;18967:182::-;19107:34;19103:1;19095:6;19091:14;19084:58;18967:182;:::o;19155:366::-;19297:3;19318:67;19382:2;19377:3;19318:67;:::i;:::-;19311:74;;19394:93;19483:3;19394:93;:::i;:::-;19512:2;19507:3;19503:12;19496:19;;19155:366;;;:::o;19527:419::-;19693:4;19731:2;19720:9;19716:18;19708:26;;19780:9;19774:4;19770:20;19766:1;19755:9;19751:17;19744:47;19808:131;19934:4;19808:131;:::i;:::-;19800:139;;19527:419;;;:::o;19952:180::-;20000:77;19997:1;19990:88;20097:4;20094:1;20087:15;20121:4;20118:1;20111:15;20138:320;20182:6;20219:1;20213:4;20209:12;20199:22;;20266:1;20260:4;20256:12;20287:18;20277:81;;20343:4;20335:6;20331:17;20321:27;;20277:81;20405:2;20397:6;20394:14;20374:18;20371:38;20368:84;;;20424:18;;:::i;:::-;20368:84;20189:269;20138:320;;;:::o;20464:231::-;20604:34;20600:1;20592:6;20588:14;20581:58;20673:14;20668:2;20660:6;20656:15;20649:39;20464:231;:::o;20701:366::-;20843:3;20864:67;20928:2;20923:3;20864:67;:::i;:::-;20857:74;;20940:93;21029:3;20940:93;:::i;:::-;21058:2;21053:3;21049:12;21042:19;;20701:366;;;:::o;21073:419::-;21239:4;21277:2;21266:9;21262:18;21254:26;;21326:9;21320:4;21316:20;21312:1;21301:9;21297:17;21290:47;21354:131;21480:4;21354:131;:::i;:::-;21346:139;;21073:419;;;:::o;21498:220::-;21638:34;21634:1;21626:6;21622:14;21615:58;21707:3;21702:2;21694:6;21690:15;21683:28;21498:220;:::o;21724:366::-;21866:3;21887:67;21951:2;21946:3;21887:67;:::i;:::-;21880:74;;21963:93;22052:3;21963:93;:::i;:::-;22081:2;22076:3;22072:12;22065:19;;21724:366;;;:::o;22096:419::-;22262:4;22300:2;22289:9;22285:18;22277:26;;22349:9;22343:4;22339:20;22335:1;22324:9;22320:17;22313:47;22377:131;22503:4;22377:131;:::i;:::-;22369:139;;22096:419;;;:::o;22521:243::-;22661:34;22657:1;22649:6;22645:14;22638:58;22730:26;22725:2;22717:6;22713:15;22706:51;22521:243;:::o;22770:366::-;22912:3;22933:67;22997:2;22992:3;22933:67;:::i;:::-;22926:74;;23009:93;23098:3;23009:93;:::i;:::-;23127:2;23122:3;23118:12;23111:19;;22770:366;;;:::o;23142:419::-;23308:4;23346:2;23335:9;23331:18;23323:26;;23395:9;23389:4;23385:20;23381:1;23370:9;23366:17;23359:47;23423:131;23549:4;23423:131;:::i;:::-;23415:139;;23142:419;;;:::o;23567:180::-;23615:77;23612:1;23605:88;23712:4;23709:1;23702:15;23736:4;23733:1;23726:15;23753:348;23793:7;23816:20;23834:1;23816:20;:::i;:::-;23811:25;;23850:20;23868:1;23850:20;:::i;:::-;23845:25;;24038:1;23970:66;23966:74;23963:1;23960:81;23955:1;23948:9;23941:17;23937:105;23934:131;;;24045:18;;:::i;:::-;23934:131;24093:1;24090;24086:9;24075:20;;23753:348;;;;:::o;24107:236::-;24247:34;24243:1;24235:6;24231:14;24224:58;24316:19;24311:2;24303:6;24299:15;24292:44;24107:236;:::o;24349:366::-;24491:3;24512:67;24576:2;24571:3;24512:67;:::i;:::-;24505:74;;24588:93;24677:3;24588:93;:::i;:::-;24706:2;24701:3;24697:12;24690:19;;24349:366;;;:::o;24721:419::-;24887:4;24925:2;24914:9;24910:18;24902:26;;24974:9;24968:4;24964:20;24960:1;24949:9;24945:17;24938:47;25002:131;25128:4;25002:131;:::i;:::-;24994:139;;24721:419;;;:::o;25146:172::-;25286:24;25282:1;25274:6;25270:14;25263:48;25146:172;:::o;25324:366::-;25466:3;25487:67;25551:2;25546:3;25487:67;:::i;:::-;25480:74;;25563:93;25652:3;25563:93;:::i;:::-;25681:2;25676:3;25672:12;25665:19;;25324:366;;;:::o;25696:419::-;25862:4;25900:2;25889:9;25885:18;25877:26;;25949:9;25943:4;25939:20;25935:1;25924:9;25920:17;25913:47;25977:131;26103:4;25977:131;:::i;:::-;25969:139;;25696:419;;;:::o;26121:180::-;26169:77;26166:1;26159:88;26266:4;26263:1;26256:15;26290:4;26287:1;26280:15;26307:233;26346:3;26369:24;26387:5;26369:24;:::i;:::-;26360:33;;26415:66;26408:5;26405:77;26402:103;;;26485:18;;:::i;:::-;26402:103;26532:1;26525:5;26521:13;26514:20;;26307:233;;;:::o;26546:173::-;26686:25;26682:1;26674:6;26670:14;26663:49;26546:173;:::o;26725:366::-;26867:3;26888:67;26952:2;26947:3;26888:67;:::i;:::-;26881:74;;26964:93;27053:3;26964:93;:::i;:::-;27082:2;27077:3;27073:12;27066:19;;26725:366;;;:::o;27097:419::-;27263:4;27301:2;27290:9;27286:18;27278:26;;27350:9;27344:4;27340:20;27336:1;27325:9;27321:17;27314:47;27378:131;27504:4;27378:131;:::i;:::-;27370:139;;27097:419;;;:::o;27522:228::-;27662:34;27658:1;27650:6;27646:14;27639:58;27731:11;27726:2;27718:6;27714:15;27707:36;27522:228;:::o;27756:366::-;27898:3;27919:67;27983:2;27978:3;27919:67;:::i;:::-;27912:74;;27995:93;28084:3;27995:93;:::i;:::-;28113:2;28108:3;28104:12;28097:19;;27756:366;;;:::o;28128:419::-;28294:4;28332:2;28321:9;28317:18;28309:26;;28381:9;28375:4;28371:20;28367:1;28356:9;28352:17;28345:47;28409:131;28535:4;28409:131;:::i;:::-;28401:139;;28128:419;;;:::o;28553:166::-;28693:18;28689:1;28681:6;28677:14;28670:42;28553:166;:::o;28725:366::-;28867:3;28888:67;28952:2;28947:3;28888:67;:::i;:::-;28881:74;;28964:93;29053:3;28964:93;:::i;:::-;29082:2;29077:3;29073:12;29066:19;;28725:366;;;:::o;29097:419::-;29263:4;29301:2;29290:9;29286:18;29278:26;;29350:9;29344:4;29340:20;29336:1;29325:9;29321:17;29314:47;29378:131;29504:4;29378:131;:::i;:::-;29370:139;;29097:419;;;:::o;29522:180::-;29570:77;29567:1;29560:88;29667:4;29664:1;29657:15;29691:4;29688:1;29681:15;29708:176;29740:1;29757:20;29775:1;29757:20;:::i;:::-;29752:25;;29791:20;29809:1;29791:20;:::i;:::-;29786:25;;29830:1;29820:35;;29835:18;;:::i;:::-;29820:35;29876:1;29873;29869:9;29864:14;;29708:176;;;;:::o;29890:180::-;30030:32;30026:1;30018:6;30014:14;30007:56;29890:180;:::o;30076:366::-;30218:3;30239:67;30303:2;30298:3;30239:67;:::i;:::-;30232:74;;30315:93;30404:3;30315:93;:::i;:::-;30433:2;30428:3;30424:12;30417:19;;30076:366;;;:::o;30448:419::-;30614:4;30652:2;30641:9;30637:18;30629:26;;30701:9;30695:4;30691:20;30687:1;30676:9;30672:17;30665:47;30729:131;30855:4;30729:131;:::i;:::-;30721:139;;30448:419;;;:::o;30873:185::-;30913:1;30930:20;30948:1;30930:20;:::i;:::-;30925:25;;30964:20;30982:1;30964:20;:::i;:::-;30959:25;;31003:1;30993:35;;31008:18;;:::i;:::-;30993:35;31050:1;31047;31043:9;31038:14;;30873:185;;;;:::o;31064:166::-;31204:18;31200:1;31192:6;31188:14;31181:42;31064:166;:::o;31236:366::-;31378:3;31399:67;31463:2;31458:3;31399:67;:::i;:::-;31392:74;;31475:93;31564:3;31475:93;:::i;:::-;31593:2;31588:3;31584:12;31577:19;;31236:366;;;:::o;31608:419::-;31774:4;31812:2;31801:9;31797:18;31789:26;;31861:9;31855:4;31851:20;31847:1;31836:9;31832:17;31825:47;31889:131;32015:4;31889:131;:::i;:::-;31881:139;;31608:419;;;:::o;32033:221::-;32173:34;32169:1;32161:6;32157:14;32150:58;32242:4;32237:2;32229:6;32225:15;32218:29;32033:221;:::o;32260:366::-;32402:3;32423:67;32487:2;32482:3;32423:67;:::i;:::-;32416:74;;32499:93;32588:3;32499:93;:::i;:::-;32617:2;32612:3;32608:12;32601:19;;32260:366;;;:::o;32632:419::-;32798:4;32836:2;32825:9;32821:18;32813:26;;32885:9;32879:4;32875:20;32871:1;32860:9;32856:17;32849:47;32913:131;33039:4;32913:131;:::i;:::-;32905:139;;32632:419;;;:::o;33057:143::-;33114:5;33145:6;33139:13;33130:22;;33161:33;33188:5;33161:33;:::i;:::-;33057:143;;;;:::o;33206:351::-;33276:6;33325:2;33313:9;33304:7;33300:23;33296:32;33293:119;;;33331:79;;:::i;:::-;33293:119;33451:1;33476:64;33532:7;33523:6;33512:9;33508:22;33476:64;:::i;:::-;33466:74;;33422:128;33206:351;;;;:::o;33563:232::-;33703:34;33699:1;33691:6;33687:14;33680:58;33772:15;33767:2;33759:6;33755:15;33748:40;33563:232;:::o;33801:366::-;33943:3;33964:67;34028:2;34023:3;33964:67;:::i;:::-;33957:74;;34040:93;34129:3;34040:93;:::i;:::-;34158:2;34153:3;34149:12;34142:19;;33801:366;;;:::o;34173:419::-;34339:4;34377:2;34366:9;34362:18;34354:26;;34426:9;34420:4;34416:20;34412:1;34401:9;34397:17;34390:47;34454:131;34580:4;34454:131;:::i;:::-;34446:139;;34173:419;;;:::o;34598:332::-;34719:4;34757:2;34746:9;34742:18;34734:26;;34770:71;34838:1;34827:9;34823:17;34814:6;34770:71;:::i;:::-;34851:72;34919:2;34908:9;34904:18;34895:6;34851:72;:::i;:::-;34598:332;;;;;:::o;34960:304::-;35058:3;35079:71;35143:6;35138:3;35079:71;:::i;:::-;35072:78;;35160:43;35196:6;35191:3;35184:5;35160:43;:::i;:::-;35228:29;35250:6;35228:29;:::i;:::-;35223:3;35219:39;35212:46;;34960:304;;;;;:::o;35270:443::-;35421:4;35459:2;35448:9;35444:18;35436:26;;35472:71;35540:1;35529:9;35525:17;35516:6;35472:71;:::i;:::-;35590:9;35584:4;35580:20;35575:2;35564:9;35560:18;35553:48;35618:88;35701:4;35692:6;35684;35618:88;:::i;:::-;35610:96;;35270:443;;;;;;:::o;35719:229::-;35859:34;35855:1;35847:6;35843:14;35836:58;35928:12;35923:2;35915:6;35911:15;35904:37;35719:229;:::o;35954:366::-;36096:3;36117:67;36181:2;36176:3;36117:67;:::i;:::-;36110:74;;36193:93;36282:3;36193:93;:::i;:::-;36311:2;36306:3;36302:12;36295:19;;35954:366;;;:::o;36326:419::-;36492:4;36530:2;36519:9;36515:18;36507:26;;36579:9;36573:4;36569:20;36565:1;36554:9;36550:17;36543:47;36607:131;36733:4;36607:131;:::i;:::-;36599:139;;36326:419;;;:::o;36751:175::-;36891:27;36887:1;36879:6;36875:14;36868:51;36751:175;:::o;36932:366::-;37074:3;37095:67;37159:2;37154:3;37095:67;:::i;:::-;37088:74;;37171:93;37260:3;37171:93;:::i;:::-;37289:2;37284:3;37280:12;37273:19;;36932:366;;;:::o;37304:419::-;37470:4;37508:2;37497:9;37493:18;37485:26;;37557:9;37551:4;37547:20;37543:1;37532:9;37528:17;37521:47;37585:131;37711:4;37585:131;:::i;:::-;37577:139;;37304:419;;;:::o;37729:220::-;37869:34;37865:1;37857:6;37853:14;37846:58;37938:3;37933:2;37925:6;37921:15;37914:28;37729:220;:::o;37955:366::-;38097:3;38118:67;38182:2;38177:3;38118:67;:::i;:::-;38111:74;;38194:93;38283:3;38194:93;:::i;:::-;38312:2;38307:3;38303:12;38296:19;;37955:366;;;:::o;38327:419::-;38493:4;38531:2;38520:9;38516:18;38508:26;;38580:9;38574:4;38570:20;38566:1;38555:9;38551:17;38544:47;38608:131;38734:4;38608:131;:::i;:::-;38600:139;;38327:419;;;:::o;38752:148::-;38854:11;38891:3;38876:18;;38752:148;;;;:::o;38906:377::-;39012:3;39040:39;39073:5;39040:39;:::i;:::-;39095:89;39177:6;39172:3;39095:89;:::i;:::-;39088:96;;39193:52;39238:6;39233:3;39226:4;39219:5;39215:16;39193:52;:::i;:::-;39270:6;39265:3;39261:16;39254:23;;39016:267;38906:377;;;;:::o;39289:155::-;39429:7;39425:1;39417:6;39413:14;39406:31;39289:155;:::o;39450:400::-;39610:3;39631:84;39713:1;39708:3;39631:84;:::i;:::-;39624:91;;39724:93;39813:3;39724:93;:::i;:::-;39842:1;39837:3;39833:11;39826:18;;39450:400;;;:::o;39856:701::-;40137:3;40159:95;40250:3;40241:6;40159:95;:::i;:::-;40152:102;;40271:95;40362:3;40353:6;40271:95;:::i;:::-;40264:102;;40383:148;40527:3;40383:148;:::i;:::-;40376:155;;40548:3;40541:10;;39856:701;;;;;:::o;40563:225::-;40703:34;40699:1;40691:6;40687:14;40680:58;40772:8;40767:2;40759:6;40755:15;40748:33;40563:225;:::o;40794:366::-;40936:3;40957:67;41021:2;41016:3;40957:67;:::i;:::-;40950:74;;41033:93;41122:3;41033:93;:::i;:::-;41151:2;41146:3;41142:12;41135:19;;40794:366;;;:::o;41166:419::-;41332:4;41370:2;41359:9;41355:18;41347:26;;41419:9;41413:4;41409:20;41405:1;41394:9;41390:17;41383:47;41447:131;41573:4;41447:131;:::i;:::-;41439:139;;41166:419;;;:::o;41591:231::-;41731:34;41727:1;41719:6;41715:14;41708:58;41800:14;41795:2;41787:6;41783:15;41776:39;41591:231;:::o;41828:366::-;41970:3;41991:67;42055:2;42050:3;41991:67;:::i;:::-;41984:74;;42067:93;42156:3;42067:93;:::i;:::-;42185:2;42180:3;42176:12;42169:19;;41828:366;;;:::o;42200:419::-;42366:4;42404:2;42393:9;42389:18;42381:26;;42453:9;42447:4;42443:20;42439:1;42428:9;42424:17;42417:47;42481:131;42607:4;42481:131;:::i;:::-;42473:139;;42200:419;;;:::o;42625:228::-;42765:34;42761:1;42753:6;42749:14;42742:58;42834:11;42829:2;42821:6;42817:15;42810:36;42625:228;:::o;42859:366::-;43001:3;43022:67;43086:2;43081:3;43022:67;:::i;:::-;43015:74;;43098:93;43187:3;43098:93;:::i;:::-;43216:2;43211:3;43207:12;43200:19;;42859:366;;;:::o;43231:419::-;43397:4;43435:2;43424:9;43420:18;43412:26;;43484:9;43478:4;43474:20;43470:1;43459:9;43455:17;43448:47;43512:131;43638:4;43512:131;:::i;:::-;43504:139;;43231:419;;;:::o;43656:223::-;43796:34;43792:1;43784:6;43780:14;43773:58;43865:6;43860:2;43852:6;43848:15;43841:31;43656:223;:::o;43885:366::-;44027:3;44048:67;44112:2;44107:3;44048:67;:::i;:::-;44041:74;;44124:93;44213:3;44124:93;:::i;:::-;44242:2;44237:3;44233:12;44226:19;;43885:366;;;:::o;44257:419::-;44423:4;44461:2;44450:9;44446:18;44438:26;;44510:9;44504:4;44500:20;44496:1;44485:9;44481:17;44474:47;44538:131;44664:4;44538:131;:::i;:::-;44530:139;;44257:419;;;:::o;44682:170::-;44822:22;44818:1;44810:6;44806:14;44799:46;44682:170;:::o;44858:366::-;45000:3;45021:67;45085:2;45080:3;45021:67;:::i;:::-;45014:74;;45097:93;45186:3;45097:93;:::i;:::-;45215:2;45210:3;45206:12;45199:19;;44858:366;;;:::o;45230:419::-;45396:4;45434:2;45423:9;45419:18;45411:26;;45483:9;45477:4;45473:20;45469:1;45458:9;45454:17;45447:47;45511:131;45637:4;45511:131;:::i;:::-;45503:139;;45230:419;;;:::o;45655:237::-;45795:34;45791:1;45783:6;45779:14;45772:58;45864:20;45859:2;45851:6;45847:15;45840:45;45655:237;:::o;45898:366::-;46040:3;46061:67;46125:2;46120:3;46061:67;:::i;:::-;46054:74;;46137:93;46226:3;46137:93;:::i;:::-;46255:2;46250:3;46246:12;46239:19;;45898:366;;;:::o;46270:419::-;46436:4;46474:2;46463:9;46459:18;46451:26;;46523:9;46517:4;46513:20;46509:1;46498:9;46494:17;46487:47;46551:131;46677:4;46551:131;:::i;:::-;46543:139;;46270:419;;;:::o;46695:191::-;46735:4;46755:20;46773:1;46755:20;:::i;:::-;46750:25;;46789:20;46807:1;46789:20;:::i;:::-;46784:25;;46828:1;46825;46822:8;46819:34;;;46833:18;;:::i;:::-;46819:34;46878:1;46875;46871:9;46863:17;;46695:191;;;;:::o;46892:305::-;46932:3;46951:20;46969:1;46951:20;:::i;:::-;46946:25;;46985:20;47003:1;46985:20;:::i;:::-;46980:25;;47139:1;47071:66;47067:74;47064:1;47061:81;47058:107;;;47145:18;;:::i;:::-;47058:107;47189:1;47186;47182:9;47175:16;;46892:305;;;;:::o;47203:98::-;47254:6;47288:5;47282:12;47272:22;;47203:98;;;:::o;47307:168::-;47390:11;47424:6;47419:3;47412:19;47464:4;47459:3;47455:14;47440:29;;47307:168;;;;:::o;47481:360::-;47567:3;47595:38;47627:5;47595:38;:::i;:::-;47649:70;47712:6;47707:3;47649:70;:::i;:::-;47642:77;;47728:52;47773:6;47768:3;47761:4;47754:5;47750:16;47728:52;:::i;:::-;47805:29;47827:6;47805:29;:::i;:::-;47800:3;47796:39;47789:46;;47571:270;47481:360;;;;:::o;47847:640::-;48042:4;48080:3;48069:9;48065:19;48057:27;;48094:71;48162:1;48151:9;48147:17;48138:6;48094:71;:::i;:::-;48175:72;48243:2;48232:9;48228:18;48219:6;48175:72;:::i;:::-;48257;48325:2;48314:9;48310:18;48301:6;48257:72;:::i;:::-;48376:9;48370:4;48366:20;48361:2;48350:9;48346:18;48339:48;48404:76;48475:4;48466:6;48404:76;:::i;:::-;48396:84;;47847:640;;;;;;;:::o;48493:141::-;48549:5;48580:6;48574:13;48565:22;;48596:32;48622:5;48596:32;:::i;:::-;48493:141;;;;:::o;48640:349::-;48709:6;48758:2;48746:9;48737:7;48733:23;48729:32;48726:119;;;48764:79;;:::i;:::-;48726:119;48884:1;48909:63;48964:7;48955:6;48944:9;48940:22;48909:63;:::i;:::-;48899:73;;48855:127;48640:349;;;;:::o;48995:182::-;49135:34;49131:1;49123:6;49119:14;49112:58;48995:182;:::o;49183:366::-;49325:3;49346:67;49410:2;49405:3;49346:67;:::i;:::-;49339:74;;49422:93;49511:3;49422:93;:::i;:::-;49540:2;49535:3;49531:12;49524:19;;49183:366;;;:::o;49555:419::-;49721:4;49759:2;49748:9;49744:18;49736:26;;49808:9;49802:4;49798:20;49794:1;49783:9;49779:17;49772:47;49836:131;49962:4;49836:131;:::i;:::-;49828:139;;49555:419;;;:::o;49980:178::-;50120:30;50116:1;50108:6;50104:14;50097:54;49980:178;:::o;50164:366::-;50306:3;50327:67;50391:2;50386:3;50327:67;:::i;:::-;50320:74;;50403:93;50492:3;50403:93;:::i;:::-;50521:2;50516:3;50512:12;50505:19;;50164:366;;;:::o;50536:419::-;50702:4;50740:2;50729:9;50725:18;50717:26;;50789:9;50783:4;50779:20;50775:1;50764:9;50760:17;50753:47;50817:131;50943:4;50817:131;:::i;:::-;50809:139;;50536:419;;;:::o

Swarm Source

ipfs://1379780b27bc0840e66e3c59e7d59d5e7ed8318f1fc13c5df175ae378bae9cda
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.