ETH Price: $3,458.53 (-2.42%)
Gas: 2 Gwei

Token

BunnyIsland (LAND)
 

Overview

Max Total Supply

5,555 LAND

Holders

323

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
20 LAND
0xa3e03b2c2b48009a04b9a0a97987a5ba7dd29162
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BunnyIsland

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity Multiple files format)

File 2 of 13: BunnyIsland.sol
// SPDX-License-Identifier: MIT
/*******************************************************************

  ____                          _____     _                 _ 
 |  _ \                        |_   _|   | |               | |
 | |_) |_   _ _ __  _ __  _   _  | |  ___| | __ _ _ __   __| |
 |  _ <| | | | '_ \| '_ \| | | | | | / __| |/ _` | '_ \ / _` |
 | |_) | |_| | | | | | | | |_| |_| |_\__ \ | (_| | | | | (_| |
 |____/ \__,_|_| |_|_| |_|\__, |_____|___/_|\__,_|_| |_|\__,_|
                           __/ |                              
                          |___/                               

                              __
                     /\    .-" /
                    /  ; .'  .' 
                   :   :/  .'   
                    \  ;-.'     
       .--""""--..__/     `.    
     .'           .'    `o  \   
    /                    `   ;  
   :                  \      :  
 .-;        -.         `.__.-'  
:  ;          \     ,   ;       
'._:           ;   :   (        
    \/  .__    ;    \   `-.     
     ;     "-,/_..--"`-..__)    
     '""--.._:
********************************************************************/

pragma solidity ^0.8.9;

import "./ERC721.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./Counters.sol";
import "./Address.sol";
import "./Strings.sol";

contract OwnableDelegateProxy {}

contract ProxyRegistry {
  mapping(address => OwnableDelegateProxy) public proxies;
}

contract BunnyIsland is ERC721, ReentrancyGuard, Ownable {
  using Counters for Counters.Counter;

  using Strings for uint256;

  constructor(string memory customBaseURI_, address proxyRegistryAddress_)
  ERC721("BunnyIsland", "LAND")
  {
    customBaseURI = customBaseURI_;
    proxyRegistryAddress = proxyRegistryAddress_;
  }

  /** TOKEN PARAMETERS **/

  struct TokenParameters {
    address proxyRegistryAddress_;
    string customBaseURI_;
  }

  mapping(uint256 => TokenParameters) private tokenParametersMap;

  function tokenParameters(uint256 tokenId) external view
    returns (TokenParameters memory)
  {
    return tokenParametersMap[tokenId];
  }

  /** MINTING **/

  uint256 public constant MAX_SUPPLY = 5555;

  uint256 public constant MAX_MULTIMINT = 20;

  uint256 public PRICE = 50000000000000000;

  Counters.Counter private supplyCounter;

  function mint(uint256 count) public payable nonReentrant {
    require(saleIsActive, "Sale not active");

    require(totalSupply() + count - 1 < MAX_SUPPLY, "Exceeds max supply");

    require(count <= MAX_MULTIMINT, "Mint at most 20 at a time");

    require(
      msg.value >= PRICE * count, "Insufficient payment, 0.05 ETH per item"
    );

    for (uint256 i = 0; i < count; i++) {
      _mint(msg.sender, totalSupply());

      supplyCounter.increment();
    }
  }

  function setMintPrice(uint256 PRICE_) external onlyOwner {
    PRICE = PRICE_;
  }  

  function totalSupply() public view returns (uint256) {
    return supplyCounter.current();
  }

  /** ACTIVATION **/

  bool public saleIsActive = false;

  function setSaleIsActive(bool saleIsActive_) external onlyOwner {
    saleIsActive = saleIsActive_;
  }


  /** URI HANDLING **/

  string private customBaseURI;

  mapping(uint256 => string) private tokenURIMap;

  function setTokenURI(uint256 tokenId, string memory tokenURI_)
    external
    onlyOwner
  {
    tokenURIMap[tokenId] = tokenURI_;
  }

  function setBaseURI(string memory customBaseURI_) external onlyOwner {
    customBaseURI = customBaseURI_;
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return customBaseURI;
  }

  function tokenURI(uint256 tokenId) public view override
    returns (string memory)
  {
    string memory tokenURI_ = tokenURIMap[tokenId];

    if (bytes(tokenURI_).length > 0) {
      return tokenURI_;
    }

    return string(abi.encodePacked(super.tokenURI(tokenId)));
  }

  /** PAYOUT **/

  function withdraw() public nonReentrant {
    uint256 balance = address(this).balance;

    Address.sendValue(payable(owner()), balance);
  }

  /** PROXY REGISTRY **/

  address private immutable proxyRegistryAddress;

  function isApprovedForAll(address owner, address operator)
    override
    public
    view
    returns (bool)
  {
    ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);

    if (address(proxyRegistry.proxies(owner)) == operator) {
      return true;
    }

    return super.isApprovedForAll(owner, operator);
  }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

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

File 3 of 13: Context.sol
// SPDX-License-Identifier: MIT

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

File 4 of 13: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 5 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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;
    }
}

File 6 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    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;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.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);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    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);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    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);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    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);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    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");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    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"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    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);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.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);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

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

File 8 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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;
}

File 9 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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);
}

File 10 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

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

File 11 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 12 of 13: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"customBaseURI_","type":"string"},{"internalType":"address","name":"proxyRegistryAddress_","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"MAX_MULTIMINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}],"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":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"PRICE_","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive_","type":"bool"}],"name":"setSaleIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI_","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenParameters","outputs":[{"components":[{"internalType":"address","name":"proxyRegistryAddress_","type":"address"},{"internalType":"string","name":"customBaseURI_","type":"string"}],"internalType":"struct BunnyIsland.TokenParameters","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405266b1a2bc2ec500006009556000600b60006101000a81548160ff0219169083151502179055503480156200003757600080fd5b50604051620044423803806200444283398181016040528101906200005d9190620004fa565b6040518060400160405280600b81526020017f42756e6e7949736c616e640000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c414e44000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e192919062000248565b508060019080519060200190620000fa92919062000248565b505050600160068190555062000125620001196200017a60201b60201c565b6200018260201b60201c565b81600c90805190602001906200013d92919062000248565b508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050620005c4565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000256906200058f565b90600052602060002090601f0160209004810192826200027a5760008555620002c6565b82601f106200029557805160ff1916838001178555620002c6565b82800160010185558215620002c6579182015b82811115620002c5578251825591602001919060010190620002a8565b5b509050620002d59190620002d9565b5090565b5b80821115620002f4576000816000905550600101620002da565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003618262000316565b810181811067ffffffffffffffff8211171562000383576200038262000327565b5b80604052505050565b600062000398620002f8565b9050620003a6828262000356565b919050565b600067ffffffffffffffff821115620003c957620003c862000327565b5b620003d48262000316565b9050602081019050919050565b60005b8381101562000401578082015181840152602081019050620003e4565b8381111562000411576000848401525b50505050565b60006200042e6200042884620003ab565b6200038c565b9050828152602081018484840111156200044d576200044c62000311565b5b6200045a848285620003e1565b509392505050565b600082601f8301126200047a57620004796200030c565b5b81516200048c84826020860162000417565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004c28262000495565b9050919050565b620004d481620004b5565b8114620004e057600080fd5b50565b600081519050620004f481620004c9565b92915050565b6000806040838503121562000514576200051362000302565b5b600083015167ffffffffffffffff81111562000535576200053462000307565b5b620005438582860162000462565b92505060206200055685828601620004e3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005a857607f821691505b602082108103620005be57620005bd62000560565b5b50919050565b608051613e62620005e060003960006114ff0152613e626000f3fe6080604052600436106101b75760003560e01c8063715018a6116100ec578063b88d4fde1161008a578063e985e9c511610064578063e985e9c5146105e9578063eb8d244414610626578063f2fde38b14610651578063f4a0a5281461067a576101b7565b8063b88d4fde14610558578063b8fc105114610581578063c87b56dd146105ac576101b7565b80638da5cb5b116100c65780638da5cb5b146104bd57806395d89b41146104e8578063a0712d6814610513578063a22cb4651461052f576101b7565b8063715018a61461043e5780638b6b8083146104555780638d859f3e14610492576101b7565b806323b872dd1161015957806342842e0e1161013357806342842e0e1461037257806355f804b31461039b5780636352211e146103c457806370a0823114610401576101b7565b806323b872dd1461030757806332cb6b0c146103305780633ccfd60b1461035b576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a578063162094c4146102b357806318160ddd146102dc576101b7565b806301ffc9a7146101bc57806302c88989146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de919061265c565b6106a3565b6040516101f091906126a4565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b91906126eb565b610785565b005b34801561022e57600080fd5b5061023761081e565b60405161024491906127b1565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612809565b6108b0565b6040516102819190612877565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac91906128be565b610935565b005b3480156102bf57600080fd5b506102da60048036038101906102d59190612a33565b610a4c565b005b3480156102e857600080fd5b506102f1610af4565b6040516102fe9190612a9e565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190612ab9565b610b05565b005b34801561033c57600080fd5b50610345610b65565b6040516103529190612a9e565b60405180910390f35b34801561036757600080fd5b50610370610b6b565b005b34801561037e57600080fd5b5061039960048036038101906103949190612ab9565b610bd9565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612b0c565b610bf9565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612809565b610c8f565b6040516103f89190612877565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190612b55565b610d40565b6040516104359190612a9e565b60405180910390f35b34801561044a57600080fd5b50610453610df7565b005b34801561046157600080fd5b5061047c60048036038101906104779190612809565b610e7f565b6040516104899190612c18565b60405180910390f35b34801561049e57600080fd5b506104a7610f94565b6040516104b49190612a9e565b60405180910390f35b3480156104c957600080fd5b506104d2610f9a565b6040516104df9190612877565b60405180910390f35b3480156104f457600080fd5b506104fd610fc4565b60405161050a91906127b1565b60405180910390f35b61052d60048036038101906105289190612809565b611056565b005b34801561053b57600080fd5b5061055660048036038101906105519190612c3a565b61122d565b005b34801561056457600080fd5b5061057f600480360381019061057a9190612d1b565b6113ad565b005b34801561058d57600080fd5b5061059661140f565b6040516105a39190612a9e565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190612809565b611414565b6040516105e091906127b1565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612d9e565b6114fa565b60405161061d91906126a4565b60405180910390f35b34801561063257600080fd5b5061063b6115ea565b60405161064891906126a4565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612b55565b6115fd565b005b34801561068657600080fd5b506106a1600480360381019061069c9190612809565b6116f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077e575061077d8261177a565b5b9050919050565b61078d6117e4565b73ffffffffffffffffffffffffffffffffffffffff166107ab610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f890612e2a565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60606000805461082d90612e79565b80601f016020809104026020016040519081016040528092919081815260200182805461085990612e79565b80156108a65780601f1061087b576101008083540402835291602001916108a6565b820191906000526020600020905b81548152906001019060200180831161088957829003601f168201915b5050505050905090565b60006108bb826117ec565b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190612f1c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094082610c8f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790612fae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109cf6117e4565b73ffffffffffffffffffffffffffffffffffffffff1614806109fe57506109fd816109f86117e4565b6114fa565b5b610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3490613040565b60405180910390fd5b610a478383611858565b505050565b610a546117e4565b73ffffffffffffffffffffffffffffffffffffffff16610a72610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90612e2a565b60405180910390fd5b80600d60008481526020019081526020016000209080519060200190610aef92919061251d565b505050565b6000610b00600a611911565b905090565b610b16610b106117e4565b8261191f565b610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906130d2565b60405180910390fd5b610b608383836119fd565b505050565b6115b381565b600260065403610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba79061313e565b60405180910390fd5b60026006819055506000479050610bce610bc8610f9a565b82611c58565b506001600681905550565b610bf4838383604051806020016040528060008152506113ad565b505050565b610c016117e4565b73ffffffffffffffffffffffffffffffffffffffff16610c1f610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90612e2a565b60405180910390fd5b80600c9080519060200190610c8b92919061251d565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e906131d0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613262565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dff6117e4565b73ffffffffffffffffffffffffffffffffffffffff16610e1d610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90612e2a565b60405180910390fd5b610e7d6000611d4c565b565b610e876125a3565b600860008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610f0b90612e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3790612e79565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b5050505050815250509050919050565b60095481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fd390612e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610fff90612e79565b801561104c5780601f106110215761010080835404028352916020019161104c565b820191906000526020600020905b81548152906001019060200180831161102f57829003601f168201915b5050505050905090565b60026006540361109b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110929061313e565b60405180910390fd5b6002600681905550600b60009054906101000a900460ff166110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906132ce565b60405180910390fd5b6115b3600182611100610af4565b61110a919061331d565b6111149190613373565b10611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b906133f3565b60405180910390fd5b6014811115611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f9061345f565b60405180910390fd5b806009546111a6919061347f565b3410156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df9061354b565b60405180910390fd5b60005b8181101561122157611204336111ff610af4565b611e12565b61120e600a611fdf565b80806112199061356b565b9150506111eb565b50600160068190555050565b6112356117e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906135ff565b60405180910390fd5b80600560006112af6117e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661135c6117e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113a191906126a4565b60405180910390a35050565b6113be6113b86117e4565b8361191f565b6113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906130d2565b60405180910390fd5b61140984848484611ff5565b50505050565b601481565b60606000600d6000848152602001908152602001600020805461143690612e79565b80601f016020809104026020016040519081016040528092919081815260200182805461146290612e79565b80156114af5780601f10611484576101008083540402835291602001916114af565b820191906000526020600020905b81548152906001019060200180831161149257829003601f168201915b505050505090506000815111156114c957809150506114f5565b6114d283612051565b6040516020016114e2919061365b565b6040516020818303038152906040529150505b919050565b6000807f000000000000000000000000000000000000000000000000000000000000000090508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016115709190612877565b602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136b0565b73ffffffffffffffffffffffffffffffffffffffff16036115d65760019150506115e4565b6115e084846120f8565b9150505b92915050565b600b60009054906101000a900460ff1681565b6116056117e4565b73ffffffffffffffffffffffffffffffffffffffff16611623610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090612e2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df9061374f565b60405180910390fd5b6116f181611d4c565b50565b6116fc6117e4565b73ffffffffffffffffffffffffffffffffffffffff1661171a610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790612e2a565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118cb83610c8f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061192a826117ec565b611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906137e1565b60405180910390fd5b600061197483610c8f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119e357508373ffffffffffffffffffffffffffffffffffffffff166119cb846108b0565b73ffffffffffffffffffffffffffffffffffffffff16145b806119f457506119f381856114fa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a1d82610c8f565b73ffffffffffffffffffffffffffffffffffffffff1614611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90613873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613905565b60405180910390fd5b611aed83838361218c565b611af8600082611858565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b489190613373565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9f919061331d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80471015611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613971565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611cc1906139c2565b60006040518083038185875af1925050503d8060008114611cfe576040519150601f19603f3d011682016040523d82523d6000602084013e611d03565b606091505b5050905080611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613a49565b60405180910390fd5b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890613ab5565b60405180910390fd5b611e8a816117ec565b15611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613b21565b60405180910390fd5b611ed66000838361218c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f26919061331d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b6120008484846119fd565b61200c84848484612191565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613bb3565b60405180910390fd5b50505050565b606061205c826117ec565b61209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613c45565b60405180910390fd5b60006120a5612318565b905060008151116120c557604051806020016040528060008152506120f0565b806120cf846123aa565b6040516020016120e0929190613c65565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60006121b28473ffffffffffffffffffffffffffffffffffffffff1661250a565b1561230b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121db6117e4565b8786866040518563ffffffff1660e01b81526004016121fd9493929190613cde565b6020604051808303816000875af192505050801561223957506040513d601f19601f820116820180604052508101906122369190613d3f565b60015b6122bb573d8060008114612269576040519150601f19603f3d011682016040523d82523d6000602084013e61226e565b606091505b5060008151036122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90613bb3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612310565b600190505b949350505050565b6060600c805461232790612e79565b80601f016020809104026020016040519081016040528092919081815260200182805461235390612e79565b80156123a05780601f10612375576101008083540402835291602001916123a0565b820191906000526020600020905b81548152906001019060200180831161238357829003601f168201915b5050505050905090565b6060600082036123f1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612505565b600082905060005b6000821461242357808061240c9061356b565b915050600a8261241c9190613d9b565b91506123f9565b60008167ffffffffffffffff81111561243f5761243e612908565b5b6040519080825280601f01601f1916602001820160405280156124715781602001600182028036833780820191505090505b5090505b600085146124fe5760018261248a9190613373565b9150600a856124999190613dcc565b60306124a5919061331d565b60f81b8183815181106124bb576124ba613dfd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f79190613d9b565b9450612475565b8093505050505b919050565b600080823b905060008111915050919050565b82805461252990612e79565b90600052602060002090601f01602090048101928261254b5760008555612592565b82601f1061256457805160ff1916838001178555612592565b82800160010185558215612592579182015b82811115612591578251825591602001919060010190612576565b5b50905061259f91906125d3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b5b808211156125ec5760008160009055506001016125d4565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61263981612604565b811461264457600080fd5b50565b60008135905061265681612630565b92915050565b600060208284031215612672576126716125fa565b5b600061268084828501612647565b91505092915050565b60008115159050919050565b61269e81612689565b82525050565b60006020820190506126b96000830184612695565b92915050565b6126c881612689565b81146126d357600080fd5b50565b6000813590506126e5816126bf565b92915050565b600060208284031215612701576127006125fa565b5b600061270f848285016126d6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612752578082015181840152602081019050612737565b83811115612761576000848401525b50505050565b6000601f19601f8301169050919050565b600061278382612718565b61278d8185612723565b935061279d818560208601612734565b6127a681612767565b840191505092915050565b600060208201905081810360008301526127cb8184612778565b905092915050565b6000819050919050565b6127e6816127d3565b81146127f157600080fd5b50565b600081359050612803816127dd565b92915050565b60006020828403121561281f5761281e6125fa565b5b600061282d848285016127f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286182612836565b9050919050565b61287181612856565b82525050565b600060208201905061288c6000830184612868565b92915050565b61289b81612856565b81146128a657600080fd5b50565b6000813590506128b881612892565b92915050565b600080604083850312156128d5576128d46125fa565b5b60006128e3858286016128a9565b92505060206128f4858286016127f4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61294082612767565b810181811067ffffffffffffffff8211171561295f5761295e612908565b5b80604052505050565b60006129726125f0565b905061297e8282612937565b919050565b600067ffffffffffffffff82111561299e5761299d612908565b5b6129a782612767565b9050602081019050919050565b82818337600083830152505050565b60006129d66129d184612983565b612968565b9050828152602081018484840111156129f2576129f1612903565b5b6129fd8482856129b4565b509392505050565b600082601f830112612a1a57612a196128fe565b5b8135612a2a8482602086016129c3565b91505092915050565b60008060408385031215612a4a57612a496125fa565b5b6000612a58858286016127f4565b925050602083013567ffffffffffffffff811115612a7957612a786125ff565b5b612a8585828601612a05565b9150509250929050565b612a98816127d3565b82525050565b6000602082019050612ab36000830184612a8f565b92915050565b600080600060608486031215612ad257612ad16125fa565b5b6000612ae0868287016128a9565b9350506020612af1868287016128a9565b9250506040612b02868287016127f4565b9150509250925092565b600060208284031215612b2257612b216125fa565b5b600082013567ffffffffffffffff811115612b4057612b3f6125ff565b5b612b4c84828501612a05565b91505092915050565b600060208284031215612b6b57612b6a6125fa565b5b6000612b79848285016128a9565b91505092915050565b612b8b81612856565b82525050565b600082825260208201905092915050565b6000612bad82612718565b612bb78185612b91565b9350612bc7818560208601612734565b612bd081612767565b840191505092915050565b6000604083016000830151612bf36000860182612b82565b5060208301518482036020860152612c0b8282612ba2565b9150508091505092915050565b60006020820190508181036000830152612c328184612bdb565b905092915050565b60008060408385031215612c5157612c506125fa565b5b6000612c5f858286016128a9565b9250506020612c70858286016126d6565b9150509250929050565b600067ffffffffffffffff821115612c9557612c94612908565b5b612c9e82612767565b9050602081019050919050565b6000612cbe612cb984612c7a565b612968565b905082815260208101848484011115612cda57612cd9612903565b5b612ce58482856129b4565b509392505050565b600082601f830112612d0257612d016128fe565b5b8135612d12848260208601612cab565b91505092915050565b60008060008060808587031215612d3557612d346125fa565b5b6000612d43878288016128a9565b9450506020612d54878288016128a9565b9350506040612d65878288016127f4565b925050606085013567ffffffffffffffff811115612d8657612d856125ff565b5b612d9287828801612ced565b91505092959194509250565b60008060408385031215612db557612db46125fa565b5b6000612dc3858286016128a9565b9250506020612dd4858286016128a9565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e14602083612723565b9150612e1f82612dde565b602082019050919050565b60006020820190508181036000830152612e4381612e07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e9157607f821691505b602082108103612ea457612ea3612e4a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612f06602c83612723565b9150612f1182612eaa565b604082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f98602183612723565b9150612fa382612f3c565b604082019050919050565b60006020820190508181036000830152612fc781612f8b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061302a603883612723565b915061303582612fce565b604082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130bc603183612723565b91506130c782613060565b604082019050919050565b600060208201905081810360008301526130eb816130af565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613128601f83612723565b9150613133826130f2565b602082019050919050565b600060208201905081810360008301526131578161311b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006131ba602983612723565b91506131c58261315e565b604082019050919050565b600060208201905081810360008301526131e9816131ad565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061324c602a83612723565b9150613257826131f0565b604082019050919050565b6000602082019050818103600083015261327b8161323f565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b60006132b8600f83612723565b91506132c382613282565b602082019050919050565b600060208201905081810360008301526132e7816132ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613328826127d3565b9150613333836127d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613368576133676132ee565b5b828201905092915050565b600061337e826127d3565b9150613389836127d3565b92508282101561339c5761339b6132ee565b5b828203905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b60006133dd601283612723565b91506133e8826133a7565b602082019050919050565b6000602082019050818103600083015261340c816133d0565b9050919050565b7f4d696e74206174206d6f737420323020617420612074696d6500000000000000600082015250565b6000613449601983612723565b915061345482613413565b602082019050919050565b600060208201905081810360008301526134788161343c565b9050919050565b600061348a826127d3565b9150613495836127d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134ce576134cd6132ee565b5b828202905092915050565b7f496e73756666696369656e74207061796d656e742c20302e303520455448207060008201527f6572206974656d00000000000000000000000000000000000000000000000000602082015250565b6000613535602783612723565b9150613540826134d9565b604082019050919050565b6000602082019050818103600083015261356481613528565b9050919050565b6000613576826127d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135a8576135a76132ee565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006135e9601983612723565b91506135f4826135b3565b602082019050919050565b60006020820190508181036000830152613618816135dc565b9050919050565b600081905092915050565b600061363582612718565b61363f818561361f565b935061364f818560208601612734565b80840191505092915050565b6000613667828461362a565b915081905092915050565b600061367d82612856565b9050919050565b61368d81613672565b811461369857600080fd5b50565b6000815190506136aa81613684565b92915050565b6000602082840312156136c6576136c56125fa565b5b60006136d48482850161369b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613739602683612723565b9150613744826136dd565b604082019050919050565b600060208201905081810360008301526137688161372c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006137cb602c83612723565b91506137d68261376f565b604082019050919050565b600060208201905081810360008301526137fa816137be565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061385d602983612723565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138ef602483612723565b91506138fa82613893565b604082019050919050565b6000602082019050818103600083015261391e816138e2565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061395b601d83612723565b915061396682613925565b602082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b600081905092915050565b50565b60006139ac600083613991565b91506139b78261399c565b600082019050919050565b60006139cd8261399f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613a33603a83612723565b9150613a3e826139d7565b604082019050919050565b60006020820190508181036000830152613a6281613a26565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613a9f602083612723565b9150613aaa82613a69565b602082019050919050565b60006020820190508181036000830152613ace81613a92565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613b0b601c83612723565b9150613b1682613ad5565b602082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613b9d603283612723565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c2f602f83612723565b9150613c3a82613bd3565b604082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b6000613c71828561362a565b9150613c7d828461362a565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613cb082613c89565b613cba8185613c94565b9350613cca818560208601612734565b613cd381612767565b840191505092915050565b6000608082019050613cf36000830187612868565b613d006020830186612868565b613d0d6040830185612a8f565b8181036060830152613d1f8184613ca5565b905095945050505050565b600081519050613d3981612630565b92915050565b600060208284031215613d5557613d546125fa565b5b6000613d6384828501613d2a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613da6826127d3565b9150613db1836127d3565b925082613dc157613dc0613d6c565b5b828204905092915050565b6000613dd7826127d3565b9150613de2836127d3565b925082613df257613df1613d6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122043dec07c6278133b874bbefdc3bf411d3f5d7a1acc2369eaa882156de5993c2764736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000003668747470733a2f2f356a7737672d67696161612d61616161692d61636a7a712d6361692e7261772e6963302e6170702f546f6b656e2f00000000000000000000

Deployed Bytecode

0x6080604052600436106101b75760003560e01c8063715018a6116100ec578063b88d4fde1161008a578063e985e9c511610064578063e985e9c5146105e9578063eb8d244414610626578063f2fde38b14610651578063f4a0a5281461067a576101b7565b8063b88d4fde14610558578063b8fc105114610581578063c87b56dd146105ac576101b7565b80638da5cb5b116100c65780638da5cb5b146104bd57806395d89b41146104e8578063a0712d6814610513578063a22cb4651461052f576101b7565b8063715018a61461043e5780638b6b8083146104555780638d859f3e14610492576101b7565b806323b872dd1161015957806342842e0e1161013357806342842e0e1461037257806355f804b31461039b5780636352211e146103c457806370a0823114610401576101b7565b806323b872dd1461030757806332cb6b0c146103305780633ccfd60b1461035b576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a578063162094c4146102b357806318160ddd146102dc576101b7565b806301ffc9a7146101bc57806302c88989146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de919061265c565b6106a3565b6040516101f091906126a4565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b91906126eb565b610785565b005b34801561022e57600080fd5b5061023761081e565b60405161024491906127b1565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612809565b6108b0565b6040516102819190612877565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac91906128be565b610935565b005b3480156102bf57600080fd5b506102da60048036038101906102d59190612a33565b610a4c565b005b3480156102e857600080fd5b506102f1610af4565b6040516102fe9190612a9e565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190612ab9565b610b05565b005b34801561033c57600080fd5b50610345610b65565b6040516103529190612a9e565b60405180910390f35b34801561036757600080fd5b50610370610b6b565b005b34801561037e57600080fd5b5061039960048036038101906103949190612ab9565b610bd9565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612b0c565b610bf9565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612809565b610c8f565b6040516103f89190612877565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190612b55565b610d40565b6040516104359190612a9e565b60405180910390f35b34801561044a57600080fd5b50610453610df7565b005b34801561046157600080fd5b5061047c60048036038101906104779190612809565b610e7f565b6040516104899190612c18565b60405180910390f35b34801561049e57600080fd5b506104a7610f94565b6040516104b49190612a9e565b60405180910390f35b3480156104c957600080fd5b506104d2610f9a565b6040516104df9190612877565b60405180910390f35b3480156104f457600080fd5b506104fd610fc4565b60405161050a91906127b1565b60405180910390f35b61052d60048036038101906105289190612809565b611056565b005b34801561053b57600080fd5b5061055660048036038101906105519190612c3a565b61122d565b005b34801561056457600080fd5b5061057f600480360381019061057a9190612d1b565b6113ad565b005b34801561058d57600080fd5b5061059661140f565b6040516105a39190612a9e565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190612809565b611414565b6040516105e091906127b1565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612d9e565b6114fa565b60405161061d91906126a4565b60405180910390f35b34801561063257600080fd5b5061063b6115ea565b60405161064891906126a4565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612b55565b6115fd565b005b34801561068657600080fd5b506106a1600480360381019061069c9190612809565b6116f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077e575061077d8261177a565b5b9050919050565b61078d6117e4565b73ffffffffffffffffffffffffffffffffffffffff166107ab610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f890612e2a565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60606000805461082d90612e79565b80601f016020809104026020016040519081016040528092919081815260200182805461085990612e79565b80156108a65780601f1061087b576101008083540402835291602001916108a6565b820191906000526020600020905b81548152906001019060200180831161088957829003601f168201915b5050505050905090565b60006108bb826117ec565b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190612f1c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094082610c8f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a790612fae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109cf6117e4565b73ffffffffffffffffffffffffffffffffffffffff1614806109fe57506109fd816109f86117e4565b6114fa565b5b610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3490613040565b60405180910390fd5b610a478383611858565b505050565b610a546117e4565b73ffffffffffffffffffffffffffffffffffffffff16610a72610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90612e2a565b60405180910390fd5b80600d60008481526020019081526020016000209080519060200190610aef92919061251d565b505050565b6000610b00600a611911565b905090565b610b16610b106117e4565b8261191f565b610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906130d2565b60405180910390fd5b610b608383836119fd565b505050565b6115b381565b600260065403610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba79061313e565b60405180910390fd5b60026006819055506000479050610bce610bc8610f9a565b82611c58565b506001600681905550565b610bf4838383604051806020016040528060008152506113ad565b505050565b610c016117e4565b73ffffffffffffffffffffffffffffffffffffffff16610c1f610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90612e2a565b60405180910390fd5b80600c9080519060200190610c8b92919061251d565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e906131d0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613262565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dff6117e4565b73ffffffffffffffffffffffffffffffffffffffff16610e1d610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90612e2a565b60405180910390fd5b610e7d6000611d4c565b565b610e876125a3565b600860008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610f0b90612e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3790612e79565b8015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b5050505050815250509050919050565b60095481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fd390612e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610fff90612e79565b801561104c5780601f106110215761010080835404028352916020019161104c565b820191906000526020600020905b81548152906001019060200180831161102f57829003601f168201915b5050505050905090565b60026006540361109b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110929061313e565b60405180910390fd5b6002600681905550600b60009054906101000a900460ff166110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906132ce565b60405180910390fd5b6115b3600182611100610af4565b61110a919061331d565b6111149190613373565b10611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b906133f3565b60405180910390fd5b6014811115611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f9061345f565b60405180910390fd5b806009546111a6919061347f565b3410156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df9061354b565b60405180910390fd5b60005b8181101561122157611204336111ff610af4565b611e12565b61120e600a611fdf565b80806112199061356b565b9150506111eb565b50600160068190555050565b6112356117e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906135ff565b60405180910390fd5b80600560006112af6117e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661135c6117e4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113a191906126a4565b60405180910390a35050565b6113be6113b86117e4565b8361191f565b6113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906130d2565b60405180910390fd5b61140984848484611ff5565b50505050565b601481565b60606000600d6000848152602001908152602001600020805461143690612e79565b80601f016020809104026020016040519081016040528092919081815260200182805461146290612e79565b80156114af5780601f10611484576101008083540402835291602001916114af565b820191906000526020600020905b81548152906001019060200180831161149257829003601f168201915b505050505090506000815111156114c957809150506114f5565b6114d283612051565b6040516020016114e2919061365b565b6040516020818303038152906040529150505b919050565b6000807f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016115709190612877565b602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136b0565b73ffffffffffffffffffffffffffffffffffffffff16036115d65760019150506115e4565b6115e084846120f8565b9150505b92915050565b600b60009054906101000a900460ff1681565b6116056117e4565b73ffffffffffffffffffffffffffffffffffffffff16611623610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090612e2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df9061374f565b60405180910390fd5b6116f181611d4c565b50565b6116fc6117e4565b73ffffffffffffffffffffffffffffffffffffffff1661171a610f9a565b73ffffffffffffffffffffffffffffffffffffffff1614611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790612e2a565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118cb83610c8f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061192a826117ec565b611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906137e1565b60405180910390fd5b600061197483610c8f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119e357508373ffffffffffffffffffffffffffffffffffffffff166119cb846108b0565b73ffffffffffffffffffffffffffffffffffffffff16145b806119f457506119f381856114fa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a1d82610c8f565b73ffffffffffffffffffffffffffffffffffffffff1614611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90613873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613905565b60405180910390fd5b611aed83838361218c565b611af8600082611858565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b489190613373565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b9f919061331d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80471015611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613971565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611cc1906139c2565b60006040518083038185875af1925050503d8060008114611cfe576040519150601f19603f3d011682016040523d82523d6000602084013e611d03565b606091505b5050905080611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613a49565b60405180910390fd5b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890613ab5565b60405180910390fd5b611e8a816117ec565b15611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613b21565b60405180910390fd5b611ed66000838361218c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f26919061331d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b6120008484846119fd565b61200c84848484612191565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613bb3565b60405180910390fd5b50505050565b606061205c826117ec565b61209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613c45565b60405180910390fd5b60006120a5612318565b905060008151116120c557604051806020016040528060008152506120f0565b806120cf846123aa565b6040516020016120e0929190613c65565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60006121b28473ffffffffffffffffffffffffffffffffffffffff1661250a565b1561230b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121db6117e4565b8786866040518563ffffffff1660e01b81526004016121fd9493929190613cde565b6020604051808303816000875af192505050801561223957506040513d601f19601f820116820180604052508101906122369190613d3f565b60015b6122bb573d8060008114612269576040519150601f19603f3d011682016040523d82523d6000602084013e61226e565b606091505b5060008151036122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90613bb3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612310565b600190505b949350505050565b6060600c805461232790612e79565b80601f016020809104026020016040519081016040528092919081815260200182805461235390612e79565b80156123a05780601f10612375576101008083540402835291602001916123a0565b820191906000526020600020905b81548152906001019060200180831161238357829003601f168201915b5050505050905090565b6060600082036123f1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612505565b600082905060005b6000821461242357808061240c9061356b565b915050600a8261241c9190613d9b565b91506123f9565b60008167ffffffffffffffff81111561243f5761243e612908565b5b6040519080825280601f01601f1916602001820160405280156124715781602001600182028036833780820191505090505b5090505b600085146124fe5760018261248a9190613373565b9150600a856124999190613dcc565b60306124a5919061331d565b60f81b8183815181106124bb576124ba613dfd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f79190613d9b565b9450612475565b8093505050505b919050565b600080823b905060008111915050919050565b82805461252990612e79565b90600052602060002090601f01602090048101928261254b5760008555612592565b82601f1061256457805160ff1916838001178555612592565b82800160010185558215612592579182015b82811115612591578251825591602001919060010190612576565b5b50905061259f91906125d3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b5b808211156125ec5760008160009055506001016125d4565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61263981612604565b811461264457600080fd5b50565b60008135905061265681612630565b92915050565b600060208284031215612672576126716125fa565b5b600061268084828501612647565b91505092915050565b60008115159050919050565b61269e81612689565b82525050565b60006020820190506126b96000830184612695565b92915050565b6126c881612689565b81146126d357600080fd5b50565b6000813590506126e5816126bf565b92915050565b600060208284031215612701576127006125fa565b5b600061270f848285016126d6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612752578082015181840152602081019050612737565b83811115612761576000848401525b50505050565b6000601f19601f8301169050919050565b600061278382612718565b61278d8185612723565b935061279d818560208601612734565b6127a681612767565b840191505092915050565b600060208201905081810360008301526127cb8184612778565b905092915050565b6000819050919050565b6127e6816127d3565b81146127f157600080fd5b50565b600081359050612803816127dd565b92915050565b60006020828403121561281f5761281e6125fa565b5b600061282d848285016127f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061286182612836565b9050919050565b61287181612856565b82525050565b600060208201905061288c6000830184612868565b92915050565b61289b81612856565b81146128a657600080fd5b50565b6000813590506128b881612892565b92915050565b600080604083850312156128d5576128d46125fa565b5b60006128e3858286016128a9565b92505060206128f4858286016127f4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61294082612767565b810181811067ffffffffffffffff8211171561295f5761295e612908565b5b80604052505050565b60006129726125f0565b905061297e8282612937565b919050565b600067ffffffffffffffff82111561299e5761299d612908565b5b6129a782612767565b9050602081019050919050565b82818337600083830152505050565b60006129d66129d184612983565b612968565b9050828152602081018484840111156129f2576129f1612903565b5b6129fd8482856129b4565b509392505050565b600082601f830112612a1a57612a196128fe565b5b8135612a2a8482602086016129c3565b91505092915050565b60008060408385031215612a4a57612a496125fa565b5b6000612a58858286016127f4565b925050602083013567ffffffffffffffff811115612a7957612a786125ff565b5b612a8585828601612a05565b9150509250929050565b612a98816127d3565b82525050565b6000602082019050612ab36000830184612a8f565b92915050565b600080600060608486031215612ad257612ad16125fa565b5b6000612ae0868287016128a9565b9350506020612af1868287016128a9565b9250506040612b02868287016127f4565b9150509250925092565b600060208284031215612b2257612b216125fa565b5b600082013567ffffffffffffffff811115612b4057612b3f6125ff565b5b612b4c84828501612a05565b91505092915050565b600060208284031215612b6b57612b6a6125fa565b5b6000612b79848285016128a9565b91505092915050565b612b8b81612856565b82525050565b600082825260208201905092915050565b6000612bad82612718565b612bb78185612b91565b9350612bc7818560208601612734565b612bd081612767565b840191505092915050565b6000604083016000830151612bf36000860182612b82565b5060208301518482036020860152612c0b8282612ba2565b9150508091505092915050565b60006020820190508181036000830152612c328184612bdb565b905092915050565b60008060408385031215612c5157612c506125fa565b5b6000612c5f858286016128a9565b9250506020612c70858286016126d6565b9150509250929050565b600067ffffffffffffffff821115612c9557612c94612908565b5b612c9e82612767565b9050602081019050919050565b6000612cbe612cb984612c7a565b612968565b905082815260208101848484011115612cda57612cd9612903565b5b612ce58482856129b4565b509392505050565b600082601f830112612d0257612d016128fe565b5b8135612d12848260208601612cab565b91505092915050565b60008060008060808587031215612d3557612d346125fa565b5b6000612d43878288016128a9565b9450506020612d54878288016128a9565b9350506040612d65878288016127f4565b925050606085013567ffffffffffffffff811115612d8657612d856125ff565b5b612d9287828801612ced565b91505092959194509250565b60008060408385031215612db557612db46125fa565b5b6000612dc3858286016128a9565b9250506020612dd4858286016128a9565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e14602083612723565b9150612e1f82612dde565b602082019050919050565b60006020820190508181036000830152612e4381612e07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e9157607f821691505b602082108103612ea457612ea3612e4a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612f06602c83612723565b9150612f1182612eaa565b604082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f98602183612723565b9150612fa382612f3c565b604082019050919050565b60006020820190508181036000830152612fc781612f8b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061302a603883612723565b915061303582612fce565b604082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130bc603183612723565b91506130c782613060565b604082019050919050565b600060208201905081810360008301526130eb816130af565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613128601f83612723565b9150613133826130f2565b602082019050919050565b600060208201905081810360008301526131578161311b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006131ba602983612723565b91506131c58261315e565b604082019050919050565b600060208201905081810360008301526131e9816131ad565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061324c602a83612723565b9150613257826131f0565b604082019050919050565b6000602082019050818103600083015261327b8161323f565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b60006132b8600f83612723565b91506132c382613282565b602082019050919050565b600060208201905081810360008301526132e7816132ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613328826127d3565b9150613333836127d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613368576133676132ee565b5b828201905092915050565b600061337e826127d3565b9150613389836127d3565b92508282101561339c5761339b6132ee565b5b828203905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b60006133dd601283612723565b91506133e8826133a7565b602082019050919050565b6000602082019050818103600083015261340c816133d0565b9050919050565b7f4d696e74206174206d6f737420323020617420612074696d6500000000000000600082015250565b6000613449601983612723565b915061345482613413565b602082019050919050565b600060208201905081810360008301526134788161343c565b9050919050565b600061348a826127d3565b9150613495836127d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134ce576134cd6132ee565b5b828202905092915050565b7f496e73756666696369656e74207061796d656e742c20302e303520455448207060008201527f6572206974656d00000000000000000000000000000000000000000000000000602082015250565b6000613535602783612723565b9150613540826134d9565b604082019050919050565b6000602082019050818103600083015261356481613528565b9050919050565b6000613576826127d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135a8576135a76132ee565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006135e9601983612723565b91506135f4826135b3565b602082019050919050565b60006020820190508181036000830152613618816135dc565b9050919050565b600081905092915050565b600061363582612718565b61363f818561361f565b935061364f818560208601612734565b80840191505092915050565b6000613667828461362a565b915081905092915050565b600061367d82612856565b9050919050565b61368d81613672565b811461369857600080fd5b50565b6000815190506136aa81613684565b92915050565b6000602082840312156136c6576136c56125fa565b5b60006136d48482850161369b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613739602683612723565b9150613744826136dd565b604082019050919050565b600060208201905081810360008301526137688161372c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006137cb602c83612723565b91506137d68261376f565b604082019050919050565b600060208201905081810360008301526137fa816137be565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061385d602983612723565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138ef602483612723565b91506138fa82613893565b604082019050919050565b6000602082019050818103600083015261391e816138e2565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061395b601d83612723565b915061396682613925565b602082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b600081905092915050565b50565b60006139ac600083613991565b91506139b78261399c565b600082019050919050565b60006139cd8261399f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613a33603a83612723565b9150613a3e826139d7565b604082019050919050565b60006020820190508181036000830152613a6281613a26565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613a9f602083612723565b9150613aaa82613a69565b602082019050919050565b60006020820190508181036000830152613ace81613a92565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613b0b601c83612723565b9150613b1682613ad5565b602082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613b9d603283612723565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c2f602f83612723565b9150613c3a82613bd3565b604082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b6000613c71828561362a565b9150613c7d828461362a565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613cb082613c89565b613cba8185613c94565b9350613cca818560208601612734565b613cd381612767565b840191505092915050565b6000608082019050613cf36000830187612868565b613d006020830186612868565b613d0d6040830185612a8f565b8181036060830152613d1f8184613ca5565b905095945050505050565b600081519050613d3981612630565b92915050565b600060208284031215613d5557613d546125fa565b5b6000613d6384828501613d2a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613da6826127d3565b9150613db1836127d3565b925082613dc157613dc0613d6c565b5b828204905092915050565b6000613dd7826127d3565b9150613de2836127d3565b925082613df257613df1613d6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122043dec07c6278133b874bbefdc3bf411d3f5d7a1acc2369eaa882156de5993c2764736f6c634300080d0033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000003668747470733a2f2f356a7737672d67696161612d61616161692d61636a7a712d6361692e7261772e6963302e6170702f546f6b656e2f00000000000000000000

-----Decoded View---------------
Arg [0] : customBaseURI_ (string): https://5jw7g-giaaa-aaaai-acjzq-cai.raw.ic0.app/Token/
Arg [1] : proxyRegistryAddress_ (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 68747470733a2f2f356a7737672d67696161612d61616161692d61636a7a712d
Arg [4] : 6361692e7261772e6963302e6170702f546f6b656e2f00000000000000000000


Deployed Bytecode Sourcemap

1454:3016:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1431:300:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3040:103:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2349:98:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3256:135:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2883:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2139:41:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3917:141;;;;;;;;;;;;;:::i;:::-;;5120:179:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3395:110:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2052:235:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:10;;;;;;;;;;;;;:::i;:::-;;1976:140:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2232:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2320:471:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4144:290:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:42:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3619:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4139:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3003:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2795:82:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1431:300:5;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;3040:103:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3125:13:1::1;3110:12;;:28;;;;;;;;;;;;;;;;;;3040:103:::0;:::o;2349:98:5:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;3256:135:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3377:9:1::1;3354:11;:20;3366:7;3354:20;;;;;;;;;;;:32;;;;;;;;;;;;:::i;:::-;;3256:135:::0;;:::o;2883:94::-;2927:7;2949:23;:13;:21;:23::i;:::-;2942:30;;2883:94;:::o;4724:330:5:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;2139:41:1:-;2176:4;2139:41;:::o;3917:141::-;1744:1:11;2325:7;;:19;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3963:15:1::1;3981:21;3963:39;;4009:44;4035:7;:5;:7::i;:::-;4045;4009:17;:44::i;:::-;3957:101;1701:1:11::0;2628:7;:22;;;;3917:141:1:o;5120:179:5:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;3395:110:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3486:14:1::1;3470:13;:30;;;;;;;;;;;;:::i;:::-;;3395:110:::0;:::o;2052:235:5:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1790:205::-;1862:7;1906:1;1889:19;;:5;:19;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1661:101:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1976:140:1:-;2045:22;;:::i;:::-;2084:18;:27;2103:7;2084:27;;;;;;;;;;;2077:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1976:140;;;:::o;2232:40::-;;;;:::o;1029:85:10:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2511:102:5:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;2320:471:1:-;1744:1:11;2325:7;;:19;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;2391:12:1::1;;;;;;;;;;;2383:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;2176:4;2462:1;2454:5;2438:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:25;;;;:::i;:::-;:38;2430:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2225:2;2514:5;:22;;2506:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2609:5;2601;;:13;;;;:::i;:::-;2588:9;:26;;2573:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;2675:9;2670:117;2694:5;2690:1;:9;2670:117;;;2714:32;2720:10;2732:13;:11;:13::i;:::-;2714:5;:32::i;:::-;2755:25;:13;:23;:25::i;:::-;2701:3;;;;;:::i;:::-;;;;2670:117;;;;1701:1:11::0;2628:7;:22;;;;2320:471:1;:::o;4144:290:5:-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;2185:42:1:-;2225:2;2185:42;:::o;3619:276::-;3688:13;3711:23;3737:11;:20;3749:7;3737:20;;;;;;;;;;;3711:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:1;3774:9;3768:23;:27;3764:64;;;3812:9;3805:16;;;;;3764:64;3865:23;3880:7;3865:14;:23::i;:::-;3848:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;3834:56;;;3619:276;;;;:::o;4139:329::-;4244:4;4258:27;4302:20;4258:65;;4375:8;4334:49;;4342:13;:21;;;4364:5;4342:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4334:49;;;4330:81;;4400:4;4393:11;;;;;4330:81;4424:39;4447:5;4454:8;4424:22;:39::i;:::-;4417:46;;;4139:329;;;;;:::o;3003:32::-;;;;;;;;;;;;;:::o;1911:198:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;::::0;1991:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;2795:82:1:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2866:6:1::1;2858:5;:14;;;;2795:82:::0;:::o;763:155:4:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;587:96:2:-;640:7;666:10;659:17;;587:96;:::o;7157:125:5:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;11008:171::-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;827:112:3:-;892:7;918;:14;;;911:21;;827:112;;;:::o;7440:344:5:-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;2012:312:0:-;2126:6;2101:21;:31;;2093:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2178:12;2196:9;:14;;2218:6;2196:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:52;;;2247:7;2239:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2083:241;2012:312;;:::o;2263:187:10:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;9076:372:5:-;9169:1;9155:16;;:2;:16;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;945:123:3:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;6547:307:5:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;2679:329::-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;4500:162::-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;13066:122::-;;;;:::o;11732:778::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;3509:106:1:-;3569:13;3597;3590:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3509:106;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:13:-;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:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:117::-;5637:1;5634;5627:12;5651:117;5760:1;5757;5750:12;5774:180;5822:77;5819:1;5812:88;5919:4;5916:1;5909:15;5943:4;5940:1;5933:15;5960:281;6043:27;6065:4;6043:27;:::i;:::-;6035:6;6031:40;6173:6;6161:10;6158:22;6137:18;6125:10;6122:34;6119:62;6116:88;;;6184:18;;:::i;:::-;6116:88;6224:10;6220:2;6213:22;6003:238;5960:281;;:::o;6247:129::-;6281:6;6308:20;;:::i;:::-;6298:30;;6337:33;6365:4;6357:6;6337:33;:::i;:::-;6247:129;;;:::o;6382:308::-;6444:4;6534:18;6526:6;6523:30;6520:56;;;6556:18;;:::i;:::-;6520:56;6594:29;6616:6;6594:29;:::i;:::-;6586:37;;6678:4;6672;6668:15;6660:23;;6382:308;;;:::o;6696:154::-;6780:6;6775:3;6770;6757:30;6842:1;6833:6;6828:3;6824:16;6817:27;6696:154;;;:::o;6856:412::-;6934:5;6959:66;6975:49;7017:6;6975:49;:::i;:::-;6959:66;:::i;:::-;6950:75;;7048:6;7041:5;7034:21;7086:4;7079:5;7075:16;7124:3;7115:6;7110:3;7106:16;7103:25;7100:112;;;7131:79;;:::i;:::-;7100:112;7221:41;7255:6;7250:3;7245;7221:41;:::i;:::-;6940:328;6856:412;;;;;:::o;7288:340::-;7344:5;7393:3;7386:4;7378:6;7374:17;7370:27;7360:122;;7401:79;;:::i;:::-;7360:122;7518:6;7505:20;7543:79;7618:3;7610:6;7603:4;7595:6;7591:17;7543:79;:::i;:::-;7534:88;;7350:278;7288:340;;;;:::o;7634:654::-;7712:6;7720;7769:2;7757:9;7748:7;7744:23;7740:32;7737:119;;;7775:79;;:::i;:::-;7737:119;7895:1;7920:53;7965:7;7956:6;7945:9;7941:22;7920:53;:::i;:::-;7910:63;;7866:117;8050:2;8039:9;8035:18;8022:32;8081:18;8073:6;8070:30;8067:117;;;8103:79;;:::i;:::-;8067:117;8208:63;8263:7;8254:6;8243:9;8239:22;8208:63;:::i;:::-;8198:73;;7993:288;7634:654;;;;;:::o;8294:118::-;8381:24;8399:5;8381:24;:::i;:::-;8376:3;8369:37;8294:118;;:::o;8418:222::-;8511:4;8549:2;8538:9;8534:18;8526:26;;8562:71;8630:1;8619:9;8615:17;8606:6;8562:71;:::i;:::-;8418:222;;;;:::o;8646:619::-;8723:6;8731;8739;8788:2;8776:9;8767:7;8763:23;8759:32;8756:119;;;8794:79;;:::i;:::-;8756:119;8914:1;8939:53;8984:7;8975:6;8964:9;8960:22;8939:53;:::i;:::-;8929:63;;8885:117;9041:2;9067:53;9112:7;9103:6;9092:9;9088:22;9067:53;:::i;:::-;9057:63;;9012:118;9169:2;9195:53;9240:7;9231:6;9220:9;9216:22;9195:53;:::i;:::-;9185:63;;9140:118;8646:619;;;;;:::o;9271:509::-;9340:6;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9543:1;9532:9;9528:17;9515:31;9573:18;9565:6;9562:30;9559:117;;;9595:79;;:::i;:::-;9559:117;9700:63;9755:7;9746:6;9735:9;9731:22;9700:63;:::i;:::-;9690:73;;9486:287;9271:509;;;;:::o;9786:329::-;9845:6;9894:2;9882:9;9873:7;9869:23;9865:32;9862:119;;;9900:79;;:::i;:::-;9862:119;10020:1;10045:53;10090:7;10081:6;10070:9;10066:22;10045:53;:::i;:::-;10035:63;;9991:117;9786:329;;;;:::o;10121:108::-;10198:24;10216:5;10198:24;:::i;:::-;10193:3;10186:37;10121:108;;:::o;10235:159::-;10309:11;10343:6;10338:3;10331:19;10383:4;10378:3;10374:14;10359:29;;10235:159;;;;:::o;10400:344::-;10478:3;10506:39;10539:5;10506:39;:::i;:::-;10561:61;10615:6;10610:3;10561:61;:::i;:::-;10554:68;;10631:52;10676:6;10671:3;10664:4;10657:5;10653:16;10631:52;:::i;:::-;10708:29;10730:6;10708:29;:::i;:::-;10703:3;10699:39;10692:46;;10482:262;10400:344;;;;:::o;10830:647::-;10963:3;10999:4;10994:3;10990:14;11103:4;11096:5;11092:16;11086:23;11122:63;11179:4;11174:3;11170:14;11156:12;11122:63;:::i;:::-;11014:181;11287:4;11280:5;11276:16;11270:23;11340:3;11334:4;11330:14;11323:4;11318:3;11314:14;11307:38;11366:73;11434:4;11420:12;11366:73;:::i;:::-;11358:81;;11205:245;11467:4;11460:11;;10968:509;10830:647;;;;:::o;11483:401::-;11640:4;11678:2;11667:9;11663:18;11655:26;;11727:9;11721:4;11717:20;11713:1;11702:9;11698:17;11691:47;11755:122;11872:4;11863:6;11755:122;:::i;:::-;11747:130;;11483:401;;;;:::o;11890:468::-;11955:6;11963;12012:2;12000:9;11991:7;11987:23;11983:32;11980:119;;;12018:79;;:::i;:::-;11980:119;12138:1;12163:53;12208:7;12199:6;12188:9;12184:22;12163:53;:::i;:::-;12153:63;;12109:117;12265:2;12291:50;12333:7;12324:6;12313:9;12309:22;12291:50;:::i;:::-;12281:60;;12236:115;11890:468;;;;;:::o;12364:307::-;12425:4;12515:18;12507:6;12504:30;12501:56;;;12537:18;;:::i;:::-;12501:56;12575:29;12597:6;12575:29;:::i;:::-;12567:37;;12659:4;12653;12649:15;12641:23;;12364:307;;;:::o;12677:410::-;12754:5;12779:65;12795:48;12836:6;12795:48;:::i;:::-;12779:65;:::i;:::-;12770:74;;12867:6;12860:5;12853:21;12905:4;12898:5;12894:16;12943:3;12934:6;12929:3;12925:16;12922:25;12919:112;;;12950:79;;:::i;:::-;12919:112;13040:41;13074:6;13069:3;13064;13040:41;:::i;:::-;12760:327;12677:410;;;;;:::o;13106:338::-;13161:5;13210:3;13203:4;13195:6;13191:17;13187:27;13177:122;;13218:79;;:::i;:::-;13177:122;13335:6;13322:20;13360:78;13434:3;13426:6;13419:4;13411:6;13407:17;13360:78;:::i;:::-;13351:87;;13167:277;13106:338;;;;:::o;13450:943::-;13545:6;13553;13561;13569;13618:3;13606:9;13597:7;13593:23;13589:33;13586:120;;;13625:79;;:::i;:::-;13586:120;13745:1;13770:53;13815:7;13806:6;13795:9;13791:22;13770:53;:::i;:::-;13760:63;;13716:117;13872:2;13898:53;13943:7;13934:6;13923:9;13919:22;13898:53;:::i;:::-;13888:63;;13843:118;14000:2;14026:53;14071:7;14062:6;14051:9;14047:22;14026:53;:::i;:::-;14016:63;;13971:118;14156:2;14145:9;14141:18;14128:32;14187:18;14179:6;14176:30;14173:117;;;14209:79;;:::i;:::-;14173:117;14314:62;14368:7;14359:6;14348:9;14344:22;14314:62;:::i;:::-;14304:72;;14099:287;13450:943;;;;;;;:::o;14399:474::-;14467:6;14475;14524:2;14512:9;14503:7;14499:23;14495:32;14492:119;;;14530:79;;:::i;:::-;14492:119;14650:1;14675:53;14720:7;14711:6;14700:9;14696:22;14675:53;:::i;:::-;14665:63;;14621:117;14777:2;14803:53;14848:7;14839:6;14828:9;14824:22;14803:53;:::i;:::-;14793:63;;14748:118;14399:474;;;;;:::o;14879:182::-;15019:34;15015:1;15007:6;15003:14;14996:58;14879:182;:::o;15067:366::-;15209:3;15230:67;15294:2;15289:3;15230:67;:::i;:::-;15223:74;;15306:93;15395:3;15306:93;:::i;:::-;15424:2;15419:3;15415:12;15408:19;;15067:366;;;:::o;15439:419::-;15605:4;15643:2;15632:9;15628:18;15620:26;;15692:9;15686:4;15682:20;15678:1;15667:9;15663:17;15656:47;15720:131;15846:4;15720:131;:::i;:::-;15712:139;;15439:419;;;:::o;15864:180::-;15912:77;15909:1;15902:88;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16050:320;16094:6;16131:1;16125:4;16121:12;16111:22;;16178:1;16172:4;16168:12;16199:18;16189:81;;16255:4;16247:6;16243:17;16233:27;;16189:81;16317:2;16309:6;16306:14;16286:18;16283:38;16280:84;;16336:18;;:::i;:::-;16280:84;16101:269;16050:320;;;:::o;16376:231::-;16516:34;16512:1;16504:6;16500:14;16493:58;16585:14;16580:2;16572:6;16568:15;16561:39;16376:231;:::o;16613:366::-;16755:3;16776:67;16840:2;16835:3;16776:67;:::i;:::-;16769:74;;16852:93;16941:3;16852:93;:::i;:::-;16970:2;16965:3;16961:12;16954:19;;16613:366;;;:::o;16985:419::-;17151:4;17189:2;17178:9;17174:18;17166:26;;17238:9;17232:4;17228:20;17224:1;17213:9;17209:17;17202:47;17266:131;17392:4;17266:131;:::i;:::-;17258:139;;16985:419;;;:::o;17410:220::-;17550:34;17546:1;17538:6;17534:14;17527:58;17619:3;17614:2;17606:6;17602:15;17595:28;17410:220;:::o;17636:366::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:419::-;18174:4;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18008:419;;;:::o;18433:243::-;18573:34;18569:1;18561:6;18557:14;18550:58;18642:26;18637:2;18629:6;18625:15;18618:51;18433:243;:::o;18682:366::-;18824:3;18845:67;18909:2;18904:3;18845:67;:::i;:::-;18838:74;;18921:93;19010:3;18921:93;:::i;:::-;19039:2;19034:3;19030:12;19023:19;;18682:366;;;:::o;19054:419::-;19220:4;19258:2;19247:9;19243:18;19235:26;;19307:9;19301:4;19297:20;19293:1;19282:9;19278:17;19271:47;19335:131;19461:4;19335:131;:::i;:::-;19327:139;;19054:419;;;:::o;19479:236::-;19619:34;19615:1;19607:6;19603:14;19596:58;19688:19;19683:2;19675:6;19671:15;19664:44;19479:236;:::o;19721:366::-;19863:3;19884:67;19948:2;19943:3;19884:67;:::i;:::-;19877:74;;19960:93;20049:3;19960:93;:::i;:::-;20078:2;20073:3;20069:12;20062:19;;19721:366;;;:::o;20093:419::-;20259:4;20297:2;20286:9;20282:18;20274:26;;20346:9;20340:4;20336:20;20332:1;20321:9;20317:17;20310:47;20374:131;20500:4;20374:131;:::i;:::-;20366:139;;20093:419;;;:::o;20518:181::-;20658:33;20654:1;20646:6;20642:14;20635:57;20518:181;:::o;20705:366::-;20847:3;20868:67;20932:2;20927:3;20868:67;:::i;:::-;20861:74;;20944:93;21033:3;20944:93;:::i;:::-;21062:2;21057:3;21053:12;21046:19;;20705:366;;;:::o;21077:419::-;21243:4;21281:2;21270:9;21266:18;21258:26;;21330:9;21324:4;21320:20;21316:1;21305:9;21301:17;21294:47;21358:131;21484:4;21358:131;:::i;:::-;21350:139;;21077:419;;;:::o;21502:228::-;21642:34;21638:1;21630:6;21626:14;21619:58;21711:11;21706:2;21698:6;21694:15;21687:36;21502:228;:::o;21736:366::-;21878:3;21899:67;21963:2;21958:3;21899:67;:::i;:::-;21892:74;;21975:93;22064:3;21975:93;:::i;:::-;22093:2;22088:3;22084:12;22077:19;;21736:366;;;:::o;22108:419::-;22274:4;22312:2;22301:9;22297:18;22289:26;;22361:9;22355:4;22351:20;22347:1;22336:9;22332:17;22325:47;22389:131;22515:4;22389:131;:::i;:::-;22381:139;;22108:419;;;:::o;22533:229::-;22673:34;22669:1;22661:6;22657:14;22650:58;22742:12;22737:2;22729:6;22725:15;22718:37;22533:229;:::o;22768:366::-;22910:3;22931:67;22995:2;22990:3;22931:67;:::i;:::-;22924:74;;23007:93;23096:3;23007:93;:::i;:::-;23125:2;23120:3;23116:12;23109:19;;22768:366;;;:::o;23140:419::-;23306:4;23344:2;23333:9;23329:18;23321:26;;23393:9;23387:4;23383:20;23379:1;23368:9;23364:17;23357:47;23421:131;23547:4;23421:131;:::i;:::-;23413:139;;23140:419;;;:::o;23565:165::-;23705:17;23701:1;23693:6;23689:14;23682:41;23565:165;:::o;23736:366::-;23878:3;23899:67;23963:2;23958:3;23899:67;:::i;:::-;23892:74;;23975:93;24064:3;23975:93;:::i;:::-;24093:2;24088:3;24084:12;24077:19;;23736:366;;;:::o;24108:419::-;24274:4;24312:2;24301:9;24297:18;24289:26;;24361:9;24355:4;24351:20;24347:1;24336:9;24332:17;24325:47;24389:131;24515:4;24389:131;:::i;:::-;24381:139;;24108:419;;;:::o;24533:180::-;24581:77;24578:1;24571:88;24678:4;24675:1;24668:15;24702:4;24699:1;24692:15;24719:305;24759:3;24778:20;24796:1;24778:20;:::i;:::-;24773:25;;24812:20;24830:1;24812:20;:::i;:::-;24807:25;;24966:1;24898:66;24894:74;24891:1;24888:81;24885:107;;;24972:18;;:::i;:::-;24885:107;25016:1;25013;25009:9;25002:16;;24719:305;;;;:::o;25030:191::-;25070:4;25090:20;25108:1;25090:20;:::i;:::-;25085:25;;25124:20;25142:1;25124:20;:::i;:::-;25119:25;;25163:1;25160;25157:8;25154:34;;;25168:18;;:::i;:::-;25154:34;25213:1;25210;25206:9;25198:17;;25030:191;;;;:::o;25227:168::-;25367:20;25363:1;25355:6;25351:14;25344:44;25227:168;:::o;25401:366::-;25543:3;25564:67;25628:2;25623:3;25564:67;:::i;:::-;25557:74;;25640:93;25729:3;25640:93;:::i;:::-;25758:2;25753:3;25749:12;25742:19;;25401:366;;;:::o;25773:419::-;25939:4;25977:2;25966:9;25962:18;25954:26;;26026:9;26020:4;26016:20;26012:1;26001:9;25997:17;25990:47;26054:131;26180:4;26054:131;:::i;:::-;26046:139;;25773:419;;;:::o;26198:175::-;26338:27;26334:1;26326:6;26322:14;26315:51;26198:175;:::o;26379:366::-;26521:3;26542:67;26606:2;26601:3;26542:67;:::i;:::-;26535:74;;26618:93;26707:3;26618:93;:::i;:::-;26736:2;26731:3;26727:12;26720:19;;26379:366;;;:::o;26751:419::-;26917:4;26955:2;26944:9;26940:18;26932:26;;27004:9;26998:4;26994:20;26990:1;26979:9;26975:17;26968:47;27032:131;27158:4;27032:131;:::i;:::-;27024:139;;26751:419;;;:::o;27176:348::-;27216:7;27239:20;27257:1;27239:20;:::i;:::-;27234:25;;27273:20;27291:1;27273:20;:::i;:::-;27268:25;;27461:1;27393:66;27389:74;27386:1;27383:81;27378:1;27371:9;27364:17;27360:105;27357:131;;;27468:18;;:::i;:::-;27357:131;27516:1;27513;27509:9;27498:20;;27176:348;;;;:::o;27530:226::-;27670:34;27666:1;27658:6;27654:14;27647:58;27739:9;27734:2;27726:6;27722:15;27715:34;27530:226;:::o;27762:366::-;27904:3;27925:67;27989:2;27984:3;27925:67;:::i;:::-;27918:74;;28001:93;28090:3;28001:93;:::i;:::-;28119:2;28114:3;28110:12;28103:19;;27762:366;;;:::o;28134:419::-;28300:4;28338:2;28327:9;28323:18;28315:26;;28387:9;28381:4;28377:20;28373:1;28362:9;28358:17;28351:47;28415:131;28541:4;28415:131;:::i;:::-;28407:139;;28134:419;;;:::o;28559:233::-;28598:3;28621:24;28639:5;28621:24;:::i;:::-;28612:33;;28667:66;28660:5;28657:77;28654:103;;28737:18;;:::i;:::-;28654:103;28784:1;28777:5;28773:13;28766:20;;28559:233;;;:::o;28798:175::-;28938:27;28934:1;28926:6;28922:14;28915:51;28798:175;:::o;28979:366::-;29121:3;29142:67;29206:2;29201:3;29142:67;:::i;:::-;29135:74;;29218:93;29307:3;29218:93;:::i;:::-;29336:2;29331:3;29327:12;29320:19;;28979:366;;;:::o;29351:419::-;29517:4;29555:2;29544:9;29540:18;29532:26;;29604:9;29598:4;29594:20;29590:1;29579:9;29575:17;29568:47;29632:131;29758:4;29632:131;:::i;:::-;29624:139;;29351:419;;;:::o;29776:148::-;29878:11;29915:3;29900:18;;29776:148;;;;:::o;29930:377::-;30036:3;30064:39;30097:5;30064:39;:::i;:::-;30119:89;30201:6;30196:3;30119:89;:::i;:::-;30112:96;;30217:52;30262:6;30257:3;30250:4;30243:5;30239:16;30217:52;:::i;:::-;30294:6;30289:3;30285:16;30278:23;;30040:267;29930:377;;;;:::o;30313:275::-;30445:3;30467:95;30558:3;30549:6;30467:95;:::i;:::-;30460:102;;30579:3;30572:10;;30313:275;;;;:::o;30594:124::-;30659:7;30688:24;30706:5;30688:24;:::i;:::-;30677:35;;30594:124;;;:::o;30724:178::-;30825:52;30871:5;30825:52;:::i;:::-;30818:5;30815:63;30805:91;;30892:1;30889;30882:12;30805:91;30724:178;:::o;30908:199::-;30993:5;31024:6;31018:13;31009:22;;31040:61;31095:5;31040:61;:::i;:::-;30908:199;;;;:::o;31113:407::-;31211:6;31260:2;31248:9;31239:7;31235:23;31231:32;31228:119;;;31266:79;;:::i;:::-;31228:119;31386:1;31411:92;31495:7;31486:6;31475:9;31471:22;31411:92;:::i;:::-;31401:102;;31357:156;31113:407;;;;:::o;31526:225::-;31666:34;31662:1;31654:6;31650:14;31643:58;31735:8;31730:2;31722:6;31718:15;31711:33;31526:225;:::o;31757:366::-;31899:3;31920:67;31984:2;31979:3;31920:67;:::i;:::-;31913:74;;31996:93;32085:3;31996:93;:::i;:::-;32114:2;32109:3;32105:12;32098:19;;31757:366;;;:::o;32129:419::-;32295:4;32333:2;32322:9;32318:18;32310:26;;32382:9;32376:4;32372:20;32368:1;32357:9;32353:17;32346:47;32410:131;32536:4;32410:131;:::i;:::-;32402:139;;32129:419;;;:::o;32554:231::-;32694:34;32690:1;32682:6;32678:14;32671:58;32763:14;32758:2;32750:6;32746:15;32739:39;32554:231;:::o;32791:366::-;32933:3;32954:67;33018:2;33013:3;32954:67;:::i;:::-;32947:74;;33030:93;33119:3;33030:93;:::i;:::-;33148:2;33143:3;33139:12;33132:19;;32791:366;;;:::o;33163:419::-;33329:4;33367:2;33356:9;33352:18;33344:26;;33416:9;33410:4;33406:20;33402:1;33391:9;33387:17;33380:47;33444:131;33570:4;33444:131;:::i;:::-;33436:139;;33163:419;;;:::o;33588:228::-;33728:34;33724:1;33716:6;33712:14;33705:58;33797:11;33792:2;33784:6;33780:15;33773:36;33588:228;:::o;33822:366::-;33964:3;33985:67;34049:2;34044:3;33985:67;:::i;:::-;33978:74;;34061:93;34150:3;34061:93;:::i;:::-;34179:2;34174:3;34170:12;34163:19;;33822:366;;;:::o;34194:419::-;34360:4;34398:2;34387:9;34383:18;34375:26;;34447:9;34441:4;34437:20;34433:1;34422:9;34418:17;34411:47;34475:131;34601:4;34475:131;:::i;:::-;34467:139;;34194:419;;;:::o;34619:223::-;34759:34;34755:1;34747:6;34743:14;34736:58;34828:6;34823:2;34815:6;34811:15;34804:31;34619:223;:::o;34848:366::-;34990:3;35011:67;35075:2;35070:3;35011:67;:::i;:::-;35004:74;;35087:93;35176:3;35087:93;:::i;:::-;35205:2;35200:3;35196:12;35189:19;;34848:366;;;:::o;35220:419::-;35386:4;35424:2;35413:9;35409:18;35401:26;;35473:9;35467:4;35463:20;35459:1;35448:9;35444:17;35437:47;35501:131;35627:4;35501:131;:::i;:::-;35493:139;;35220:419;;;:::o;35645:179::-;35785:31;35781:1;35773:6;35769:14;35762:55;35645:179;:::o;35830:366::-;35972:3;35993:67;36057:2;36052:3;35993:67;:::i;:::-;35986:74;;36069:93;36158:3;36069:93;:::i;:::-;36187:2;36182:3;36178:12;36171:19;;35830:366;;;:::o;36202:419::-;36368:4;36406:2;36395:9;36391:18;36383:26;;36455:9;36449:4;36445:20;36441:1;36430:9;36426:17;36419:47;36483:131;36609:4;36483:131;:::i;:::-;36475:139;;36202:419;;;:::o;36627:147::-;36728:11;36765:3;36750:18;;36627:147;;;;:::o;36780:114::-;;:::o;36900:398::-;37059:3;37080:83;37161:1;37156:3;37080:83;:::i;:::-;37073:90;;37172:93;37261:3;37172:93;:::i;:::-;37290:1;37285:3;37281:11;37274:18;;36900:398;;;:::o;37304:379::-;37488:3;37510:147;37653:3;37510:147;:::i;:::-;37503:154;;37674:3;37667:10;;37304:379;;;:::o;37689:245::-;37829:34;37825:1;37817:6;37813:14;37806:58;37898:28;37893:2;37885:6;37881:15;37874:53;37689:245;:::o;37940:366::-;38082:3;38103:67;38167:2;38162:3;38103:67;:::i;:::-;38096:74;;38179:93;38268:3;38179:93;:::i;:::-;38297:2;38292:3;38288:12;38281:19;;37940:366;;;:::o;38312:419::-;38478:4;38516:2;38505:9;38501:18;38493:26;;38565:9;38559:4;38555:20;38551:1;38540:9;38536:17;38529:47;38593:131;38719:4;38593:131;:::i;:::-;38585:139;;38312:419;;;:::o;38737:182::-;38877:34;38873:1;38865:6;38861:14;38854:58;38737:182;:::o;38925:366::-;39067:3;39088:67;39152:2;39147:3;39088:67;:::i;:::-;39081:74;;39164:93;39253:3;39164:93;:::i;:::-;39282:2;39277:3;39273:12;39266:19;;38925:366;;;:::o;39297:419::-;39463:4;39501:2;39490:9;39486:18;39478:26;;39550:9;39544:4;39540:20;39536:1;39525:9;39521:17;39514:47;39578:131;39704:4;39578:131;:::i;:::-;39570:139;;39297:419;;;:::o;39722:178::-;39862:30;39858:1;39850:6;39846:14;39839:54;39722:178;:::o;39906:366::-;40048:3;40069:67;40133:2;40128:3;40069:67;:::i;:::-;40062:74;;40145:93;40234:3;40145:93;:::i;:::-;40263:2;40258:3;40254:12;40247:19;;39906:366;;;:::o;40278:419::-;40444:4;40482:2;40471:9;40467:18;40459:26;;40531:9;40525:4;40521:20;40517:1;40506:9;40502:17;40495:47;40559:131;40685:4;40559:131;:::i;:::-;40551:139;;40278:419;;;:::o;40703:237::-;40843:34;40839:1;40831:6;40827:14;40820:58;40912:20;40907:2;40899:6;40895:15;40888:45;40703:237;:::o;40946:366::-;41088:3;41109:67;41173:2;41168:3;41109:67;:::i;:::-;41102:74;;41185:93;41274:3;41185:93;:::i;:::-;41303:2;41298:3;41294:12;41287:19;;40946:366;;;:::o;41318:419::-;41484:4;41522:2;41511:9;41507:18;41499:26;;41571:9;41565:4;41561:20;41557:1;41546:9;41542:17;41535:47;41599:131;41725:4;41599:131;:::i;:::-;41591:139;;41318:419;;;:::o;41743:234::-;41883:34;41879:1;41871:6;41867:14;41860:58;41952:17;41947:2;41939:6;41935:15;41928:42;41743:234;:::o;41983:366::-;42125:3;42146:67;42210:2;42205:3;42146:67;:::i;:::-;42139:74;;42222:93;42311:3;42222:93;:::i;:::-;42340:2;42335:3;42331:12;42324:19;;41983:366;;;:::o;42355:419::-;42521:4;42559:2;42548:9;42544:18;42536:26;;42608:9;42602:4;42598:20;42594:1;42583:9;42579:17;42572:47;42636:131;42762:4;42636:131;:::i;:::-;42628:139;;42355:419;;;:::o;42780:435::-;42960:3;42982:95;43073:3;43064:6;42982:95;:::i;:::-;42975:102;;43094:95;43185:3;43176:6;43094:95;:::i;:::-;43087:102;;43206:3;43199:10;;42780:435;;;;;:::o;43221:98::-;43272:6;43306:5;43300:12;43290:22;;43221:98;;;:::o;43325:168::-;43408:11;43442:6;43437:3;43430:19;43482:4;43477:3;43473:14;43458:29;;43325:168;;;;:::o;43499:360::-;43585:3;43613:38;43645:5;43613:38;:::i;:::-;43667:70;43730:6;43725:3;43667:70;:::i;:::-;43660:77;;43746:52;43791:6;43786:3;43779:4;43772:5;43768:16;43746:52;:::i;:::-;43823:29;43845:6;43823:29;:::i;:::-;43818:3;43814:39;43807:46;;43589:270;43499:360;;;;:::o;43865:640::-;44060:4;44098:3;44087:9;44083:19;44075:27;;44112:71;44180:1;44169:9;44165:17;44156:6;44112:71;:::i;:::-;44193:72;44261:2;44250:9;44246:18;44237:6;44193:72;:::i;:::-;44275;44343:2;44332:9;44328:18;44319:6;44275:72;:::i;:::-;44394:9;44388:4;44384:20;44379:2;44368:9;44364:18;44357:48;44422:76;44493:4;44484:6;44422:76;:::i;:::-;44414:84;;43865:640;;;;;;;:::o;44511:141::-;44567:5;44598:6;44592:13;44583:22;;44614:32;44640:5;44614:32;:::i;:::-;44511:141;;;;:::o;44658:349::-;44727:6;44776:2;44764:9;44755:7;44751:23;44747:32;44744:119;;;44782:79;;:::i;:::-;44744:119;44902:1;44927:63;44982:7;44973:6;44962:9;44958:22;44927:63;:::i;:::-;44917:73;;44873:127;44658:349;;;;:::o;45013:180::-;45061:77;45058:1;45051:88;45158:4;45155:1;45148:15;45182:4;45179:1;45172:15;45199:185;45239:1;45256:20;45274:1;45256:20;:::i;:::-;45251:25;;45290:20;45308:1;45290:20;:::i;:::-;45285:25;;45329:1;45319:35;;45334:18;;:::i;:::-;45319:35;45376:1;45373;45369:9;45364:14;;45199:185;;;;:::o;45390:176::-;45422:1;45439:20;45457:1;45439:20;:::i;:::-;45434:25;;45473:20;45491:1;45473:20;:::i;:::-;45468:25;;45512:1;45502:35;;45517:18;;:::i;:::-;45502:35;45558:1;45555;45551:9;45546:14;;45390:176;;;;:::o;45572:180::-;45620:77;45617:1;45610:88;45717:4;45714:1;45707:15;45741:4;45738:1;45731:15

Swarm Source

ipfs://43dec07c6278133b874bbefdc3bf411d3f5d7a1acc2369eaa882156de5993c27
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.