Token Crosschain Rally

Overview CRC1155

Total Supply:
0 XCARS

Holders:
4 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Mjolnir1155

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-10
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;

library Address {

    function isContract(address account) internal view returns (bool) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC165 {

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

interface IERC1155Receiver is IERC165 {

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

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

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

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

    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;

    function isApprovedForAll(address account, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

interface IERC1155MetadataURI is IERC1155 {

    function uri(uint256 id) external view returns (string memory);
}
//Mjolnir replaces other RBAC methods and allows for upgradability with
//multi-versioning support and node contracts to dictate roles further.
//Mjolnir Oracle role is meant to be used with an automated account.
abstract contract MjolnirRBAC {
    mapping(address => bool) internal _thors;

    modifier onlyThor() {
        require(
            _thors[msg.sender] == true || address(this) == msg.sender,
            "Caller cannot wield Mjolnir"
        );
        _;
    }

    function addThor(address _thor)
        external
        onlyOwner
    {
        _thors[_thor] = true;
    }

    function delThor(address _thor)
        external
        onlyOwner
    {
        delete _thors[_thor];
    }

    function disableThor(address _thor)
        external
        onlyOwner
    {
        _thors[_thor] = false;
    }

    function isThor(address _address)
        external
        view
        returns (bool allowed)
    {
        allowed = _thors[_address];
    }

    function toAsgard() external onlyThor {
        delete _thors[msg.sender];
    }
    //Oracle-Role
    mapping(address => bool) internal _oracles;

    modifier onlyOracle() {
        require(
            _oracles[msg.sender] == true || address(this) == msg.sender,
            "Caller is not the Oracle"
        );
        _;
    }

    function addOracle(address _oracle)
        external
        onlyOwner
    {
        _oracles[_oracle] = true;
    }

    function delOracle(address _oracle)
        external
        onlyOwner
    {
        delete _oracles[_oracle];
    }

    function disableOracle(address _oracle)
        external
        onlyOwner
    {
        _oracles[_oracle] = false;
    }

    function isOracle(address _address)
        external
        view
        returns (bool allowed)
    {
        allowed = _oracles[_address];
    }

    function relinquishOracle() external onlyOracle {
        delete _oracles[msg.sender];
    }
    //Ownable-Compatability
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
    //contextCompatability
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


abstract contract ERC165 is IERC165 {

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

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

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

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

    string private _uri;

    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

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

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

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

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

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

        return batchBalances;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

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


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

        address operator = _msgSender();

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

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

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

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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

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

        return array;
    }
}

abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

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

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}
//Mjolnir1155 is a fully-loaded, Game-ready implementation
//of ERC1155 with all of the great Mjolnir features!
//Base contract assigns Thor role to logic contracts and/or admin users.
contract Mjolnir1155 is ERC1155Supply {
    
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "Crosschain Rally";
    symbol = "XCARS";
  }

  function mint(address _to, uint _id, uint _amount) external onlyThor {
    _mint(_to, _id, _amount, "");
  }

  function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyThor {
    _mintBatch(_to, _ids, _amounts, "");
  }

  function burn(address account,uint _id, uint _amount) external onlyThor {
    _burn(account, _id, _amount);
  }

  function burnBatch(address account, uint[] memory _ids, uint[] memory _amounts) external onlyThor {
    _burnBatch(account, _ids, _amounts);
  }

  function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyThor {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }

  function setURI(uint _id, string memory _uri) external onlyThor {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"addOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_thor","type":"address"}],"name":"addThor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"delOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_thor","type":"address"}],"name":"delThor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"disableOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_thor","type":"address"}],"name":"disableThor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isOracle","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isThor","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":[],"name":"relinquishOracle","outputs":[],"stateMutability":"nonpayable","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toAsgard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040805160208101909152600081526200002c33620000a1565b6200003781620000f3565b5060408051808201909152601081526f43726f7373636861696e2052616c6c7960801b60208201526007906200006e9082620001aa565b50604080518082019091526005815264584341525360d81b60208201526008906200009a9082620001aa565b5062000276565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005620001018282620001aa565b5050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013057607f821691505b6020821081036200015157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001a557600081815260208120601f850160051c81016020861015620001805750805b601f850160051c820191505b81811015620001a1578281556001016200018c565b5050505b505050565b81516001600160401b03811115620001c657620001c662000105565b620001de81620001d784546200011b565b8462000157565b602080601f831160018114620002165760008415620001fd5750858301515b600019600386901b1c1916600185901b178555620001a1565b600085815260208120601f198616915b82811015620002475788860151825594840194600190910190840162000226565b5085821015620002665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61276e80620002866000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063862440e21161010f578063c87b56dd116100a2578063e985e9c511610071578063e985e9c514610440578063f242432a1461047c578063f2fde38b1461048f578063f5298aca146104a257600080fd5b8063c87b56dd146103ff578063d81d0a1514610412578063d858c4fe14610425578063df5dd1a51461042d57600080fd5b8063a22cb465116100de578063a22cb46514610374578063a97e5c9314610387578063b21c2fef146103b3578063bd85b039146103df57600080fd5b8063862440e21461033e5780638da5cb5b146103515780638f134f601461031057806395d89b411461036c57600080fd5b80634e1273f4116101875780636b458165116101565780636b45816514610310578063715018a6146103235780637400e6171461032b5780637dc793751461032b57600080fd5b80634e1273f4146102a85780634f558e79146102c8578063510f4104146102ea5780636b20c454146102fd57600080fd5b80630e89341c116101c35780630e89341c14610267578063156e29f61461027a5780632eb2c2d61461028d578063474c4683146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a5780630251ceae1461023d57806306fdde0314610252575b600080fd5b610207610202366004611b32565b6104b5565b6040519081526020015b60405180910390f35b61022d610228366004611b72565b610551565b6040519015158152602001610211565b61025061024b366004611b96565b6105a1565b005b61025a6105ef565b6040516102119190611bf7565b61025a610275366004611c0a565b61067d565b610250610288366004611c23565b61071f565b61025061029b366004611dac565b61077d565b610250610814565b6102bb6102b6366004611e56565b61089c565b6040516102119190611f5c565b61022d6102d6366004611c0a565b600090815260066020526040902054151590565b6102506102f8366004611f6f565b6109c6565b61025061030b366004612020565b610a2a565b61025061031e366004611b96565b610a73565b610250610abe565b610250610339366004611b96565b610af4565b61025061034c366004612094565b610b3f565b6002546040516001600160a01b039091168152602001610211565b61025a610bd2565b6102506103823660046120e5565b610bdf565b61022d610395366004611b96565b6001600160a01b031660009081526001602052604090205460ff1690565b61022d6103c1366004611b96565b6001600160a01b031660009081526020819052604090205460ff1690565b6102076103ed366004611c0a565b60009081526006602052604090205490565b61025a61040d366004611c0a565b610bee565b610250610420366004612020565b610c07565b610250610c60565b61025061043b366004611b96565b610cb7565b61022d61044e366004612121565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b61025061048a366004612154565b610d08565b61025061049d366004611b96565b610d8f565b6102506104b0366004611c23565b610e2a565b60006001600160a01b0383166105265760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060008181526003602090815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061058257506001600160e01b031982166303a24d0760e21b145b8061054b57506301ffc9a760e01b6001600160e01b031983161461054b565b6002546001600160a01b031633146105cb5760405162461bcd60e51b815260040161051d906121b9565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b600780546105fc906121ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610628906121ee565b80156106755780601f1061064a57610100808354040283529160200191610675565b820191906000526020600020905b81548152906001019060200180831161065857829003601f168201915b505050505081565b600081815260096020526040902080546060919061069a906121ee565b80601f01602080910402602001604051908101604052809291908181526020018280546106c6906121ee565b80156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b50505050509050919050565b3360009081526020819052604090205460ff1615156001148061074157503033145b61075d5760405162461bcd60e51b815260040161051d90612228565b61077883838360405180602001604052806000815250610e73565b505050565b6001600160a01b0385163314806107995750610799853361044e565b6108005760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161051d565b61080d8585858585610f4b565b5050505050565b3360009081526001602081905260409091205460ff161515148061083757503033145b6108835760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f7420746865204f7261636c650000000000000000604482015260640161051d565b336000908152600160205260409020805460ff19169055565b606081518351146109015760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161051d565b6000835167ffffffffffffffff81111561091d5761091d611c56565b604051908082528060200260200182016040528015610946578160200160208202803683370190505b50905060005b84518110156109be5761099185828151811061096a5761096a61225f565b60200260200101518583815181106109845761098461225f565b60200260200101516104b5565b8282815181106109a3576109a361225f565b60209081029190910101526109b78161228b565b905061094c565b509392505050565b3360009081526020819052604090205460ff161515600114806109e857503033145b610a045760405162461bcd60e51b815260040161051d90612228565b610a0f8585856110f8565b61080d85838360405180602001604052806000815250611289565b3360009081526020819052604090205460ff16151560011480610a4c57503033145b610a685760405162461bcd60e51b815260040161051d90612228565b6107788383836110f8565b6002546001600160a01b03163314610a9d5760405162461bcd60e51b815260040161051d906121b9565b6001600160a01b03166000908152602081905260409020805460ff19169055565b6002546001600160a01b03163314610ae85760405162461bcd60e51b815260040161051d906121b9565b610af260006113e4565b565b6002546001600160a01b03163314610b1e5760405162461bcd60e51b815260040161051d906121b9565b6001600160a01b03166000908152600160205260409020805460ff19169055565b3360009081526020819052604090205460ff16151560011480610b6157503033145b610b7d5760405162461bcd60e51b815260040161051d90612228565b6000828152600960205260409020610b9582826122ea565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610bc69190611bf7565b60405180910390a25050565b600880546105fc906121ee565b610bea338383611436565b5050565b600960205260009081526040902080546105fc906121ee565b3360009081526020819052604090205460ff16151560011480610c2957503033145b610c455760405162461bcd60e51b815260040161051d90612228565b61077883838360405180602001604052806000815250611289565b3360009081526020819052604090205460ff16151560011480610c8257503033145b610c9e5760405162461bcd60e51b815260040161051d90612228565b336000908152602081905260409020805460ff19169055565b6002546001600160a01b03163314610ce15760405162461bcd60e51b815260040161051d906121b9565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b038516331480610d245750610d24853361044e565b610d825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161051d565b61080d8585858585611516565b6002546001600160a01b03163314610db95760405162461bcd60e51b815260040161051d906121b9565b6001600160a01b038116610e1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051d565b610e27816113e4565b50565b3360009081526020819052604090205460ff16151560011480610e4c57503033145b610e685760405162461bcd60e51b815260040161051d90612228565b610778838383611637565b6001600160a01b038416610e995760405162461bcd60e51b815260040161051d906123aa565b33610eb981600087610eaa8861173c565b610eb38861173c565b87611787565b60008481526003602090815260408083206001600160a01b038916845290915281208054859290610eeb9084906123eb565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461080d81600087878787611900565b8151835114610f6c5760405162461bcd60e51b815260040161051d906123fe565b6001600160a01b038416610f925760405162461bcd60e51b815260040161051d90612446565b33610fa1818787878787611787565b60005b845181101561108a576000858281518110610fc157610fc161225f565b602002602001015190506000858381518110610fdf57610fdf61225f565b60209081029190910181015160008481526003835260408082206001600160a01b038e1683529093529190912054909150818110156110305760405162461bcd60e51b815260040161051d9061248b565b60008381526003602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061106f9084906123eb565b92505081905550505050806110839061228b565b9050610fa4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110da9291906124d5565b60405180910390a46110f0818787878787611a5b565b505050505050565b6001600160a01b03831661111e5760405162461bcd60e51b815260040161051d90612503565b805182511461113f5760405162461bcd60e51b815260040161051d906123fe565b600033905061116281856000868660405180602001604052806000815250611787565b60005b835181101561122a5760008482815181106111825761118261225f565b6020026020010151905060008483815181106111a0576111a061225f565b60209081029190910181015160008481526003835260408082206001600160a01b038c1683529093529190912054909150818110156111f15760405162461bcd60e51b815260040161051d90612546565b60009283526003602090815260408085206001600160a01b038b16865290915290922091039055806112228161228b565b915050611165565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161127b9291906124d5565b60405180910390a450505050565b6001600160a01b0384166112af5760405162461bcd60e51b815260040161051d906123aa565b81518351146112d05760405162461bcd60e51b815260040161051d906123fe565b336112e081600087878787611787565b60005b845181101561137c578381815181106112fe576112fe61225f565b60200260200101516003600087848151811061131c5761131c61225f565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461136491906123eb565b909155508190506113748161228b565b9150506112e3565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113cd9291906124d5565b60405180910390a461080d81600087878787611a5b565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036114a95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161051d565b6001600160a01b03838116600081815260046020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661153c5760405162461bcd60e51b815260040161051d90612446565b3361154c818787610eaa8861173c565b60008481526003602090815260408083206001600160a01b038a1684529091529020548381101561158f5760405162461bcd60e51b815260040161051d9061248b565b60008581526003602090815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906115ce9084906123eb565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461162e828888888888611900565b50505050505050565b6001600160a01b03831661165d5760405162461bcd60e51b815260040161051d90612503565b3361168c8185600061166e8761173c565b6116778761173c565b60405180602001604052806000815250611787565b60008381526003602090815260408083206001600160a01b0388168452909152902054828110156116cf5760405162461bcd60e51b815260040161051d90612546565b60008481526003602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106117765761177661225f565b602090810291909101015292915050565b6001600160a01b03851661180e5760005b835181101561180c578281815181106117b3576117b361225f565b6020026020010151600660008684815181106117d1576117d161225f565b6020026020010151815260200190815260200160002060008282546117f691906123eb565b9091555061180590508161228b565b9050611798565b505b6001600160a01b0384166110f05760005b835181101561162e57600084828151811061183c5761183c61225f565b60200260200101519050600084838151811061185a5761185a61225f565b60200260200101519050600060066000848152602001908152602001600020549050818110156118dd5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161051d565b600092835260066020526040909220910390556118f98161228b565b905061181f565b6001600160a01b0384163b156110f05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611944908990899088908890889060040161258a565b6020604051808303816000875af192505050801561197f575060408051601f3d908101601f1916820190925261197c918101906125cf565b60015b611a2b5761198b6125ec565b806308c379a0036119c4575061199f612608565b806119aa57506119c6565b8060405162461bcd60e51b815260040161051d9190611bf7565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161051d565b6001600160e01b0319811663f23a6e6160e01b1461162e5760405162461bcd60e51b815260040161051d90612692565b6001600160a01b0384163b156110f05760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611a9f90899089908890889088906004016126da565b6020604051808303816000875af1925050508015611ada575060408051601f3d908101601f19168201909252611ad7918101906125cf565b60015b611ae65761198b6125ec565b6001600160e01b0319811663bc197c8160e01b1461162e5760405162461bcd60e51b815260040161051d90612692565b80356001600160a01b0381168114611b2d57600080fd5b919050565b60008060408385031215611b4557600080fd5b611b4e83611b16565b946020939093013593505050565b6001600160e01b031981168114610e2757600080fd5b600060208284031215611b8457600080fd5b8135611b8f81611b5c565b9392505050565b600060208284031215611ba857600080fd5b611b8f82611b16565b6000815180845260005b81811015611bd757602081850181015186830182015201611bbb565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611b8f6020830184611bb1565b600060208284031215611c1c57600080fd5b5035919050565b600080600060608486031215611c3857600080fd5b611c4184611b16565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611c9257611c92611c56565b6040525050565b600067ffffffffffffffff821115611cb357611cb3611c56565b5060051b60200190565b600082601f830112611cce57600080fd5b81356020611cdb82611c99565b604051611ce88282611c6c565b83815260059390931b8501820192828101915086841115611d0857600080fd5b8286015b84811015611d235780358352918301918301611d0c565b509695505050505050565b600067ffffffffffffffff831115611d4857611d48611c56565b604051611d5f601f8501601f191660200182611c6c565b809150838152848484011115611d7457600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611d9d57600080fd5b611b8f83833560208501611d2e565b600080600080600060a08688031215611dc457600080fd5b611dcd86611b16565b9450611ddb60208701611b16565b9350604086013567ffffffffffffffff80821115611df857600080fd5b611e0489838a01611cbd565b94506060880135915080821115611e1a57600080fd5b611e2689838a01611cbd565b93506080880135915080821115611e3c57600080fd5b50611e4988828901611d8c565b9150509295509295909350565b60008060408385031215611e6957600080fd5b823567ffffffffffffffff80821115611e8157600080fd5b818501915085601f830112611e9557600080fd5b81356020611ea282611c99565b604051611eaf8282611c6c565b83815260059390931b8501820192828101915089841115611ecf57600080fd5b948201945b83861015611ef457611ee586611b16565b82529482019490820190611ed4565b96505086013592505080821115611f0a57600080fd5b50611f1785828601611cbd565b9150509250929050565b600081518084526020808501945080840160005b83811015611f5157815187529582019590820190600101611f35565b509495945050505050565b602081526000611b8f6020830184611f21565b600080600080600060a08688031215611f8757600080fd5b611f9086611b16565b9450602086013567ffffffffffffffff80821115611fad57600080fd5b611fb989838a01611cbd565b95506040880135915080821115611fcf57600080fd5b611fdb89838a01611cbd565b94506060880135915080821115611ff157600080fd5b611ffd89838a01611cbd565b9350608088013591508082111561201357600080fd5b50611e4988828901611cbd565b60008060006060848603121561203557600080fd5b61203e84611b16565b9250602084013567ffffffffffffffff8082111561205b57600080fd5b61206787838801611cbd565b9350604086013591508082111561207d57600080fd5b5061208a86828701611cbd565b9150509250925092565b600080604083850312156120a757600080fd5b82359150602083013567ffffffffffffffff8111156120c557600080fd5b8301601f810185136120d657600080fd5b611f1785823560208401611d2e565b600080604083850312156120f857600080fd5b61210183611b16565b91506020830135801515811461211657600080fd5b809150509250929050565b6000806040838503121561213457600080fd5b61213d83611b16565b915061214b60208401611b16565b90509250929050565b600080600080600060a0868803121561216c57600080fd5b61217586611b16565b945061218360208701611b16565b93506040860135925060608601359150608086013567ffffffffffffffff8111156121ad57600080fd5b611e4988828901611d8c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061220257607f821691505b60208210810361222257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601b908201527f43616c6c65722063616e6e6f74207769656c64204d6a6f6c6e69720000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161229d5761229d612275565b5060010190565b601f82111561077857600081815260208120601f850160051c810160208610156122cb5750805b601f850160051c820191505b818110156110f0578281556001016122d7565b815167ffffffffffffffff81111561230457612304611c56565b6123188161231284546121ee565b846122a4565b602080601f83116001811461234d57600084156123355750858301515b600019600386901b1c1916600185901b1785556110f0565b600085815260208120601f198616915b8281101561237c5788860151825594840194600190910190840161235d565b508582101561239a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b8082018082111561054b5761054b612275565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006124e86040830185611f21565b82810360208401526124fa8185611f21565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906125c490830184611bb1565b979650505050505050565b6000602082840312156125e157600080fd5b8151611b8f81611b5c565b600060033d11156126055760046000803e5060005160e01c5b90565b600060443d10156126165790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561264657505050505090565b828501915081518181111561265e5750505050505090565b843d87010160208285010111156126785750505050505090565b61268760208286010187611c6c565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061270690830186611f21565b82810360608401526127188186611f21565b9050828103608084015261272c8185611bb1565b9897505050505050505056fea26469706673582212207753afbf72c229af1cb952c3228cfdd359ee017cd6f8233219823c8ace2ffb1d64736f6c63430008100033

Deployed ByteCode Sourcemap

20469:1276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9789:231;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;9789:231:0;;;;;;;;9358:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;9358:310:0;1019:187:1;6062:113:0;;;;;;:::i;:::-;;:::i;:::-;;20518:18;;;:::i;:::-;;;;;;;:::i;21641:101::-;;;;;;:::i;:::-;;:::i;20707:110::-;;;;;;:::i;:::-;;:::i;11308:442::-;;;;;;:::i;:::-;;:::i;7490:94::-;;;:::i;10028:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19215:122::-;;;;;;:::i;:::-;19272:4;19183:16;;;:12;:16;;;;;;-1:-1:-1;;;19215:122:0;21242:264;;;;;;:::i;:::-;;:::i;21090:146::-;;;;;;:::i;:::-;;:::i;6183:113::-;;;;;;:::i;:::-;;:::i;8028:103::-;;;:::i;7196:126::-;;;;;;:::i;:::-;;:::i;21512:123::-;;;;;;:::i;:::-;;:::i;7809:87::-;7882:6;;7809:87;;-1:-1:-1;;;;;7882:6:0;;;9906:51:1;;9894:2;9879:18;7809:87:0;9760:203:1;20541:20:0;;;:::i;10560:155::-;;;;;;:::i;:::-;;:::i;7330:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7456:18:0;7416:12;7456:18;;;:8;:18;;;;;;;;;7330:152;6430:148;;;;;;:::i;:::-;-1:-1:-1;;;;;6554:16:0;6514:12;6554:16;;;;;;;;;;;;;;6430:148;19094:113;;;;;;:::i;:::-;19156:7;19183:16;;;:12;:16;;;;;;;19094:113;20568:39;;;;;;:::i;:::-;;:::i;20823:142::-;;;;;;:::i;:::-;;:::i;6586:82::-;;;:::i;6938:121::-;;;;;;:::i;:::-;;:::i;10723:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10846:27:0;;;10822:4;10846:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;10723:168;10899:401;;;;;;:::i;:::-;;:::i;8137:201::-;;;;;;:::i;:::-;;:::i;20971:113::-;;;;;;:::i;:::-;;:::i;9789:231::-;9875:7;-1:-1:-1;;;;;9903:21:0;;9895:77;;;;-1:-1:-1;;;9895:77:0;;11398:2:1;9895:77:0;;;11380:21:1;11437:2;11417:18;;;11410:30;11476:34;11456:18;;;11449:62;-1:-1:-1;;;11527:18:1;;;11520:41;11578:19;;9895:77:0;;;;;;;;;-1:-1:-1;9990:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;9990:22:0;;;;;;;;;;9789:231;;;;;:::o;9358:310::-;9460:4;-1:-1:-1;;;;;;9497:41:0;;-1:-1:-1;;;9497:41:0;;:110;;-1:-1:-1;;;;;;;9555:52:0;;-1:-1:-1;;;9555:52:0;9497:110;:163;;;-1:-1:-1;;;;;;;;;;8937:40:0;;;9624:36;8828:157;6062:113;7882:6;;-1:-1:-1;;;;;7882:6:0;8649:10;7942:23;7934:68;;;;-1:-1:-1;;;7934:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6147:13:0::1;:6;:13:::0;;;::::1;::::0;;;;;;:20;;-1:-1:-1;;6147:20:0::1;6163:4;6147:20;::::0;;6062:113::o;20518:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21641:101::-;21723:13;;;;:8;:13;;;;;21716:20;;21694:13;;21723;21716:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21641:101;;;:::o;20707:110::-;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;20783:28:::1;20789:3;20794;20799:7;20783:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;20707:110:::0;;;:::o;11308:442::-;-1:-1:-1;;;;;11541:20:0;;8649:10;11541:20;;:60;;-1:-1:-1;11565:36:0;11582:4;8649:10;10723:168;:::i;11565:36::-;11519:160;;;;-1:-1:-1;;;11519:160:0;;12912:2:1;11519:160:0;;;12894:21:1;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:48;13099:19;;11519:160:0;12710:414:1;11519:160:0;11690:52;11713:4;11719:2;11723:3;11728:7;11737:4;11690:22;:52::i;:::-;11308:442;;;;;:::o;7490:94::-;6808:10;6799:20;;;;:8;:20;;;;;;;;;;;:28;;;;:59;;-1:-1:-1;6839:4:0;6848:10;6831:27;6799:59;6777:133;;;;-1:-1:-1;;;6777:133:0;;13331:2:1;6777:133:0;;;13313:21:1;13370:2;13350:18;;;13343:30;13409:26;13389:18;;;13382:54;13453:18;;6777:133:0;13129:348:1;6777:133:0;7565:10:::1;7556:20;::::0;;;:8:::1;:20;::::0;;;;7549:27;;-1:-1:-1;;7549:27:0::1;::::0;;7490:94::o;10028:524::-;10184:16;10245:3;:10;10226:8;:15;:29;10218:83;;;;-1:-1:-1;;;10218:83:0;;13684:2:1;10218:83:0;;;13666:21:1;13723:2;13703:18;;;13696:30;13762:34;13742:18;;;13735:62;-1:-1:-1;;;13813:18:1;;;13806:39;13862:19;;10218:83:0;13482:405:1;10218:83:0;10314:30;10361:8;:15;10347:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10347:30:0;;10314:63;;10395:9;10390:122;10414:8;:15;10410:1;:19;10390:122;;;10470:30;10480:8;10489:1;10480:11;;;;;;;;:::i;:::-;;;;;;;10493:3;10497:1;10493:6;;;;;;;;:::i;:::-;;;;;;;10470:9;:30::i;:::-;10451:13;10465:1;10451:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;10431:3;;;:::i;:::-;;;10390:122;;;-1:-1:-1;10531:13:0;10028:524;-1:-1:-1;;;10028:524:0:o;21242:264::-;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;21407:41:::1;21418:5;21425:8;21435:12;21407:10;:41::i;:::-;21455:45;21466:5;21473:8;21483:12;21455:45;;;;;;;;;;;::::0;:10:::1;:45::i;21090:146::-:0;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;21195:35:::1;21206:7;21215:4;21221:8;21195:10;:35::i;6183:113::-:0;7882:6;;-1:-1:-1;;;;;7882:6:0;8649:10;7942:23;7934:68;;;;-1:-1:-1;;;7934:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6275:13:0::1;:6;:13:::0;;;::::1;::::0;;;;;;6268:20;;-1:-1:-1;;6268:20:0::1;::::0;;6183:113::o;8028:103::-;7882:6;;-1:-1:-1;;;;;7882:6:0;8649:10;7942:23;7934:68;;;;-1:-1:-1;;;7934:68:0;;;;;;;:::i;:::-;8093:30:::1;8120:1;8093:18;:30::i;:::-;8028:103::o:0;7196:126::-;7882:6;;-1:-1:-1;;;;;7882:6:0;8649:10;7942:23;7934:68;;;;-1:-1:-1;;;7934:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7289:17:0::1;7309:5;7289:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;7289:25:0::1;::::0;;7196:126::o;21512:123::-;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;21583:13:::1;::::0;;;:8:::1;:13;::::0;;;;:20:::1;21599:4:::0;21583:13;:20:::1;:::i;:::-;;21625:3;21615:14;21619:4;21615:14;;;;;;:::i;:::-;;;;;;;;21512:123:::0;;:::o;20541:20::-;;;;;;;:::i;10560:155::-;10655:52;8649:10;10688:8;10698;10655:18;:52::i;:::-;10560:155;;:::o;20568:39::-;;;;;;;;;;;;;;;;:::i;20823:142::-;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;20924:35:::1;20935:3;20940:4;20946:8;20924:35;;;;;;;;;;;::::0;:10:::1;:35::i;6586:82::-:0;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;6649:10:::1;6642:6;:18:::0;;;::::1;::::0;;;;;;6635:25;;-1:-1:-1;;6635:25:0::1;::::0;;6586:82::o;6938:121::-;7882:6;;-1:-1:-1;;;;;7882:6:0;8649:10;7942:23;7934:68;;;;-1:-1:-1;;;7934:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7027:17:0::1;;::::0;;;7047:4:::1;7027:17;::::0;;;;;;;:24;;-1:-1:-1;;7027:24:0::1;::::0;;::::1;::::0;;6938:121::o;10899:401::-;-1:-1:-1;;;;;11107:20:0;;8649:10;11107:20;;:60;;-1:-1:-1;11131:36:0;11148:4;8649:10;10723:168;:::i;11131:36::-;11085:151;;;;-1:-1:-1;;;11085:151:0;;16702:2:1;11085:151:0;;;16684:21:1;16741:2;16721:18;;;16714:30;16780:34;16760:18;;;16753:62;-1:-1:-1;;;16831:18:1;;;16824:39;16880:19;;11085:151:0;16500:405:1;11085:151:0;11247:45;11265:4;11271:2;11275;11279:6;11287:4;11247:17;:45::i;8137:201::-;7882:6;;-1:-1:-1;;;;;7882:6:0;8649:10;7942:23;7934:68;;;;-1:-1:-1;;;7934:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8226:22:0;::::1;8218:73;;;::::0;-1:-1:-1;;;8218:73:0;;17112:2:1;8218:73:0::1;::::0;::::1;17094:21:1::0;17151:2;17131:18;;;17124:30;17190:34;17170:18;;;17163:62;-1:-1:-1;;;17241:18:1;;;17234:36;17287:19;;8218:73:0::1;16910:402:1::0;8218:73:0::1;8302:28;8321:8;8302:18;:28::i;:::-;8137:201:::0;:::o;20971:113::-;5929:10;5922:6;:18;;;;;;;;;;;;;:26;;:18;:26;;:57;;-1:-1:-1;5960:4:0;5969:10;5952:27;5922:57;5900:134;;;;-1:-1:-1;;;5900:134:0;;;;;;;:::i;:::-;21050:28:::1;21056:7;21065:3;21070:7;21050:5;:28::i;13764:569::-:0;-1:-1:-1;;;;;13917:16:0;;13909:62;;;;-1:-1:-1;;;13909:62:0;;;;;;;:::i;:::-;8649:10;14028:102;8649:10;13984:16;14071:2;14075:21;14093:2;14075:17;:21::i;:::-;14098:25;14116:6;14098:17;:25::i;:::-;14125:4;14028:20;:102::i;:::-;14143:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;14143:17:0;;;;;;;;;:27;;14164:6;;14143:13;:27;;14164:6;;14143:27;:::i;:::-;;;;-1:-1:-1;;14186:52:0;;;18023:25:1;;;18079:2;18064:18;;18057:34;;;-1:-1:-1;;;;;14186:52:0;;;;14219:1;;14186:52;;;;;;17996:18:1;14186:52:0;;;;;;;14251:74;14282:8;14300:1;14304:2;14308;14312:6;14320:4;14251:30;:74::i;12586:1074::-;12813:7;:14;12799:3;:10;:28;12791:81;;;;-1:-1:-1;;;12791:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12891:16:0;;12883:66;;;;-1:-1:-1;;;12883:66:0;;;;;;;:::i;:::-;8649:10;13006:60;8649:10;13037:4;13043:2;13047:3;13052:7;13061:4;13006:20;:60::i;:::-;13084:9;13079:421;13103:3;:10;13099:1;:14;13079:421;;;13135:10;13148:3;13152:1;13148:6;;;;;;;;:::i;:::-;;;;;;;13135:19;;13169:14;13186:7;13194:1;13186:10;;;;;;;;:::i;:::-;;;;;;;;;;;;13213:19;13235:13;;;:9;:13;;;;;;-1:-1:-1;;;;;13235:19:0;;;;;;;;;;;;13186:10;;-1:-1:-1;13277:21:0;;;;13269:76;;;;-1:-1:-1;;;13269:76:0;;;;;;;:::i;:::-;13389:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;13389:19:0;;;;;;;;;;13411:20;;;13389:42;;13461:17;;;;;;;:27;;13411:20;;13389:13;13461:27;;13411:20;;13461:27;:::i;:::-;;;;;;;;13120:380;;;13115:3;;;;:::i;:::-;;;13079:421;;;;13547:2;-1:-1:-1;;;;;13517:47:0;13541:4;-1:-1:-1;;;;;13517:47:0;13531:8;-1:-1:-1;;;;;13517:47:0;;13551:3;13556:7;13517:47;;;;;;;:::i;:::-;;;;;;;;13577:75;13613:8;13623:4;13629:2;13633:3;13638:7;13647:4;13577:35;:75::i;:::-;12780:880;12586:1074;;;;;:::o;15742:891::-;-1:-1:-1;;;;;15894:18:0;;15886:66;;;;-1:-1:-1;;;15886:66:0;;;;;;;:::i;:::-;15985:7;:14;15971:3;:10;:28;15963:81;;;;-1:-1:-1;;;15963:81:0;;;;;;;:::i;:::-;16057:16;8649:10;16057:31;;16101:66;16122:8;16132:4;16146:1;16150:3;16155:7;16101:66;;;;;;;;;;;;:20;:66::i;:::-;16185:9;16180:373;16204:3;:10;16200:1;:14;16180:373;;;16236:10;16249:3;16253:1;16249:6;;;;;;;;:::i;:::-;;;;;;;16236:19;;16270:14;16287:7;16295:1;16287:10;;;;;;;;:::i;:::-;;;;;;;;;;;;16314:19;16336:13;;;:9;:13;;;;;;-1:-1:-1;;;;;16336:19:0;;;;;;;;;;;;16287:10;;-1:-1:-1;16378:21:0;;;;16370:70;;;;-1:-1:-1;;;16370:70:0;;;;;;;:::i;:::-;16484:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;16484:19:0;;;;;;;;;;16506:20;;16484:42;;16216:3;;;;:::i;:::-;;;;16180:373;;;;16608:1;-1:-1:-1;;;;;16570:55:0;16594:4;-1:-1:-1;;;;;16570:55:0;16584:8;-1:-1:-1;;;;;16570:55:0;;16612:3;16617:7;16570:55;;;;;;;:::i;:::-;;;;;;;;15875:758;15742:891;;;:::o;14341:735::-;-1:-1:-1;;;;;14519:16:0;;14511:62;;;;-1:-1:-1;;;14511:62:0;;;;;;;:::i;:::-;14606:7;:14;14592:3;:10;:28;14584:81;;;;-1:-1:-1;;;14584:81:0;;;;;;;:::i;:::-;8649:10;14722:66;8649:10;14678:16;14765:2;14769:3;14774:7;14783:4;14722:20;:66::i;:::-;14806:9;14801:103;14825:3;:10;14821:1;:14;14801:103;;;14882:7;14890:1;14882:10;;;;;;;;:::i;:::-;;;;;;;14857:9;:17;14867:3;14871:1;14867:6;;;;;;;;:::i;:::-;;;;;;;14857:17;;;;;;;;;;;:21;14875:2;-1:-1:-1;;;;;14857:21:0;-1:-1:-1;;;;;14857:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;14837:3:0;;-1:-1:-1;14837:3:0;;;:::i;:::-;;;;14801:103;;;;14957:2;-1:-1:-1;;;;;14921:53:0;14953:1;-1:-1:-1;;;;;14921:53:0;14935:8;-1:-1:-1;;;;;14921:53:0;;14961:3;14966:7;14921:53;;;;;;;:::i;:::-;;;;;;;;14987:81;15023:8;15041:1;15045:2;15049:3;15054:7;15063:4;14987:35;:81::i;8344:191::-;8437:6;;;-1:-1:-1;;;;;8454:17:0;;;-1:-1:-1;;;;;;8454:17:0;;;;;;;8487:40;;8437:6;;;8454:17;8437:6;;8487:40;;8418:16;;8487:40;8407:128;8344:191;:::o;16641:331::-;16796:8;-1:-1:-1;;;;;16787:17:0;:5;-1:-1:-1;;;;;16787:17:0;;16779:71;;;;-1:-1:-1;;;16779:71:0;;20809:2:1;16779:71:0;;;20791:21:1;20848:2;20828:18;;;20821:30;20887:34;20867:18;;;20860:62;-1:-1:-1;;;20938:18:1;;;20931:39;20987:19;;16779:71:0;20607:405:1;16779:71:0;-1:-1:-1;;;;;16861:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;16861:46:0;;;;;;;;;;16923:41;;1159::1;;;16923::0;;1132:18:1;16923:41:0;;;;;;;16641:331;;;:::o;11758:820::-;-1:-1:-1;;;;;11946:16:0;;11938:66;;;;-1:-1:-1;;;11938:66:0;;;;;;;:::i;:::-;8649:10;12061:96;8649:10;12092:4;12098:2;12102:21;12120:2;12102:17;:21::i;12061:96::-;12170:19;12192:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;12192:19:0;;;;;;;;;;12230:21;;;;12222:76;;;;-1:-1:-1;;;12222:76:0;;;;;;;:::i;:::-;12334:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;12334:19:0;;;;;;;;;;12356:20;;;12334:42;;12398:17;;;;;;;:27;;12356:20;;12334:13;12398:27;;12356:20;;12398:27;:::i;:::-;;;;-1:-1:-1;;12443:46:0;;;18023:25:1;;;18079:2;18064:18;;18057:34;;;-1:-1:-1;;;;;12443:46:0;;;;;;;;;;;;;;17996:18:1;12443:46:0;;;;;;;12502:68;12533:8;12543:4;12549:2;12553;12557:6;12565:4;12502:30;:68::i;:::-;11927:651;;11758:820;;;;;:::o;15084:648::-;-1:-1:-1;;;;;15211:18:0;;15203:66;;;;-1:-1:-1;;;15203:66:0;;;;;;;:::i;:::-;8649:10;15326:102;8649:10;15357:4;15282:16;15375:21;15393:2;15375:17;:21::i;:::-;15398:25;15416:6;15398:17;:25::i;:::-;15326:102;;;;;;;;;;;;:20;:102::i;:::-;15441:19;15463:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;15463:19:0;;;;;;;;;;15501:21;;;;15493:70;;;;-1:-1:-1;;;15493:70:0;;;;;;;:::i;:::-;15599:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;15599:19:0;;;;;;;;;;;;15621:20;;;15599:42;;15670:54;;18023:25:1;;;18064:18;;;18057:34;;;15599:19:0;;15670:54;;;;;;17996:18:1;15670:54:0;;;;;;;15192:540;;15084:648;;;:::o;18782:198::-;18902:16;;;18916:1;18902:16;;;;;;;;;18848;;18877:22;;18902:16;;;;;;;;;;;;-1:-1:-1;18902:16:0;18877:41;;18940:7;18929:5;18935:1;18929:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;18967:5;18782:198;-1:-1:-1;;18782:198:0:o;19345:931::-;-1:-1:-1;;;;;19667:18:0;;19663:160;;19707:9;19702:110;19726:3;:10;19722:1;:14;19702:110;;;19786:7;19794:1;19786:10;;;;;;;;:::i;:::-;;;;;;;19762:12;:20;19775:3;19779:1;19775:6;;;;;;;;:::i;:::-;;;;;;;19762:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;19738:3:0;;-1:-1:-1;19738:3:0;;:::i;:::-;;;19702:110;;;;19663:160;-1:-1:-1;;;;;19839:16:0;;19835:434;;19877:9;19872:386;19896:3;:10;19892:1;:14;19872:386;;;19932:10;19945:3;19949:1;19945:6;;;;;;;;:::i;:::-;;;;;;;19932:19;;19970:14;19987:7;19995:1;19987:10;;;;;;;;:::i;:::-;;;;;;;19970:27;;20016:14;20033:12;:16;20046:2;20033:16;;;;;;;;;;;;20016:33;;20086:6;20076;:16;;20068:69;;;;-1:-1:-1;;;20068:69:0;;21219:2:1;20068:69:0;;;21201:21:1;21258:2;21238:18;;;21231:30;21297:34;21277:18;;;21270:62;-1:-1:-1;;;21348:18:1;;;21341:38;21396:19;;20068:69:0;21017:404:1;20068:69:0;20189:16;;;;:12;:16;;;;;;20208:15;;20189:34;;19908:3;;;:::i;:::-;;;19872:386;;17209:744;-1:-1:-1;;;;;17424:13:0;;220:20;268:8;17420:526;;17460:72;;-1:-1:-1;;;17460:72:0;;-1:-1:-1;;;;;17460:38:0;;;;;:72;;17499:8;;17509:4;;17515:2;;17519:6;;17527:4;;17460:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17460:72:0;;;;;;;;-1:-1:-1;;17460:72:0;;;;;;;;;;;;:::i;:::-;;;17456:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;17808:6;17801:14;;-1:-1:-1;;;17801:14:0;;;;;;;;:::i;17456:479::-;;;17857:62;;-1:-1:-1;;;17857:62:0;;23308:2:1;17857:62:0;;;23290:21:1;23347:2;23327:18;;;23320:30;23386:34;23366:18;;;23359:62;-1:-1:-1;;;23437:18:1;;;23430:50;23497:19;;17857:62:0;23106:416:1;17456:479:0;-1:-1:-1;;;;;;17582:55:0;;-1:-1:-1;;;17582:55:0;17578:154;;17662:50;;-1:-1:-1;;;17662:50:0;;;;;;;:::i;17961:813::-;-1:-1:-1;;;;;18201:13:0;;220:20;268:8;18197:570;;18237:79;;-1:-1:-1;;;18237:79:0;;-1:-1:-1;;;;;18237:43:0;;;;;:79;;18281:8;;18291:4;;18297:3;;18302:7;;18311:4;;18237:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18237:79:0;;;;;;;;-1:-1:-1;;18237:79:0;;;;;;;;;;;;:::i;:::-;;;18233:523;;;;:::i;:::-;-1:-1:-1;;;;;;18398:60:0;;-1:-1:-1;;;18398:60:0;18394:159;;18483:50;;-1:-1:-1;;;18483:50:0;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:186::-;1270:6;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;1402:423::-;1444:3;1482:5;1476:12;1509:6;1504:3;1497:19;1534:1;1544:162;1558:6;1555:1;1552:13;1544:162;;;1620:4;1676:13;;;1672:22;;1666:29;1648:11;;;1644:20;;1637:59;1573:12;1544:162;;;1548:3;1751:1;1744:4;1735:6;1730:3;1726:16;1722:27;1715:38;1814:4;1807:2;1803:7;1798:2;1790:6;1786:15;1782:29;1777:3;1773:39;1769:50;1762:57;;;1402:423;;;;:::o;1830:220::-;1979:2;1968:9;1961:21;1942:4;1999:45;2040:2;2029:9;2025:18;2017:6;1999:45;:::i;2055:180::-;2114:6;2167:2;2155:9;2146:7;2142:23;2138:32;2135:52;;;2183:1;2180;2173:12;2135:52;-1:-1:-1;2206:23:1;;2055:180;-1:-1:-1;2055:180:1:o;2240:322::-;2317:6;2325;2333;2386:2;2374:9;2365:7;2361:23;2357:32;2354:52;;;2402:1;2399;2392:12;2354:52;2425:29;2444:9;2425:29;:::i;:::-;2415:39;2501:2;2486:18;;2473:32;;-1:-1:-1;2552:2:1;2537:18;;;2524:32;;2240:322;-1:-1:-1;;;2240:322:1:o;2567:127::-;2628:10;2623:3;2619:20;2616:1;2609:31;2659:4;2656:1;2649:15;2683:4;2680:1;2673:15;2699:249;2809:2;2790:13;;-1:-1:-1;;2786:27:1;2774:40;;2844:18;2829:34;;2865:22;;;2826:62;2823:88;;;2891:18;;:::i;:::-;2927:2;2920:22;-1:-1:-1;;2699:249:1:o;2953:183::-;3013:4;3046:18;3038:6;3035:30;3032:56;;;3068:18;;:::i;:::-;-1:-1:-1;3113:1:1;3109:14;3125:4;3105:25;;2953:183::o;3141:724::-;3195:5;3248:3;3241:4;3233:6;3229:17;3225:27;3215:55;;3266:1;3263;3256:12;3215:55;3302:6;3289:20;3328:4;3351:43;3391:2;3351:43;:::i;:::-;3423:2;3417:9;3435:31;3463:2;3455:6;3435:31;:::i;:::-;3501:18;;;3593:1;3589:10;;;;3577:23;;3573:32;;;3535:15;;;;-1:-1:-1;3617:15:1;;;3614:35;;;3645:1;3642;3635:12;3614:35;3681:2;3673:6;3669:15;3693:142;3709:6;3704:3;3701:15;3693:142;;;3775:17;;3763:30;;3813:12;;;;3726;;3693:142;;;-1:-1:-1;3853:6:1;3141:724;-1:-1:-1;;;;;;3141:724:1:o;3870:468::-;3934:5;3968:18;3960:6;3957:30;3954:56;;;3990:18;;:::i;:::-;4039:2;4033:9;4051:69;4108:2;4087:15;;-1:-1:-1;;4083:29:1;4114:4;4079:40;4033:9;4051:69;:::i;:::-;4138:6;4129:15;;4168:6;4160;4153:22;4208:3;4199:6;4194:3;4190:16;4187:25;4184:45;;;4225:1;4222;4215:12;4184:45;4275:6;4270:3;4263:4;4255:6;4251:17;4238:44;4330:1;4323:4;4314:6;4306;4302:19;4298:30;4291:41;;3870:468;;;;;:::o;4343:220::-;4385:5;4438:3;4431:4;4423:6;4419:17;4415:27;4405:55;;4456:1;4453;4446:12;4405:55;4478:79;4553:3;4544:6;4531:20;4524:4;4516:6;4512:17;4478:79;:::i;4568:943::-;4722:6;4730;4738;4746;4754;4807:3;4795:9;4786:7;4782:23;4778:33;4775:53;;;4824:1;4821;4814:12;4775:53;4847:29;4866:9;4847:29;:::i;:::-;4837:39;;4895:38;4929:2;4918:9;4914:18;4895:38;:::i;:::-;4885:48;;4984:2;4973:9;4969:18;4956:32;5007:18;5048:2;5040:6;5037:14;5034:34;;;5064:1;5061;5054:12;5034:34;5087:61;5140:7;5131:6;5120:9;5116:22;5087:61;:::i;:::-;5077:71;;5201:2;5190:9;5186:18;5173:32;5157:48;;5230:2;5220:8;5217:16;5214:36;;;5246:1;5243;5236:12;5214:36;5269:63;5324:7;5313:8;5302:9;5298:24;5269:63;:::i;:::-;5259:73;;5385:3;5374:9;5370:19;5357:33;5341:49;;5415:2;5405:8;5402:16;5399:36;;;5431:1;5428;5421:12;5399:36;;5454:51;5497:7;5486:8;5475:9;5471:24;5454:51;:::i;:::-;5444:61;;;4568:943;;;;;;;;:::o;5516:1208::-;5634:6;5642;5695:2;5683:9;5674:7;5670:23;5666:32;5663:52;;;5711:1;5708;5701:12;5663:52;5751:9;5738:23;5780:18;5821:2;5813:6;5810:14;5807:34;;;5837:1;5834;5827:12;5807:34;5875:6;5864:9;5860:22;5850:32;;5920:7;5913:4;5909:2;5905:13;5901:27;5891:55;;5942:1;5939;5932:12;5891:55;5978:2;5965:16;6000:4;6023:43;6063:2;6023:43;:::i;:::-;6095:2;6089:9;6107:31;6135:2;6127:6;6107:31;:::i;:::-;6173:18;;;6261:1;6257:10;;;;6249:19;;6245:28;;;6207:15;;;;-1:-1:-1;6285:19:1;;;6282:39;;;6317:1;6314;6307:12;6282:39;6341:11;;;;6361:148;6377:6;6372:3;6369:15;6361:148;;;6443:23;6462:3;6443:23;:::i;:::-;6431:36;;6394:12;;;;6487;;;;6361:148;;;6528:6;-1:-1:-1;;6572:18:1;;6559:32;;-1:-1:-1;;6603:16:1;;;6600:36;;;6632:1;6629;6622:12;6600:36;;6655:63;6710:7;6699:8;6688:9;6684:24;6655:63;:::i;:::-;6645:73;;;5516:1208;;;;;:::o;6729:435::-;6782:3;6820:5;6814:12;6847:6;6842:3;6835:19;6873:4;6902:2;6897:3;6893:12;6886:19;;6939:2;6932:5;6928:14;6960:1;6970:169;6984:6;6981:1;6978:13;6970:169;;;7045:13;;7033:26;;7079:12;;;;7114:15;;;;7006:1;6999:9;6970:169;;;-1:-1:-1;7155:3:1;;6729:435;-1:-1:-1;;;;;6729:435:1:o;7169:261::-;7348:2;7337:9;7330:21;7311:4;7368:56;7420:2;7409:9;7405:18;7397:6;7368:56;:::i;7435:1123::-;7630:6;7638;7646;7654;7662;7715:3;7703:9;7694:7;7690:23;7686:33;7683:53;;;7732:1;7729;7722:12;7683:53;7755:29;7774:9;7755:29;:::i;:::-;7745:39;;7835:2;7824:9;7820:18;7807:32;7858:18;7899:2;7891:6;7888:14;7885:34;;;7915:1;7912;7905:12;7885:34;7938:61;7991:7;7982:6;7971:9;7967:22;7938:61;:::i;:::-;7928:71;;8052:2;8041:9;8037:18;8024:32;8008:48;;8081:2;8071:8;8068:16;8065:36;;;8097:1;8094;8087:12;8065:36;8120:63;8175:7;8164:8;8153:9;8149:24;8120:63;:::i;:::-;8110:73;;8236:2;8225:9;8221:18;8208:32;8192:48;;8265:2;8255:8;8252:16;8249:36;;;8281:1;8278;8271:12;8249:36;8304:63;8359:7;8348:8;8337:9;8333:24;8304:63;:::i;:::-;8294:73;;8420:3;8409:9;8405:19;8392:33;8376:49;;8450:2;8440:8;8437:16;8434:36;;;8466:1;8463;8456:12;8434:36;;8489:63;8544:7;8533:8;8522:9;8518:24;8489:63;:::i;8563:669::-;8690:6;8698;8706;8759:2;8747:9;8738:7;8734:23;8730:32;8727:52;;;8775:1;8772;8765:12;8727:52;8798:29;8817:9;8798:29;:::i;:::-;8788:39;;8878:2;8867:9;8863:18;8850:32;8901:18;8942:2;8934:6;8931:14;8928:34;;;8958:1;8955;8948:12;8928:34;8981:61;9034:7;9025:6;9014:9;9010:22;8981:61;:::i;:::-;8971:71;;9095:2;9084:9;9080:18;9067:32;9051:48;;9124:2;9114:8;9111:16;9108:36;;;9140:1;9137;9130:12;9108:36;;9163:63;9218:7;9207:8;9196:9;9192:24;9163:63;:::i;:::-;9153:73;;;8563:669;;;;;:::o;9237:518::-;9315:6;9323;9376:2;9364:9;9355:7;9351:23;9347:32;9344:52;;;9392:1;9389;9382:12;9344:52;9428:9;9415:23;9405:33;;9489:2;9478:9;9474:18;9461:32;9516:18;9508:6;9505:30;9502:50;;;9548:1;9545;9538:12;9502:50;9571:22;;9624:4;9616:13;;9612:27;-1:-1:-1;9602:55:1;;9653:1;9650;9643:12;9602:55;9676:73;9741:7;9736:2;9723:16;9718:2;9714;9710:11;9676:73;:::i;9968:347::-;10033:6;10041;10094:2;10082:9;10073:7;10069:23;10065:32;10062:52;;;10110:1;10107;10100:12;10062:52;10133:29;10152:9;10133:29;:::i;:::-;10123:39;;10212:2;10201:9;10197:18;10184:32;10259:5;10252:13;10245:21;10238:5;10235:32;10225:60;;10281:1;10278;10271:12;10225:60;10304:5;10294:15;;;9968:347;;;;;:::o;10320:260::-;10388:6;10396;10449:2;10437:9;10428:7;10424:23;10420:32;10417:52;;;10465:1;10462;10455:12;10417:52;10488:29;10507:9;10488:29;:::i;:::-;10478:39;;10536:38;10570:2;10559:9;10555:18;10536:38;:::i;:::-;10526:48;;10320:260;;;;;:::o;10585:606::-;10689:6;10697;10705;10713;10721;10774:3;10762:9;10753:7;10749:23;10745:33;10742:53;;;10791:1;10788;10781:12;10742:53;10814:29;10833:9;10814:29;:::i;:::-;10804:39;;10862:38;10896:2;10885:9;10881:18;10862:38;:::i;:::-;10852:48;;10947:2;10936:9;10932:18;10919:32;10909:42;;10998:2;10987:9;10983:18;10970:32;10960:42;;11053:3;11042:9;11038:19;11025:33;11081:18;11073:6;11070:30;11067:50;;;11113:1;11110;11103:12;11067:50;11136:49;11177:7;11168:6;11157:9;11153:22;11136:49;:::i;11608:356::-;11810:2;11792:21;;;11829:18;;;11822:30;11888:34;11883:2;11868:18;;11861:62;11955:2;11940:18;;11608:356::o;11969:380::-;12048:1;12044:12;;;;12091;;;12112:61;;12166:4;12158:6;12154:17;12144:27;;12112:61;12219:2;12211:6;12208:14;12188:18;12185:38;12182:161;;12265:10;12260:3;12256:20;12253:1;12246:31;12300:4;12297:1;12290:15;12328:4;12325:1;12318:15;12182:161;;11969:380;;;:::o;12354:351::-;12556:2;12538:21;;;12595:2;12575:18;;;12568:30;12634:29;12629:2;12614:18;;12607:57;12696:2;12681:18;;12354:351::o;13892:127::-;13953:10;13948:3;13944:20;13941:1;13934:31;13984:4;13981:1;13974:15;14008:4;14005:1;13998:15;14024:127;14085:10;14080:3;14076:20;14073:1;14066:31;14116:4;14113:1;14106:15;14140:4;14137:1;14130:15;14156:135;14195:3;14216:17;;;14213:43;;14236:18;;:::i;:::-;-1:-1:-1;14283:1:1;14272:13;;14156:135::o;14422:545::-;14524:2;14519:3;14516:11;14513:448;;;14560:1;14585:5;14581:2;14574:17;14630:4;14626:2;14616:19;14700:2;14688:10;14684:19;14681:1;14677:27;14671:4;14667:38;14736:4;14724:10;14721:20;14718:47;;;-1:-1:-1;14759:4:1;14718:47;14814:2;14809:3;14805:12;14802:1;14798:20;14792:4;14788:31;14778:41;;14869:82;14887:2;14880:5;14877:13;14869:82;;;14932:17;;;14913:1;14902:13;14869:82;;15143:1352;15269:3;15263:10;15296:18;15288:6;15285:30;15282:56;;;15318:18;;:::i;:::-;15347:97;15437:6;15397:38;15429:4;15423:11;15397:38;:::i;:::-;15391:4;15347:97;:::i;:::-;15499:4;;15563:2;15552:14;;15580:1;15575:663;;;;16282:1;16299:6;16296:89;;;-1:-1:-1;16351:19:1;;;16345:26;16296:89;-1:-1:-1;;15100:1:1;15096:11;;;15092:24;15088:29;15078:40;15124:1;15120:11;;;15075:57;16398:81;;15545:944;;15575:663;14369:1;14362:14;;;14406:4;14393:18;;-1:-1:-1;;15611:20:1;;;15729:236;15743:7;15740:1;15737:14;15729:236;;;15832:19;;;15826:26;15811:42;;15924:27;;;;15892:1;15880:14;;;;15759:19;;15729:236;;;15733:3;15993:6;15984:7;15981:19;15978:201;;;16054:19;;;16048:26;-1:-1:-1;;16137:1:1;16133:14;;;16149:3;16129:24;16125:37;16121:42;16106:58;16091:74;;15978:201;-1:-1:-1;;;;;16225:1:1;16209:14;;;16205:22;16192:36;;-1:-1:-1;15143:1352:1:o;17317:397::-;17519:2;17501:21;;;17558:2;17538:18;;;17531:30;17597:34;17592:2;17577:18;;17570:62;-1:-1:-1;;;17663:2:1;17648:18;;17641:31;17704:3;17689:19;;17317:397::o;17719:125::-;17784:9;;;17805:10;;;17802:36;;;17818:18;;:::i;18102:404::-;18304:2;18286:21;;;18343:2;18323:18;;;18316:30;18382:34;18377:2;18362:18;;18355:62;-1:-1:-1;;;18448:2:1;18433:18;;18426:38;18496:3;18481:19;;18102:404::o;18511:401::-;18713:2;18695:21;;;18752:2;18732:18;;;18725:30;18791:34;18786:2;18771:18;;18764:62;-1:-1:-1;;;18857:2:1;18842:18;;18835:35;18902:3;18887:19;;18511:401::o;18917:406::-;19119:2;19101:21;;;19158:2;19138:18;;;19131:30;19197:34;19192:2;19177:18;;19170:62;-1:-1:-1;;;19263:2:1;19248:18;;19241:40;19313:3;19298:19;;18917:406::o;19328:465::-;19585:2;19574:9;19567:21;19548:4;19611:56;19663:2;19652:9;19648:18;19640:6;19611:56;:::i;:::-;19715:9;19707:6;19703:22;19698:2;19687:9;19683:18;19676:50;19743:44;19780:6;19772;19743:44;:::i;:::-;19735:52;19328:465;-1:-1:-1;;;;;19328:465:1:o;19798:399::-;20000:2;19982:21;;;20039:2;20019:18;;;20012:30;20078:34;20073:2;20058:18;;20051:62;-1:-1:-1;;;20144:2:1;20129:18;;20122:33;20187:3;20172:19;;19798:399::o;20202:400::-;20404:2;20386:21;;;20443:2;20423:18;;;20416:30;20482:34;20477:2;20462:18;;20455:62;-1:-1:-1;;;20548:2:1;20533:18;;20526:34;20592:3;20577:19;;20202:400::o;21426:561::-;-1:-1:-1;;;;;21723:15:1;;;21705:34;;21775:15;;21770:2;21755:18;;21748:43;21822:2;21807:18;;21800:34;;;21865:2;21850:18;;21843:34;;;21685:3;21908;21893:19;;21886:32;;;21648:4;;21935:46;;21961:19;;21953:6;21935:46;:::i;:::-;21927:54;21426:561;-1:-1:-1;;;;;;;21426:561:1:o;21992:249::-;22061:6;22114:2;22102:9;22093:7;22089:23;22085:32;22082:52;;;22130:1;22127;22120:12;22082:52;22162:9;22156:16;22181:30;22205:5;22181:30;:::i;22246:179::-;22281:3;22323:1;22305:16;22302:23;22299:120;;;22369:1;22366;22363;22348:23;-1:-1:-1;22406:1:1;22400:8;22395:3;22391:18;22299:120;22246:179;:::o;22430:671::-;22469:3;22511:4;22493:16;22490:26;22487:39;;;22430:671;:::o;22487:39::-;22553:2;22547:9;-1:-1:-1;;22618:16:1;22614:25;;22611:1;22547:9;22590:50;22669:4;22663:11;22693:16;22728:18;22799:2;22792:4;22784:6;22780:17;22777:25;22772:2;22764:6;22761:14;22758:45;22755:58;;;22806:5;;;;;22430:671;:::o;22755:58::-;22843:6;22837:4;22833:17;22822:28;;22879:3;22873:10;22906:2;22898:6;22895:14;22892:27;;;22912:5;;;;;;22430:671;:::o;22892:27::-;22996:2;22977:16;22971:4;22967:27;22963:36;22956:4;22947:6;22942:3;22938:16;22934:27;22931:69;22928:82;;;23003:5;;;;;;22430:671;:::o;22928:82::-;23019:57;23070:4;23061:6;23053;23049:19;23045:30;23039:4;23019:57;:::i;:::-;-1:-1:-1;23092:3:1;;22430:671;-1:-1:-1;;;;;22430:671:1:o;23527:404::-;23729:2;23711:21;;;23768:2;23748:18;;;23741:30;23807:34;23802:2;23787:18;;23780:62;-1:-1:-1;;;23873:2:1;23858:18;;23851:38;23921:3;23906:19;;23527:404::o;23936:827::-;-1:-1:-1;;;;;24333:15:1;;;24315:34;;24385:15;;24380:2;24365:18;;24358:43;24295:3;24432:2;24417:18;;24410:31;;;24258:4;;24464:57;;24501:19;;24493:6;24464:57;:::i;:::-;24569:9;24561:6;24557:22;24552:2;24541:9;24537:18;24530:50;24603:44;24640:6;24632;24603:44;:::i;:::-;24589:58;;24696:9;24688:6;24684:22;24678:3;24667:9;24663:19;24656:51;24724:33;24750:6;24742;24724:33;:::i;:::-;24716:41;23936:827;-1:-1:-1;;;;;;;;23936:827:1:o

Swarm Source

ipfs://7753afbf72c229af1cb952c3228cfdd359ee017cd6f8233219823c8ace2ffb1d
Loading