ERC-1155
Overview
Max Total Supply
686 GODDESS
Holders
62
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Goddess
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-03 */ // File: multi-token-standard/contracts/interfaces/IERC165.sol pragma solidity ^0.5.12; /** * @title ERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas * @param _interfaceId The interface identifier, as specified in ERC-165 */ function supportsInterface(bytes4 _interfaceId) external view returns (bool); } // File: multi-token-standard/contracts/utils/SafeMath.sol pragma solidity ^0.5.12; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath#mul: OVERFLOW"); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath#div: DIVISION_BY_ZERO"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath#sub: UNDERFLOW"); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath#add: OVERFLOW"); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO"); return a % b; } } // File: multi-token-standard/contracts/interfaces/IERC1155TokenReceiver.sol pragma solidity ^0.5.12; /** * @dev ERC-1155 interface for accepting safe transfers. */ interface IERC1155TokenReceiver { /** * @notice Handle the receipt of a single ERC1155 token type * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value MUST result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeTransferFrom` function * @param _from The address which previously owned the token * @param _id The id of the token being transferred * @param _amount The amount of tokens being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` */ function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4); /** * @notice Handle the receipt of multiple ERC1155 token types * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value WILL result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeBatchTransferFrom` function * @param _from The address which previously owned the token * @param _ids An array containing ids of each token being transferred * @param _amounts An array containing amounts of each token being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` */ function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4); /** * @notice Indicates whether a contract implements the `ERC1155TokenReceiver` functions and so can accept ERC1155 token types. * @param interfaceID The ERC-165 interface ID that is queried for support.s * @dev This function MUST return true if it implements the ERC1155TokenReceiver interface and ERC-165 interface. * This function MUST NOT consume more than 5,000 gas. * @return Wheter ERC-165 or ERC1155TokenReceiver interfaces are supported. */ function supportsInterface(bytes4 interfaceID) external view returns (bool); } // File: multi-token-standard/contracts/interfaces/IERC1155.sol pragma solidity ^0.5.12; interface IERC1155 { // Events /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); /** * @dev MUST emit when an approval is updated */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /** * @dev MUST emit when the URI is updated for a token ID * URIs are defined in RFC 3986 * The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema" */ event URI(string _amount, uint256 indexed _id); /** * @notice Transfers amount of an _id from the _from address to the _to address specified * @dev MUST emit TransferSingle event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev MUST emit TransferBatch event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if length of `_ids` is not the same as length of `_amounts` * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external; /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @dev MUST emit the ApprovalForAll event on success * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); } // File: multi-token-standard/contracts/utils/Address.sol /** * Copyright 2018 ZeroEx Intl. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ pragma solidity ^0.5.12; /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } } // File: multi-token-standard/contracts/tokens/ERC1155/ERC1155.sol pragma solidity ^0.5.12; /** * @dev Implementation of Multi-Token Standard contract */ contract ERC1155 is IERC165 { using SafeMath for uint256; using Address for address; /***********************************| | Variables and Events | |__________________________________*/ // onReceive function signatures bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61; bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81; // Objects balances mapping (address => mapping(uint256 => uint256)) internal balances; // Operator Functions mapping (address => mapping(address => bool)) internal operators; // Events event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); event URI(string _uri, uint256 indexed _id); /***********************************| | Public Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data) public { require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR"); require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT"); // require(_amount >= balances[_from][_id]) is not necessary since checked with safemath operations _safeTransferFrom(_from, _to, _id, _amount); _callonERC1155Received(_from, _to, _id, _amount, _data); } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) public { // Requirements require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR"); require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT"); _safeBatchTransferFrom(_from, _to, _ids, _amounts); _callonERC1155BatchReceived(_from, _to, _ids, _amounts, _data); } /***********************************| | Internal Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount */ function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount) internal { // Update balances balances[_from][_id] = balances[_from][_id].sub(_amount); // Subtract amount balances[_to][_id] = balances[_to][_id].add(_amount); // Add amount // Emit event emit TransferSingle(msg.sender, _from, _to, _id, _amount); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...) */ function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data) internal { // Check if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received(msg.sender, _from, _id, _amount, _data); require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE"); } } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type */ function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts) internal { require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH"); // Number of transfer to execute uint256 nTransfer = _ids.length; // Executing all transfers for (uint256 i = 0; i < nTransfer; i++) { // Update storage balance of previous bin balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]); balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]); } // Emit event emit TransferBatch(msg.sender, _from, _to, _ids, _amounts); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...) */ function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) internal { // Pass data if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived(msg.sender, _from, _ids, _amounts, _data); require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE"); } } /***********************************| | Operator Functions | |__________________________________*/ /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external { // Update operator status operators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) public view returns (bool isOperator) { return operators[_owner][_operator]; } /***********************************| | Balance Functions | |__________________________________*/ /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) public view returns (uint256) { return balances[_owner][_id]; } /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] memory _owners, uint256[] memory _ids) public view returns (uint256[] memory) { require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH"); // Variables uint256[] memory batchBalances = new uint256[](_owners.length); // Iterate over each owner and token ID for (uint256 i = 0; i < _owners.length; i++) { batchBalances[i] = balances[_owners[i]][_ids[i]]; } return batchBalances; } /***********************************| | ERC165 Functions | |__________________________________*/ /** * INTERFACE_SIGNATURE_ERC165 = bytes4(keccak256("supportsInterface(bytes4)")); */ bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7; /** * INTERFACE_SIGNATURE_ERC1155 = * bytes4(keccak256("safeTransferFrom(address,address,uint256,uint256,bytes)")) ^ * bytes4(keccak256("safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)")) ^ * bytes4(keccak256("balanceOf(address,uint256)")) ^ * bytes4(keccak256("balanceOfBatch(address[],uint256[])")) ^ * bytes4(keccak256("setApprovalForAll(address,bool)")) ^ * bytes4(keccak256("isApprovedForAll(address,address)")); */ bytes4 constant private INTERFACE_SIGNATURE_ERC1155 = 0xd9b67a26; /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` and */ function supportsInterface(bytes4 _interfaceID) external view returns (bool) { if (_interfaceID == INTERFACE_SIGNATURE_ERC165 || _interfaceID == INTERFACE_SIGNATURE_ERC1155) { return true; } return false; } } // File: multi-token-standard/contracts/tokens/ERC1155/ERC1155Metadata.sol pragma solidity ^0.5.11; /** * @notice Contract that handles metadata related methods. * @dev Methods assume a deterministic generation of URI based on token IDs. * Methods also assume that URI uses hex representation of token IDs. */ contract ERC1155Metadata { // URI's default URI prefix string internal baseMetadataURI; event URI(string _uri, uint256 indexed _id); /***********************************| | Metadata Public Function s | |__________________________________*/ /** * @notice A distinct Uniform Resource Identifier (URI) for a given token. * @dev URIs are defined in RFC 3986. * URIs are assumed to be deterministically generated based on token ID * Token IDs are assumed to be represented in their hex format in URIs * @return URI string */ function uri(uint256 _id) public view returns (string memory) { return string(abi.encodePacked(baseMetadataURI, _uint2str(_id), ".json")); } /***********************************| | Metadata Internal Functions | |__________________________________*/ /** * @notice Will emit default URI log event for corresponding token _id * @param _tokenIDs Array of IDs of tokens to log default URI */ function _logURIs(uint256[] memory _tokenIDs) internal { string memory baseURL = baseMetadataURI; string memory tokenURI; for (uint256 i = 0; i < _tokenIDs.length; i++) { tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json")); emit URI(tokenURI, _tokenIDs[i]); } } /** * @notice Will emit a specific URI log event for corresponding token * @param _tokenIDs IDs of the token corresponding to the _uris logged * @param _URIs The URIs of the specified _tokenIDs */ function _logURIs(uint256[] memory _tokenIDs, string[] memory _URIs) internal { require(_tokenIDs.length == _URIs.length, "ERC1155Metadata#_logURIs: INVALID_ARRAYS_LENGTH"); for (uint256 i = 0; i < _tokenIDs.length; i++) { emit URI(_URIs[i], _tokenIDs[i]); } } /** * @notice Will update the base URL of token's URI * @param _newBaseMetadataURI New base URL of token's URI */ function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal { baseMetadataURI = _newBaseMetadataURI; } /***********************************| | Utility Internal Functions | |__________________________________*/ /** * @notice Convert uint256 to string * @param _i Unsigned integer to convert to string */ function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 ii = _i; uint256 len; // Get number of bytes while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len - 1; // Get each individual ASCII while (ii != 0) { bstr[k--] = byte(uint8(48 + ii % 10)); ii /= 10; } // Convert to string return string(bstr); } } // File: multi-token-standard/contracts/tokens/ERC1155/ERC1155MintBurn.sol pragma solidity ^0.5.12; /** * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume * a parent contract to be executed as they are `internal` functions */ contract ERC1155MintBurn is ERC1155 { /****************************************| | Minting Functions | |_______________________________________*/ /** * @notice Mint _amount of tokens of a given id * @param _to The address to mint tokens to * @param _id Token id to mint * @param _amount The amount to be minted * @param _data Data to pass if receiver is contract */ function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data) internal { // Add _amount balances[_to][_id] = balances[_to][_id].add(_amount); // Emit event emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount); // Calling onReceive method if recipient is contract _callonERC1155Received(address(0x0), _to, _id, _amount, _data); } /** * @notice Mint tokens for each ids in _ids * @param _to The address to mint tokens to * @param _ids Array of ids to mint * @param _amounts Array of amount of tokens to mint per id * @param _data Data to pass if receiver is contract */ function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) internal { require(_ids.length == _amounts.length, "ERC1155MintBurn#batchMint: INVALID_ARRAYS_LENGTH"); // Number of mints to execute uint256 nMint = _ids.length; // Executing all minting for (uint256 i = 0; i < nMint; i++) { // Update storage balance balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]); } // Emit batch mint event emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts); // Calling onReceive method if recipient is contract _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, _data); } /****************************************| | Burning Functions | |_______________________________________*/ /** * @notice Burn _amount of tokens of a given token id * @param _from The address to burn tokens from * @param _id Token id to burn * @param _amount The amount to be burned */ function _burn(address _from, uint256 _id, uint256 _amount) internal { //Substract _amount balances[_from][_id] = balances[_from][_id].sub(_amount); // Emit event emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount); } /** * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair * @param _from The address to burn tokens from * @param _ids Array of token ids to burn * @param _amounts Array of the amount to be burned */ function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts) internal { require(_ids.length == _amounts.length, "ERC1155MintBurn#batchBurn: INVALID_ARRAYS_LENGTH"); // Number of mints to execute uint256 nBurn = _ids.length; // Executing all minting for (uint256 i = 0; i < nBurn; i++) { // Update storage balance balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]); } // Emit batch mint event emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts); } } // File: contracts/utils/Strings.sol //SPDX-License-Identifier: MIT pragma solidity ^0.5.12; library Strings { // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat( string memory _a, string memory _b, string memory _c, string memory _d, string memory _e ) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string( _ba.length + _bb.length + _bc.length + _bd.length + _be.length ); bytes memory babcde = bytes(abcde); uint256 k = 0; for (uint256 i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (uint256 i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (uint256 i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (uint256 i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (uint256 i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat( string memory _a, string memory _b, string memory _c, string memory _d ) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat( string memory _a, string memory _b, string memory _c ) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len - 1; while (_i != 0) { bstr[k--] = bytes1(uint8(48 + (_i % 10))); _i /= 10; } return string(bstr); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/utils/PermissionGroups.sol //SPDX-License-Identifier: MIT pragma solidity ^0.5.12; contract PermissionGroups { address public admin; address public pendingAdmin; mapping(address => bool) internal operators; address[] internal operatorsGroup; uint256 internal constant MAX_GROUP_SIZE = 50; constructor(address _admin) public { require(_admin != address(0), "Admin 0"); admin = _admin; } modifier onlyAdmin() { require(msg.sender == admin, "Only admin"); _; } modifier onlyOperator() { require(operators[msg.sender], "Only operator"); _; } function getOperators() external view returns (address[] memory) { return operatorsGroup; } event TransferAdminPending(address pendingAdmin); /** * @dev Allows the current admin to set the pendingAdmin address. * @param newAdmin The address to transfer ownership to. */ function transferAdmin(address newAdmin) public onlyAdmin { require(newAdmin != address(0), "New admin 0"); emit TransferAdminPending(newAdmin); pendingAdmin = newAdmin; } /** * @dev Allows the current admin to set the admin in one tx. Useful initial deployment. * @param newAdmin The address to transfer ownership to. */ function transferAdminQuickly(address newAdmin) public onlyAdmin { require(newAdmin != address(0), "Admin 0"); emit TransferAdminPending(newAdmin); emit AdminClaimed(newAdmin, admin); admin = newAdmin; } event AdminClaimed(address newAdmin, address previousAdmin); /** * @dev Allows the pendingAdmin address to finalize the change admin process. */ function claimAdmin() public { require(pendingAdmin == msg.sender, "not pending"); emit AdminClaimed(pendingAdmin, admin); admin = pendingAdmin; pendingAdmin = address(0); } event OperatorAdded(address newOperator, bool isAdd); function addOperator(address newOperator) public onlyAdmin { require(!operators[newOperator], "Operator exists"); // prevent duplicates. require(operatorsGroup.length < MAX_GROUP_SIZE, "Max operators"); emit OperatorAdded(newOperator, true); operators[newOperator] = true; operatorsGroup.push(newOperator); } function removeOperator(address operator) public onlyAdmin { require(operators[operator], "Not operator"); operators[operator] = false; for (uint256 i = 0; i < operatorsGroup.length; ++i) { if (operatorsGroup[i] == operator) { operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1]; operatorsGroup.pop(); emit OperatorAdded(operator, false); break; } } } } // File: contracts/utils/Withdrawable.sol //SPDX-License-Identifier: MIT pragma solidity ^0.5.12; contract Withdrawable is PermissionGroups { bytes4 private constant SELECTOR = bytes4(keccak256(bytes("transfer(address,uint256)"))); mapping(address => bool) internal blacklist; event TokenWithdraw(address token, uint256 amount, address sendTo); event EtherWithdraw(uint256 amount, address sendTo); constructor(address _admin) public PermissionGroups(_admin) {} /** * @dev Withdraw all IERC20 compatible tokens * @param token IERC20 The address of the token contract */ function withdrawToken( address token, uint256 amount, address sendTo ) external onlyAdmin { require(!blacklist[address(token)], "forbid to withdraw that token"); _safeTransfer(token, sendTo, amount); emit TokenWithdraw(token, amount, sendTo); } /** * @dev Withdraw Ethers */ function withdrawEther(uint256 amount, address payable sendTo) external onlyAdmin { (bool success, ) = sendTo.call.value(amount)(""); require(success); emit EtherWithdraw(amount, sendTo); } function setBlackList(address token) internal { blacklist[token] = true; } function _safeTransfer( address token, address to, uint256 value ) private { (bool success, bytes memory data) = token.call( abi.encodeWithSelector(SELECTOR, to, value) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED"); } } // File: contracts/Goddess.sol //SPDX-License-Identifier: MIT pragma solidity ^0.5.12; contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract Goddess is ERC1155, ERC1155MintBurn, ERC1155Metadata, Withdrawable { using Strings for string; address proxyRegistryAddress; uint256 private _currentTokenID = 0; mapping(uint256 => uint256) private tokenSupply; mapping(uint256 => uint256) private tokenMaxSupply; mapping(uint256 => uint256) public nextLevel; // Contract name string public name; // Contract symbol string public symbol; modifier ownersOnly(uint256 _id) { require(balances[msg.sender][_id] > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED"); _; } constructor( string memory _name, string memory _symbol, address _proxyRegistryAddress ) public Withdrawable(msg.sender) { name = _name; symbol = _symbol; proxyRegistryAddress = _proxyRegistryAddress; } function uri(uint256 _id) public view returns (string memory) { require(_exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN"); return Strings.strConcat(baseMetadataURI, Strings.uint2str(_id)); } function totalSupply(uint256 _id) public view returns (uint256) { return tokenSupply[_id]; } function setBaseMetadataURI(string memory _newBaseMetadataURI) public onlyAdmin { _setBaseMetadataURI(_newBaseMetadataURI); } function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyAdmin { proxyRegistryAddress = _proxyRegistryAddress; } function create(uint256 _maxSupply) external onlyOperator returns (uint256) { uint256 _id = _getNextTokenID(); _incrementTokenTypeId(); tokenMaxSupply[_id] = _maxSupply; return _id; } function mint( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) public onlyOperator { require(tokenSupply[_id] < tokenMaxSupply[_id], "Max supply reached"); _mint(_to, _id, _quantity, _data); tokenSupply[_id] = tokenSupply[_id].add(_quantity); } function batchMint( address _to, uint256[] memory _ids, uint256[] memory _quantities, bytes memory _data ) public onlyOperator { for (uint256 i = 0; i < _ids.length; i++) { uint256 _id = _ids[i]; uint256 quantity = _quantities[i]; tokenSupply[_id] = tokenSupply[_id].add(quantity); } _batchMint(_to, _ids, _quantities, _data); } function burn( address _from, uint256 _id, uint256 _amount ) public onlyOperator { _burn(_from, _id, _amount); tokenMaxSupply[_id] = tokenMaxSupply[_id].sub(_amount); tokenSupply[_id] = tokenSupply[_id].sub(_amount); } function isApprovedForAll(address _owner, address _operator) public view returns (bool isOperator) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(_owner)) == _operator) { return true; } return ERC1155.isApprovedForAll(_owner, _operator); } function _exists(uint256 _id) internal view returns (bool) { return _id <= _currentTokenID; } function _getNextTokenID() private view returns (uint256) { return _currentTokenID.add(1); } /** * @dev increments the value of _currentTokenID */ function _incrementTokenTypeId() private { _currentTokenID++; } function maxSupply(uint256 _id) public view returns (uint256) { return tokenMaxSupply[_id]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"},{"indexed":false,"internalType":"bool","name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","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":"_amounts","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":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nextLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006009553480156200001657600080fd5b506040516200397038038062003970833981810160405260608110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b9083019060208201858111156200007357600080fd5b82516401000000008111828201881017156200008e57600080fd5b82525081516020918201929091019080838360005b83811015620000bd578181015183820152602001620000a3565b50505050905090810190601f168015620000eb5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010f57600080fd5b9083019060208201858111156200012557600080fd5b82516401000000008111828201881017156200014057600080fd5b82525081516020918201929091019080838360005b838110156200016f57818101518382015260200162000155565b50505050905090810190601f1680156200019d5780820380516001836020036101000a031916815260200191505b506040526020015191503390508080620001e8576040805162461bcd60e51b8152602060048201526007602482015266041646d696e20360cc1b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b03929092169190911790555082516200021e90600d9060208601906200025e565b5081516200023490600e9060208501906200025e565b50600880546001600160a01b0319166001600160a01b039290921691909117905550620003039050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002a157805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d1578251825591602001919060010190620002b4565b50620002df929150620002e3565b5090565b6200030091905b80821115620002df5760008155600101620002ea565b90565b61365d80620003136000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637acc867811610104578063b48ab8b6116100a2578063e985e9c511610071578063e985e9c514610b62578063f242432a14610b90578063f5298aca14610c5b578063f851a44014610c8d576101ce565b8063b48ab8b614610935578063bd85b03914610af3578063ce56c45414610b10578063d26ea6c014610b3c576101ce565b806395d89b41116100de57806395d89b41146108b35780639870d7fe146108bb578063a22cb465146108e1578063ac8a584a1461090f576101ce565b80637acc8678146107ca5780637e518ec8146107f0578063869f759414610896576101ce565b80633ccdbb2811610171578063731133e91161014b578063731133e9146106bd57806375829def1461077f57806377f50f97146107a5578063780900dc146107ad576101ce565b80633ccdbb281461054357806341fffe66146105795780634e1273f414610596576101ce565b80630e89341c116101ad5780630e89341c146102e157806326782247146102fe57806327a099d8146103225780632eb2c2d61461037a576101ce565b8062fdd58e146101d357806301ffc9a71461021157806306fdde0314610264575b600080fd5b6101ff600480360360408110156101e957600080fd5b506001600160a01b038135169060200135610c95565b60408051918252519081900360200190f35b6102506004803603602081101561022757600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610cbe565b604080519115158252519081900360200190f35b61026c610d67565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a657818101518382015260200161028e565b50505050905090810190601f1680156102d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026c600480360360208110156102f757600080fd5b5035610df5565b610306610ed8565b604080516001600160a01b039092168252519081900360200190f35b61032a610ee7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561036657818101518382015260200161034e565b505050509050019250505060405180910390f35b610541600480360360a081101561039057600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460208302840111640100000000831117156103f857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561044857600080fd5b82018360208201111561045a57600080fd5b8035906020019184602083028401116401000000008311171561047c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104cc57600080fd5b8201836020820111156104de57600080fd5b8035906020019184600183028401116401000000008311171561050057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f4a945050505050565b005b6105416004803603606081101561055957600080fd5b506001600160a01b03813581169160208101359160409091013516611006565b6101ff6004803603602081101561058f57600080fd5b503561112d565b61032a600480360360408110156105ac57600080fd5b8101906020810181356401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460208302840111640100000000831117156105fb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561064b57600080fd5b82018360208201111561065d57600080fd5b8035906020019184602083028401116401000000008311171561067f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061113f945050505050565b610541600480360360808110156106d357600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184600183028401116401000000008311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611240945050505050565b6105416004803603602081101561079557600080fd5b50356001600160a01b0316611354565b610541611484565b6101ff600480360360208110156107c357600080fd5b503561156e565b610541600480360360208110156107e057600080fd5b50356001600160a01b03166115fc565b6105416004803603602081101561080657600080fd5b81019060208101813564010000000081111561082157600080fd5b82018360208201111561083357600080fd5b8035906020019184600183028401116401000000008311171561085557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611774945050505050565b6101ff600480360360208110156108ac57600080fd5b50356117df565b61026c6117f1565b610541600480360360208110156108d157600080fd5b50356001600160a01b031661184c565b610541600480360360408110156108f757600080fd5b506001600160a01b0381351690602001351515611a50565b6105416004803603602081101561092557600080fd5b50356001600160a01b0316611adc565b6105416004803603608081101561094b57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561097657600080fd5b82018360208201111561098857600080fd5b803590602001918460208302840111640100000000831117156109aa57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109fa57600080fd5b820183602082011115610a0c57600080fd5b80359060200191846020830284011164010000000083111715610a2e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610a7e57600080fd5b820183602082011115610a9057600080fd5b80359060200191846001830284011164010000000083111715610ab257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d27945050505050565b6101ff60048036036020811015610b0957600080fd5b5035611e1c565b61054160048036036040811015610b2657600080fd5b50803590602001356001600160a01b0316611e2e565b61054160048036036020811015610b5257600080fd5b50356001600160a01b0316611f33565b61025060048036036040811015610b7857600080fd5b506001600160a01b0381358116916020013516611fcc565b610541600480360360a0811015610ba657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610be657600080fd5b820183602082011115610bf857600080fd5b80359060200191846001830284011164010000000083111715610c1a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612090945050505050565b61054160048036036060811015610c7157600080fd5b506001600160a01b038135169060208101359060400135612145565b610306612215565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610d5157507fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000145b15610d5e57506001610d62565b5060005b919050565b600d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b505050505081565b6060610e0082612224565b610e3b5760405162461bcd60e51b81526004018080602001828103825260258152602001806135006025913960400191505060405180910390fd5b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152610cb89390929091830182828015610ec55780601f10610e9a57610100808354040283529160200191610ec5565b820191906000526020600020905b815481529060010190602001808311610ea857829003601f168201915b5050505050610ed38461222c565b612321565b6004546001600160a01b031681565b60606006805480602002602001604051908101604052809291908181526020018280548015610f3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f21575b505050505090505b90565b336001600160a01b0386161480610f665750610f668533611fcc565b610fa15760405162461bcd60e51b815260040180806020018281038252602f815260200180613551602f913960400191505060405180910390fd5b6001600160a01b038416610fe65760405162461bcd60e51b81526004018080602001828103825260308152602001806134d06030913960400191505060405180910390fd5b610ff285858585612364565b610fff858585858561260f565b5050505050565b6003546001600160a01b03163314611065576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff16156110d3576040805162461bcd60e51b815260206004820152601d60248201527f666f7262696420746f207769746864726177207468617420746f6b656e000000604482015290519081900360640190fd5b6110de838284612846565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600c6020526000908152604090205481565b606081518351146111815760405162461bcd60e51b815260040180806020018281038252602c815260200180613525602c913960400191505060405180910390fd5b606083516040519080825280602002602001820160405280156111ae578160200160208202803883390190505b50905060005b8451811015611238576000808683815181106111cc57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061120257fe5b602002602001015181526020019081526020016000205482828151811061122557fe5b60209081029190910101526001016111b4565b509392505050565b3360009081526005602052604090205460ff166112a4576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b6020908152604080832054600a9092529091205410611311576040805162461bcd60e51b815260206004820152601260248201527f4d617820737570706c7920726561636865640000000000000000000000000000604482015290519081900360640190fd5b61131d84848484612a25565b6000838152600a602052604090205461133c908363ffffffff612ac516565b6000938452600a602052604090932092909255505050565b6003546001600160a01b031633146113b3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661140e576040805162461bcd60e51b815260206004820152600b60248201527f4e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004546001600160a01b031633146114e3576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454600354604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160048054600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b3360009081526005602052604081205460ff166115d2576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60006115dc612b1f565b90506115e6612b3b565b6000818152600b60205260409020929092555090565b6003546001600160a01b0316331461165b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166116b6576040805162461bcd60e51b815260206004820152600760248201527f41646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600354604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6003546001600160a01b031633146117d3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6117dc81612b46565b50565b6000908152600b602052604090205490565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b6003546001600160a01b031633146118ab576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff1615611919576040805162461bcd60e51b815260206004820152600f60248201527f4f70657261746f72206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b600654603211611970576040805162461bcd60e51b815260206004820152600d60248201527f4d6178206f70657261746f727300000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b0316600081815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b3360008181526001602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6003546001600160a01b03163314611b3b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff16611ba8576040805162461bcd60e51b815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600654811015611d2357816001600160a01b031660068281548110611c0857fe5b6000918252602090912001546001600160a01b03161415611d1b57600680546000198101908110611c3557fe5b600091825260209091200154600680546001600160a01b039092169183908110611c5b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611c9457fe5b60008281526020808220830160001990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909201909255604080516001600160a01b03861681529182019290925281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a1611d23565b600101611be7565b5050565b3360009081526005602052604090205460ff16611d8b576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60005b8351811015611e09576000848281518110611da557fe5b602002602001015190506000848381518110611dbd57fe5b60200260200101519050611ded81600a600085815260200190815260200160002054612ac590919063ffffffff16565b6000928352600a60205260409092209190915550600101611d8e565b50611e1684848484612b59565b50505050565b6000908152600a602052604090205490565b6003546001600160a01b03163314611e8d576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611ed8576040519150601f19603f3d011682016040523d82523d6000602084013e611edd565b606091505b5050905080611eeb57600080fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6003546001600160a01b03163314611f92576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600854604080517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d602081101561206357600080fd5b50516001600160a01b0316141561207e576001915050610cb8565b6120888484612d2d565b949350505050565b336001600160a01b03861614806120ac57506120ac8533611fcc565b6120e75760405162461bcd60e51b815260040180806020018281038252602a815260200180613471602a913960400191505060405180910390fd5b6001600160a01b03841661212c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613446602b913960400191505060405180910390fd5b61213885858585612d5b565b610fff8585858585612e43565b3360009081526005602052604090205460ff166121a9576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6121b4838383612ff6565b6000828152600b60205260409020546121d3908263ffffffff61308d16565b6000838152600b6020908152604080832093909355600a905220546121fe908263ffffffff61308d16565b6000928352600a6020526040909220919091555050565b6003546001600160a01b031681565b600954101590565b60608161226d575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d62565b8160005b811561228557600101600a82049150612271565b6060816040519080825280601f01601f1916602001820160405280156122b2576020820181803883390190505b50905060001982015b851561231857600a860660300160f81b828280600190039350815181106122de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a860495506122bb565b50949350505050565b606061235d83836040518060200160405280600081525060405180602001604052806000815250604051806020016040528060008152506130ea565b9392505050565b80518251146123a45760405162461bcd60e51b815260040180806020018281038252603581526020018061349b6035913960400191505060405180910390fd5b815160005b8181101561252e5761241f8382815181106123c057fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106123fa57fe5b602002602001015181526020019081526020016000205461308d90919063ffffffff16565b600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061245157fe5b60200260200101518152602001908152602001600020819055506124d983828151811061247a57fe5b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106124b457fe5b6020026020010151815260200190815260200160002054612ac590919063ffffffff16565b600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061250b57fe5b6020908102919091018101518252810191909152604001600020556001016123a9565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156125b457818101518382015260200161259c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156125f35781810151838201526020016125db565b5050505090500194505050505060405180910390a45050505050565b612621846001600160a01b0316613376565b15610fff576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156126c35781810151838201526020016126ab565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156127025781810151838201526020016126ea565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561273e578181015183820152602001612726565b50505050905090810190601f16801561276b5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561279057600080fd5b505af11580156127a4573d6000803e3d6000fd5b505050506040513d60208110156127ba57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603f8152602001806135b0603f913960400191505060405180910390fd5b505050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061293f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612902565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129a1576040519150601f19603f3d011682016040523d82523d6000602084013e6129a6565b606091505b50915091508180156129d45750805115806129d457508080602001905160208110156129d157600080fd5b50515b610fff576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038416600090815260208181526040808320868452909152902054612a57908363ffffffff612ac516565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4611e16600085858585612e43565b60008282018381101561235d576040805162461bcd60e51b815260206004820152601660248201527f536166654d617468236164643a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b600954600090612b3690600163ffffffff612ac516565b905090565b600980546001019055565b8051611d239060029060208401906133ad565b8151835114612b995760405162461bcd60e51b81526004018080602001828103825260308152602001806135806030913960400191505060405180910390fd5b825160005b81811015612c4457612bef848281518110612bb557fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008885815181106124b457fe5b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612c2157fe5b602090810291909101810151825281019190915260400160002055600101612b9e565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ccb578181015183820152602001612cb3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612d0a578181015183820152602001612cf2565b5050505090500194505050505060405180910390a4610fff60008686868661260f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6001600160a01b038416600090815260208181526040808320858452909152902054612d8d908263ffffffff61308d16565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054612dd6908263ffffffff612ac516565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b612e55846001600160a01b0316613376565b15610fff576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ef8578181015183820152602001612ee0565b50505050905090810190601f168015612f255780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612f4857600080fd5b505af1158015612f5c573d6000803e3d6000fd5b505050506040513d6020811015612f7257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603a8152602001806135ef603a913960400191505060405180910390fd5b6001600160a01b038316600090815260208181526040808320858452909152902054613028908263ffffffff61308d16565b6001600160a01b03841660008181526020818152604080832087845282528083209490945583518681529081018590528351919333927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a4505050565b6000828211156130e4576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f19166020018201604052801561313e576020820181803883390190505b509050806000805b88518110156131af5788818151811061315b57fe5b602001015160f81c60f81b83838060010194508151811061317857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613146565b5060005b875181101561321c578781815181106131c857fe5b602001015160f81c60f81b8383806001019450815181106131e557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016131b3565b5060005b86518110156132895786818151811061323557fe5b602001015160f81c60f81b83838060010194508151811061325257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613220565b5060005b85518110156132f6578581815181106132a257fe5b602001015160f81c60f81b8383806001019450815181106132bf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161328d565b5060005b84518110156133635784818151811061330f57fe5b602001015160f81c60f81b83838060010194508151811061332c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016132fa565b50909d9c50505050505050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906120885750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133ee57805160ff191683800117855561341b565b8280016001018555821561341b579182015b8281111561341b578251825591602001919060010190613400565b5061342792915061342b565b5090565b610f4791905b80821115613427576000815560010161343156fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745a265627a7a72315820bb18defe7ca16e9ef43c094f64d4fb2bc9c7785e892acac6379ee2022e65c07264736f6c63430005110032000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008db6a3fe0f238ed9f9e440fbed33d6c25e06d8a50000000000000000000000000000000000000000000000000000000000000007476f6464657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007474f444445535300000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637acc867811610104578063b48ab8b6116100a2578063e985e9c511610071578063e985e9c514610b62578063f242432a14610b90578063f5298aca14610c5b578063f851a44014610c8d576101ce565b8063b48ab8b614610935578063bd85b03914610af3578063ce56c45414610b10578063d26ea6c014610b3c576101ce565b806395d89b41116100de57806395d89b41146108b35780639870d7fe146108bb578063a22cb465146108e1578063ac8a584a1461090f576101ce565b80637acc8678146107ca5780637e518ec8146107f0578063869f759414610896576101ce565b80633ccdbb2811610171578063731133e91161014b578063731133e9146106bd57806375829def1461077f57806377f50f97146107a5578063780900dc146107ad576101ce565b80633ccdbb281461054357806341fffe66146105795780634e1273f414610596576101ce565b80630e89341c116101ad5780630e89341c146102e157806326782247146102fe57806327a099d8146103225780632eb2c2d61461037a576101ce565b8062fdd58e146101d357806301ffc9a71461021157806306fdde0314610264575b600080fd5b6101ff600480360360408110156101e957600080fd5b506001600160a01b038135169060200135610c95565b60408051918252519081900360200190f35b6102506004803603602081101561022757600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610cbe565b604080519115158252519081900360200190f35b61026c610d67565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a657818101518382015260200161028e565b50505050905090810190601f1680156102d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026c600480360360208110156102f757600080fd5b5035610df5565b610306610ed8565b604080516001600160a01b039092168252519081900360200190f35b61032a610ee7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561036657818101518382015260200161034e565b505050509050019250505060405180910390f35b610541600480360360a081101561039057600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460208302840111640100000000831117156103f857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561044857600080fd5b82018360208201111561045a57600080fd5b8035906020019184602083028401116401000000008311171561047c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104cc57600080fd5b8201836020820111156104de57600080fd5b8035906020019184600183028401116401000000008311171561050057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f4a945050505050565b005b6105416004803603606081101561055957600080fd5b506001600160a01b03813581169160208101359160409091013516611006565b6101ff6004803603602081101561058f57600080fd5b503561112d565b61032a600480360360408110156105ac57600080fd5b8101906020810181356401000000008111156105c757600080fd5b8201836020820111156105d957600080fd5b803590602001918460208302840111640100000000831117156105fb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561064b57600080fd5b82018360208201111561065d57600080fd5b8035906020019184602083028401116401000000008311171561067f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061113f945050505050565b610541600480360360808110156106d357600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184600183028401116401000000008311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611240945050505050565b6105416004803603602081101561079557600080fd5b50356001600160a01b0316611354565b610541611484565b6101ff600480360360208110156107c357600080fd5b503561156e565b610541600480360360208110156107e057600080fd5b50356001600160a01b03166115fc565b6105416004803603602081101561080657600080fd5b81019060208101813564010000000081111561082157600080fd5b82018360208201111561083357600080fd5b8035906020019184600183028401116401000000008311171561085557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611774945050505050565b6101ff600480360360208110156108ac57600080fd5b50356117df565b61026c6117f1565b610541600480360360208110156108d157600080fd5b50356001600160a01b031661184c565b610541600480360360408110156108f757600080fd5b506001600160a01b0381351690602001351515611a50565b6105416004803603602081101561092557600080fd5b50356001600160a01b0316611adc565b6105416004803603608081101561094b57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561097657600080fd5b82018360208201111561098857600080fd5b803590602001918460208302840111640100000000831117156109aa57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109fa57600080fd5b820183602082011115610a0c57600080fd5b80359060200191846020830284011164010000000083111715610a2e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610a7e57600080fd5b820183602082011115610a9057600080fd5b80359060200191846001830284011164010000000083111715610ab257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d27945050505050565b6101ff60048036036020811015610b0957600080fd5b5035611e1c565b61054160048036036040811015610b2657600080fd5b50803590602001356001600160a01b0316611e2e565b61054160048036036020811015610b5257600080fd5b50356001600160a01b0316611f33565b61025060048036036040811015610b7857600080fd5b506001600160a01b0381358116916020013516611fcc565b610541600480360360a0811015610ba657600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135640100000000811115610be657600080fd5b820183602082011115610bf857600080fd5b80359060200191846001830284011164010000000083111715610c1a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612090945050505050565b61054160048036036060811015610c7157600080fd5b506001600160a01b038135169060208101359060400135612145565b610306612215565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610d5157507fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000145b15610d5e57506001610d62565b5060005b919050565b600d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b505050505081565b6060610e0082612224565b610e3b5760405162461bcd60e51b81526004018080602001828103825260258152602001806135006025913960400191505060405180910390fd5b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152610cb89390929091830182828015610ec55780601f10610e9a57610100808354040283529160200191610ec5565b820191906000526020600020905b815481529060010190602001808311610ea857829003601f168201915b5050505050610ed38461222c565b612321565b6004546001600160a01b031681565b60606006805480602002602001604051908101604052809291908181526020018280548015610f3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f21575b505050505090505b90565b336001600160a01b0386161480610f665750610f668533611fcc565b610fa15760405162461bcd60e51b815260040180806020018281038252602f815260200180613551602f913960400191505060405180910390fd5b6001600160a01b038416610fe65760405162461bcd60e51b81526004018080602001828103825260308152602001806134d06030913960400191505060405180910390fd5b610ff285858585612364565b610fff858585858561260f565b5050505050565b6003546001600160a01b03163314611065576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff16156110d3576040805162461bcd60e51b815260206004820152601d60248201527f666f7262696420746f207769746864726177207468617420746f6b656e000000604482015290519081900360640190fd5b6110de838284612846565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600c6020526000908152604090205481565b606081518351146111815760405162461bcd60e51b815260040180806020018281038252602c815260200180613525602c913960400191505060405180910390fd5b606083516040519080825280602002602001820160405280156111ae578160200160208202803883390190505b50905060005b8451811015611238576000808683815181106111cc57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061120257fe5b602002602001015181526020019081526020016000205482828151811061122557fe5b60209081029190910101526001016111b4565b509392505050565b3360009081526005602052604090205460ff166112a4576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600b6020908152604080832054600a9092529091205410611311576040805162461bcd60e51b815260206004820152601260248201527f4d617820737570706c7920726561636865640000000000000000000000000000604482015290519081900360640190fd5b61131d84848484612a25565b6000838152600a602052604090205461133c908363ffffffff612ac516565b6000938452600a602052604090932092909255505050565b6003546001600160a01b031633146113b3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661140e576040805162461bcd60e51b815260206004820152600b60248201527f4e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004546001600160a01b031633146114e3576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454600354604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160048054600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b3360009081526005602052604081205460ff166115d2576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60006115dc612b1f565b90506115e6612b3b565b6000818152600b60205260409020929092555090565b6003546001600160a01b0316331461165b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166116b6576040805162461bcd60e51b815260206004820152600760248201527f41646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600354604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6003546001600160a01b031633146117d3576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6117dc81612b46565b50565b6000908152600b602052604090205490565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ded5780601f10610dc257610100808354040283529160200191610ded565b6003546001600160a01b031633146118ab576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff1615611919576040805162461bcd60e51b815260206004820152600f60248201527f4f70657261746f72206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b600654603211611970576040805162461bcd60e51b815260206004820152600d60248201527f4d6178206f70657261746f727300000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b0316600081815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b3360008181526001602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6003546001600160a01b03163314611b3b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff16611ba8576040805162461bcd60e51b815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600654811015611d2357816001600160a01b031660068281548110611c0857fe5b6000918252602090912001546001600160a01b03161415611d1b57600680546000198101908110611c3557fe5b600091825260209091200154600680546001600160a01b039092169183908110611c5b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611c9457fe5b60008281526020808220830160001990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909201909255604080516001600160a01b03861681529182019290925281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a1611d23565b600101611be7565b5050565b3360009081526005602052604090205460ff16611d8b576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b60005b8351811015611e09576000848281518110611da557fe5b602002602001015190506000848381518110611dbd57fe5b60200260200101519050611ded81600a600085815260200190815260200160002054612ac590919063ffffffff16565b6000928352600a60205260409092209190915550600101611d8e565b50611e1684848484612b59565b50505050565b6000908152600a602052604090205490565b6003546001600160a01b03163314611e8d576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611ed8576040519150601f19603f3d011682016040523d82523d6000602084013e611edd565b606091505b5050905080611eeb57600080fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6003546001600160a01b03163314611f92576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600854604080517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d602081101561206357600080fd5b50516001600160a01b0316141561207e576001915050610cb8565b6120888484612d2d565b949350505050565b336001600160a01b03861614806120ac57506120ac8533611fcc565b6120e75760405162461bcd60e51b815260040180806020018281038252602a815260200180613471602a913960400191505060405180910390fd5b6001600160a01b03841661212c5760405162461bcd60e51b815260040180806020018281038252602b815260200180613446602b913960400191505060405180910390fd5b61213885858585612d5b565b610fff8585858585612e43565b3360009081526005602052604090205460ff166121a9576040805162461bcd60e51b815260206004820152600d60248201527f4f6e6c79206f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6121b4838383612ff6565b6000828152600b60205260409020546121d3908263ffffffff61308d16565b6000838152600b6020908152604080832093909355600a905220546121fe908263ffffffff61308d16565b6000928352600a6020526040909220919091555050565b6003546001600160a01b031681565b600954101590565b60608161226d575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d62565b8160005b811561228557600101600a82049150612271565b6060816040519080825280601f01601f1916602001820160405280156122b2576020820181803883390190505b50905060001982015b851561231857600a860660300160f81b828280600190039350815181106122de57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a860495506122bb565b50949350505050565b606061235d83836040518060200160405280600081525060405180602001604052806000815250604051806020016040528060008152506130ea565b9392505050565b80518251146123a45760405162461bcd60e51b815260040180806020018281038252603581526020018061349b6035913960400191505060405180910390fd5b815160005b8181101561252e5761241f8382815181106123c057fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106123fa57fe5b602002602001015181526020019081526020016000205461308d90919063ffffffff16565b600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061245157fe5b60200260200101518152602001908152602001600020819055506124d983828151811061247a57fe5b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106124b457fe5b6020026020010151815260200190815260200160002054612ac590919063ffffffff16565b600080876001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061250b57fe5b6020908102919091018101518252810191909152604001600020556001016123a9565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156125b457818101518382015260200161259c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156125f35781810151838201526020016125db565b5050505090500194505050505060405180910390a45050505050565b612621846001600160a01b0316613376565b15610fff576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156126c35781810151838201526020016126ab565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156127025781810151838201526020016126ea565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561273e578181015183820152602001612726565b50505050905090810190601f16801561276b5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561279057600080fd5b505af11580156127a4573d6000803e3d6000fd5b505050506040513d60208110156127ba57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603f8152602001806135b0603f913960400191505060405180910390fd5b505050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061293f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612902565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129a1576040519150601f19603f3d011682016040523d82523d6000602084013e6129a6565b606091505b50915091508180156129d45750805115806129d457508080602001905160208110156129d157600080fd5b50515b610fff576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038416600090815260208181526040808320868452909152902054612a57908363ffffffff612ac516565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4611e16600085858585612e43565b60008282018381101561235d576040805162461bcd60e51b815260206004820152601660248201527f536166654d617468236164643a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b600954600090612b3690600163ffffffff612ac516565b905090565b600980546001019055565b8051611d239060029060208401906133ad565b8151835114612b995760405162461bcd60e51b81526004018080602001828103825260308152602001806135806030913960400191505060405180910390fd5b825160005b81811015612c4457612bef848281518110612bb557fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008885815181106124b457fe5b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612c2157fe5b602090810291909101810151825281019190915260400160002055600101612b9e565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ccb578181015183820152602001612cb3565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612d0a578181015183820152602001612cf2565b5050505090500194505050505060405180910390a4610fff60008686868661260f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6001600160a01b038416600090815260208181526040808320858452909152902054612d8d908263ffffffff61308d16565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054612dd6908263ffffffff612ac516565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b612e55846001600160a01b0316613376565b15610fff576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ef8578181015183820152602001612ee0565b50505050905090810190601f168015612f255780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612f4857600080fd5b505af1158015612f5c573d6000803e3d6000fd5b505050506040513d6020811015612f7257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461283e5760405162461bcd60e51b815260040180806020018281038252603a8152602001806135ef603a913960400191505060405180910390fd5b6001600160a01b038316600090815260208181526040808320858452909152902054613028908263ffffffff61308d16565b6001600160a01b03841660008181526020818152604080832087845282528083209490945583518681529081018590528351919333927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a4505050565b6000828211156130e4576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f19166020018201604052801561313e576020820181803883390190505b509050806000805b88518110156131af5788818151811061315b57fe5b602001015160f81c60f81b83838060010194508151811061317857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613146565b5060005b875181101561321c578781815181106131c857fe5b602001015160f81c60f81b8383806001019450815181106131e557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016131b3565b5060005b86518110156132895786818151811061323557fe5b602001015160f81c60f81b83838060010194508151811061325257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613220565b5060005b85518110156132f6578581815181106132a257fe5b602001015160f81c60f81b8383806001019450815181106132bf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060010161328d565b5060005b84518110156133635784818151811061330f57fe5b602001015160f81c60f81b83838060010194508151811061332c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016132fa565b50909d9c50505050505050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906120885750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133ee57805160ff191683800117855561341b565b8280016001018555821561341b579182015b8281111561341b578251825591602001919060010190613400565b5061342792915061342b565b5090565b610f4791905b80821115613427576000815560010161343156fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745a265627a7a72315820bb18defe7ca16e9ef43c094f64d4fb2bc9c7785e892acac6379ee2022e65c07264736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008db6a3fe0f238ed9f9e440fbed33d6c25e06d8a50000000000000000000000000000000000000000000000000000000000000007476f6464657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007474f444445535300000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Goddess
Arg [1] : _symbol (string): GODDESS
Arg [2] : _proxyRegistryAddress (address): 0x8DB6A3FE0f238ed9f9E440fbeD33d6C25E06D8a5
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000008db6a3fe0f238ed9f9e440fbed33d6c25e06d8a5
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 476f646465737300000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 474f444445535300000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40207:3793:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40207:3793:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21050:127;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21050:127:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23025:240;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23025:240:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;40584:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40584:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41097:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41097:218:0;;:::i;35495:27::-;;;:::i;:::-;;;;-1:-1:-1;;;;;35495:27:0;;;;;;;;;;;;;;36012:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36012:105:0;;;;;;;;;;;;;;;;;16227:511;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;16227:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:511:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:511:0;;;;;;;;-1:-1:-1;16227:511:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;16227:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:511:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:511:0;;;;;;;;-1:-1:-1;16227:511:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;16227:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16227:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:511:0;;-1:-1:-1;16227:511:0;;-1:-1:-1;;;;;16227:511:0:i;:::-;;38939:309;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38939:309:0;;;;;;;;;;;;;;;;;:::i;40511:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40511:44:0;;:::i;21465:500::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21465:500:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21465:500:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21465:500:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21465:500:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21465:500:0;;;;;;;;-1:-1:-1;21465:500:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;21465:500:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21465:500:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21465:500:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21465:500:0;;-1:-1:-1;21465:500:0;;-1:-1:-1;;;;;21465:500:0:i;41970:335::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;41970:335:0;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;41970:335:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41970:335:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41970:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41970:335:0;;-1:-1:-1;41970:335:0;;-1:-1:-1;;;;;41970:335:0:i;36333:203::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36333:203:0;-1:-1:-1;;;;;36333:203:0;;:::i;37138:214::-;;;:::i;41738:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41738:224:0;;:::i;36717:244::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36717:244:0;-1:-1:-1;;;;;36717:244:0;;:::i;41437:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41437:139:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;41437:139:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41437:139:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41437:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41437:139:0;;-1:-1:-1;41437:139:0;;-1:-1:-1;;;;;41437:139:0:i;43890:107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43890:107:0;;:::i;40633:20::-;;;:::i;37421:360::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37421:360:0;-1:-1:-1;;;;;37421:360:0;;:::i;20056:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20056:227:0;;;;;;;;;;:::i;37789:498::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37789:498:0;-1:-1:-1;;;;;37789:498:0;;:::i;42313:440::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;42313:440:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42313:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42313:440:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42313:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42313:440:0;;;;;;;;-1:-1:-1;42313:440:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;42313:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42313:440:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42313:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42313:440:0;;;;;;;;-1:-1:-1;42313:440:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;42313:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42313:440:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42313:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42313:440:0;;-1:-1:-1;42313:440:0;;-1:-1:-1;;;;;42313:440:0:i;41323:106::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41323:106:0;;:::i;39303:221::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39303:221:0;;;;;;-1:-1:-1;;;;;39303:221:0;;:::i;41584:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41584:146:0;-1:-1:-1;;;;;41584:146:0;;:::i;43051:446::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;43051:446:0;;;;;;;;;;:::i;15289:545::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;15289:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;15289:545:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15289:545:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15289:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;15289:545:0;;-1:-1:-1;15289:545:0;;-1:-1:-1;;;;;15289:545:0:i;42761:282::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;42761:282:0;;;;;;;;;;;;;:::i;35468:20::-;;;:::i;21050:127::-;-1:-1:-1;;;;;21150:16:0;;21124:7;21150:16;;;;;;;;;;;:21;;;;;;;;;21050:127;;;;;:::o;23025:240::-;23096:4;23113:42;;;23129:26;23113:42;;:98;;-1:-1:-1;23168:43:0;;;23184:27;23168:43;23113:98;23109:132;;;-1:-1:-1;23229:4:0;23222:11;;23109:132;-1:-1:-1;23254:5:0;23025:240;;;;:::o;40584:18::-;;;;;;;;;;;;;;;-1:-1:-1;;40584:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41097:218::-;41144:13;41178:12;41186:3;41178:7;:12::i;:::-;41170:62;;;;-1:-1:-1;;;41170:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41268:15;41250:57;;;;;;;-1:-1:-1;;41250:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41268:15;;41250:57;;41268:15;41250:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41285:21;41302:3;41285:16;:21::i;:::-;41250:17;:57::i;35495:27::-;;;-1:-1:-1;;;;;35495:27:0;;:::o;36012:105::-;36059:16;36095:14;36088:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36088:21:0;;;;;;;;;;;;;;;;;;;;;;;36012:105;;:::o;16227:511::-;16408:10;-1:-1:-1;;;;;16408:19:0;;;;16407:60;;;16432:35;16449:5;16456:10;16432:16;:35::i;:::-;16399:120;;;;-1:-1:-1;;;16399:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16534:17:0;;16526:78;;;;-1:-1:-1;;;16526:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16613:50;16636:5;16643:3;16648:4;16654:8;16613:22;:50::i;:::-;16670:62;16698:5;16705:3;16710:4;16716:8;16726:5;16670:27;:62::i;:::-;16227:511;;;;;:::o;38939:309::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39082:25:0;;;;;;:9;:25;;;;;;;;39081:26;39073:68;;;;;-1:-1:-1;;;39073:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39152:36;39166:5;39173:6;39181;39152:13;:36::i;:::-;39204;;;-1:-1:-1;;;;;39204:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38939:309;;;:::o;40511:44::-;;;;;;;;;;;;;:::o;21465:500::-;21564:16;21618:4;:11;21600:7;:14;:29;21592:86;;;;-1:-1:-1;;;21592:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21705:30;21752:7;:14;21738:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;21738:29:0;-1:-1:-1;21705:62:0;-1:-1:-1;21826:9:0;21821:110;21845:7;:14;21841:1;:18;21821:110;;;21894:8;:20;21903:7;21911:1;21903:10;;;;;;;;;;;;;;-1:-1:-1;;;;;21894:20:0;-1:-1:-1;;;;;21894:20:0;;;;;;;;;;;;:29;21915:4;21920:1;21915:7;;;;;;;;;;;;;;21894:29;;;;;;;;;;;;21875:13;21889:1;21875:16;;;;;;;;;;;;;;;;;:48;21861:3;;21821:110;;;-1:-1:-1;21946:13:0;21465:500;-1:-1:-1;;;21465:500:0:o;41970:335::-;35955:10;35945:21;;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42150:19;;;;:14;:19;;;;;;;;;42131:11;:16;;;;;;;:38;42123:69;;;;;-1:-1:-1;;;42123:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42203:33;42209:3;42214;42219:9;42230:5;42203;:33::i;:::-;42266:16;;;;:11;:16;;;;;;:31;;42287:9;42266:31;:20;:31;:::i;:::-;42247:16;;;;:11;:16;;;;;;:50;;;;-1:-1:-1;;;41970:335:0:o;36333:203::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36410:22:0;;36402:46;;;;;-1:-1:-1;;;36402:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36464:30;;;-1:-1:-1;;;;;36464:30:0;;;;;;;;;;;;;;;36505:12;:23;;;;-1:-1:-1;;;;;36505:23:0;;;;;;;;;;36333:203::o;37138:214::-;37186:12;;-1:-1:-1;;;;;37186:12:0;37202:10;37186:26;37178:50;;;;;-1:-1:-1;;;37178:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37257:12;;37271:5;;37244:33;;;-1:-1:-1;;;;;37257:12:0;;;37244:33;;37271:5;;;;37244:33;;;;;;;;;;;;;;;;37296:12;;;37288:5;:20;;;;;;-1:-1:-1;;;;;37296:12:0;;37288:20;;;;37319:25;;;37138:214::o;41738:224::-;35955:10;41805:7;35945:21;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41825:11;41839:17;:15;:17::i;:::-;41825:31;;41867:23;:21;:23::i;:::-;41901:19;;;;:14;:19;;;;;:32;;;;-1:-1:-1;41901:19:0;41738:224::o;36717:244::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36801:22:0;;36793:42;;;;;-1:-1:-1;;;36793:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36851:30;;;-1:-1:-1;;;;;36851:30:0;;;;;;;;;;;;;;;36920:5;;36897:29;;;-1:-1:-1;;;;;36897:29:0;;;;;36920:5;;;36897:29;;;;;;;;;;;;;;;;36937:5;:16;;;;-1:-1:-1;;;;;36937:16:0;;;;;;;;;;36717:244::o;41437:139::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41528:40;41548:19;41528;:40::i;:::-;41437:139;:::o;43890:107::-;43943:7;43970:19;;;:14;:19;;;;;;;43890:107::o;40633:20::-;;;;;;;;;;;;;;;-1:-1:-1;;40633:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37421:360;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37500:22:0;;;;;;:9;:22;;;;;;;;37499:23;37491:51;;;;;-1:-1:-1;;;37491:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37584:14;:21;35662:2;-1:-1:-1;37576:64:0;;;;;-1:-1:-1;;;37576:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37658:32;;;-1:-1:-1;;;;;37658:32:0;;;;37685:4;37658:32;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37701:22:0;;;;;:9;:22;;;;;:29;;;;37726:4;37701:29;;;;;;37741:14;27:10:-1;;23:18;;;45:23;;37741:32:0;;;;;;;;;;;;;;37421:360::o;20056:227::-;20183:10;20173:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20173:32:0;;;;;;;;;;;;:44;;;;;;;;;;;;;20229:48;;;;;;;20173:32;;20183:10;20229:48;;;;;;;;;;;20056:227;;:::o;37789:498::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37867:19:0;;;;;;:9;:19;;;;;;;;37859:44;;;;;-1:-1:-1;;;37859:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37914:19:0;;37936:5;37914:19;;;:9;:19;;;;;:27;;;;;;37954:326;37978:14;:21;37974:25;;37954:326;;;38046:8;-1:-1:-1;;;;;38025:29:0;:14;38040:1;38025:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38025:17:0;:29;38021:248;;;38095:14;38110:21;;-1:-1:-1;;38110:25:0;;;38095:41;;;;;;;;;;;;;;;;38075:14;:17;;-1:-1:-1;;;;;38095:41:0;;;;38090:1;;38075:17;;;;;;;;;;;;;;:61;;;;;-1:-1:-1;;;;;38075:61:0;;;;;-1:-1:-1;;;;;38075:61:0;;;;;;38155:14;:20;;;;;;;;;;;;;;;;;-1:-1:-1;;38155:20:0;;;;;;;;;;;;;;;38199:30;;;-1:-1:-1;;;;;38199:30:0;;;;;;;;;;;;;;;;;;;;;;;;38248:5;;38021:248;38001:3;;37954:326;;;;37789:498;:::o;42313:440::-;35955:10;35945:21;;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42497:9;42492:202;42516:4;:11;42512:1;:15;42492:202;;;42549:11;42563:4;42568:1;42563:7;;;;;;;;;;;;;;42549:21;;42585:16;42604:11;42616:1;42604:14;;;;;;;;;;;;;;42585:33;;42652:30;42673:8;42652:11;:16;42664:3;42652:16;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;42633:16;;;;:11;:16;;;;;;:49;;;;-1:-1:-1;42529:3:0;;42492:202;;;;42704:41;42715:3;42720:4;42726:11;42739:5;42704:10;:41::i;:::-;42313:440;;;;:::o;41323:106::-;41378:7;41405:16;;;:11;:16;;;;;;;41323:106::o;39303:221::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39415:29;;39397:12;;-1:-1:-1;;;;;39415:11:0;;;39433:6;;39397:12;39415:29;39397:12;39415:29;39433:6;39415:11;:29;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;39396:48:0;;;39463:7;39455:16;;;;;;39487:29;;;;;;-1:-1:-1;;;;;39487:29:0;;;;;;;;;;;;;;;;;;;35885:1;39303:221;;:::o;41584:146::-;35854:5;;-1:-1:-1;;;;;35854:5:0;35840:10;:19;35832:42;;;;;-1:-1:-1;;;35832:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41678:20;:44;;;;-1:-1:-1;;;;;41678:44:0;;;;;;;;;;41584:146::o;43051:446::-;43300:20;;43344:29;;;;;;-1:-1:-1;;;;;43344:29:0;;;;;;;;;43160:15;;43300:20;;;43336:51;;;43300:20;;43344:21;;:29;;;;;;;;;;;;;;;43300:20;43344:29;;;5:2:-1;;;;30:1;27;20:12;5:2;43344:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43344:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43344:29:0;-1:-1:-1;;;;;43336:51:0;;43332:95;;;43411:4;43404:11;;;;;43332:95;43446:43;43471:6;43479:9;43446:24;:43::i;:::-;43439:50;43051:446;-1:-1:-1;;;;43051:446:0:o;15289:545::-;15424:10;-1:-1:-1;;;;;15424:19:0;;;;15423:60;;;15448:35;15465:5;15472:10;15448:16;:35::i;:::-;15415:115;;;;-1:-1:-1;;;15415:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15545:17:0;;15537:72;;;;-1:-1:-1;;;15537:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15723:43;15741:5;15748:3;15753;15758:7;15723:17;:43::i;:::-;15773:55;15796:5;15803:3;15808;15813:7;15822:5;15773:22;:55::i;42761:282::-;35955:10;35945:21;;;;:9;:21;;;;;;;;35937:47;;;;;-1:-1:-1;;;35937:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42885:26;42891:5;42898:3;42903:7;42885:5;:26::i;:::-;42944:19;;;;:14;:19;;;;;;:32;;42968:7;42944:32;:23;:32;:::i;:::-;42922:19;;;;:14;:19;;;;;;;;:54;;;;43006:11;:16;;;;:29;;43027:7;43006:29;:20;:29;:::i;:::-;42987:16;;;;:11;:16;;;;;;:48;;;;-1:-1:-1;;42761:282:0:o;35468:20::-;;;-1:-1:-1;;;;;35468:20:0;;:::o;43505:107::-;43589:15;;-1:-1:-1;43582:22:0;;43505:107::o;31939:498::-;31992:27;32036:7;32032:50;;-1:-1:-1;32060:10:0;;;;;;;;;;;;;;;;;;;32032:50;32104:2;32092:9;32139:69;32146:6;;32139:69;;32169:5;;32194:2;32189:7;;;;32139:69;;;32218:17;32248:3;32238:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;32238:14:0;87:34:-1;135:17;;-1:-1;32238:14:0;-1:-1:-1;32218:34:0;-1:-1:-1;;;32275:7:0;;32293:107;32300:7;;32293:107;;32360:2;32355;:7;32349:2;:14;32336:29;;32324:4;32329:3;;;;;;;32324:9;;;;;;;;;;;:41;;;;;;;;;;-1:-1:-1;32386:2:0;32380:8;;;;32293:107;;;-1:-1:-1;32424:4:0;31939:498;-1:-1:-1;;;;31939:498:0:o;31783:148::-;31861:13;31894:29;31904:2;31908;31894:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;31887:36;31783:148;-1:-1:-1;;;31783:148:0:o;18366:687::-;18523:8;:15;18508:4;:11;:30;18500:96;;;;-1:-1:-1;;;18500:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18663:11;;18643:17;18715:247;18739:9;18735:1;:13;18715:247;;;18840:41;18869:8;18878:1;18869:11;;;;;;;;;;;;;;18840:8;:15;18849:5;-1:-1:-1;;;;;18840:15:0;-1:-1:-1;;;;;18840:15:0;;;;;;;;;;;;:24;18856:4;18861:1;18856:7;;;;;;;;;;;;;;18840:24;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;18813:8;:15;18822:5;-1:-1:-1;;;;;18813:15:0;-1:-1:-1;;;;;18813:15:0;;;;;;;;;;;;:24;18829:4;18834:1;18829:7;;;;;;;;;;;;;;18813:24;;;;;;;;;;;:68;;;;18915:39;18942:8;18951:1;18942:11;;;;;;;;;;;;;;18915:8;:13;18924:3;-1:-1:-1;;;;;18915:13:0;-1:-1:-1;;;;;18915:13:0;;;;;;;;;;;;:22;18929:4;18934:1;18929:7;;;;;;;;;;;;;;18915:22;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;18890:8;:13;18899:3;-1:-1:-1;;;;;18890:13:0;-1:-1:-1;;;;;18890:13:0;;;;;;;;;;;;:22;18904:4;18909:1;18904:7;;;;;;;;;;;;;;;;;;;18890:22;;;;;;;;;;-1:-1:-1;18890:22:0;:64;18750:3;;18715:247;;;;19027:3;-1:-1:-1;;;;;18994:53:0;19020:5;-1:-1:-1;;;;;18994:53:0;19008:10;-1:-1:-1;;;;;18994:53:0;;19032:4;19038:8;18994:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18994:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18994:53:0;;;;;;;;;;;;;;;;;;;18366:687;;;;;:::o;19171:476::-;19377:16;:3;-1:-1:-1;;;;;19377:14:0;;:16::i;:::-;19373:269;;;19404:13;19442:3;-1:-1:-1;;;;;19420:49:0;;19470:10;19482:5;19489:4;19495:8;19505:5;19420:91;;;;;;;;;;;;;-1:-1:-1;;;;;19420:91:0;-1:-1:-1;;;;;19420:91:0;;;;;;-1:-1:-1;;;;;19420:91:0;-1:-1:-1;;;;;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19420:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19420:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19420:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19420:91:0;;-1:-1:-1;19528:38:0;;;19538:28;19528:38;19520:114;;;;-1:-1:-1;;;19520:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19373:269;19171:476;;;;;:::o;39628:337::-;38506:34;;;;;;;;;;;;;;;;;39807:43;;-1:-1:-1;;;;;39807:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;39807:43:0;;;;;;25:18:-1;;;61:17;;39807:43:0;182:15:-1;39807:43:0;179:29:-1;160:49;;39782:79:0;;;;39747:12;;39761:17;;39782:10;;;39807:43;39782:79;;;25:18:-1;39782:79:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39782:79:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;39746:115:0;;;;39880:7;:57;;;;-1:-1:-1;39892:11:0;;:16;;:44;;;39923:4;39912:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39912:24:0;39892:44;39872:85;;;;;-1:-1:-1;;;39872:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27246:401;-1:-1:-1;;;;;27389:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:31;;27412:7;27389:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;27368:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;:52;;;;27453:59;;;;;;;;;;;;;27368:13;;:8;;27468:10;;27453:59;;;;;;;;27579:62;27610:3;27616;27621;27626:7;27635:5;27579:22;:62::i;2121:163::-;2179:7;2207:5;;;2227:6;;;;2219:41;;;;;-1:-1:-1;;;2219:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;43620:106;43696:15;;43669:7;;43696:22;;43716:1;43696:22;:19;:22;:::i;:::-;43689:29;;43620:106;:::o;43805:77::-;43857:15;:17;;;;;;43805:77::o;25607:123::-;25687:37;;;;:15;;:37;;;;;:::i;27934:724::-;28084:8;:15;28069:4;:11;:30;28061:91;;;;-1:-1:-1;;;28061:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28212:11;;28196:13;28263:150;28287:5;28283:1;:9;28263:150;;;28366:39;28393:8;28402:1;28393:11;;;;;;;;;;;;;;28366:8;:13;28375:3;-1:-1:-1;;;;;28366:13:0;-1:-1:-1;;;;;28366:13:0;;;;;;;;;;;;:22;28380:4;28385:1;28380:7;;;;;;;28366:39;28341:8;:13;28350:3;-1:-1:-1;;;;;28341:13:0;-1:-1:-1;;;;;28341:13:0;;;;;;;;;;;;:22;28355:4;28360:1;28355:7;;;;;;;;;;;;;;;;;;;28341:22;;;;;;;;;;-1:-1:-1;28341:22:0;:64;28294:3;;28263:150;;;;28496:3;-1:-1:-1;;;;;28456:60:0;28490:3;-1:-1:-1;;;;;28456:60:0;28470:10;-1:-1:-1;;;;;28456:60:0;;28501:4;28507:8;28456:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28456:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28456:60:0;;;;;;;;;;;;;;;;;;;28583:69;28619:3;28625;28630:4;28636:8;28646:5;28583:27;:69::i;20542:155::-;-1:-1:-1;;;;;20663:17:0;;;20629:15;20663:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;20542:155::o;17142:376::-;-1:-1:-1;;;;;17298:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:33;;17323:7;17298:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;17275:15:0;;;:8;:15;;;;;;;;;;;:20;;;;;;;;:56;;;;17378:13;;;;;;;;;;;:18;;;;;;;;:31;;17401:7;17378:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;17357:13:0;;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:52;;;;17460;;;;;;;;;;;;;17357:13;;17460:52;;;;17475:10;;17460:52;;;;;;;;;;;17142:376;;;;:::o;17631:429::-;17808:16;:3;-1:-1:-1;;;;;17808:14:0;;:16::i;:::-;17804:251;;;17835:13;17873:3;-1:-1:-1;;;;;17851:44:0;;17896:10;17908:5;17915:3;17920:7;17929:5;17851:84;;;;;;;;;;;;;-1:-1:-1;;;;;17851:84:0;-1:-1:-1;;;;;17851:84:0;;;;;;-1:-1:-1;;;;;17851:84:0;-1:-1:-1;;;;;17851:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17851:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17851:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17851:84:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17851:84:0;;-1:-1:-1;17952:32:0;;;17962:22;17952:32;17944:103;;;;-1:-1:-1;;;17944:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29016:265;-1:-1:-1;;;;;29148:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:33;;29173:7;29148:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;29125:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;:56;;;;29214:61;;;;;;;;;;;;;29125:8;;29229:10;;29214:61;;;;;;;;;;29016:265;;;:::o;1878:163::-;1936:7;1965:1;1960;:6;;1952:42;;;;;-1:-1:-1;;;1952:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2013:5:0;;;1878:163::o;30338:994::-;30522:13;30548:16;30573:2;30548:28;;30587:16;30612:2;30587:28;;30626:16;30651:2;30626:28;;30665:16;30690:2;30665:28;;30704:16;30729:2;30704:28;;30743:19;30842:3;:10;30829:3;:10;30816:3;:10;30803:3;:10;30790:3;:10;:23;:36;:49;:62;30765:98;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;30765:98:0;87:34:-1;135:17;;-1:-1;30765:98:0;-1:-1:-1;30743:120:0;-1:-1:-1;30743:120:0;30919:9;;30943:61;30967:3;:10;30963:1;:14;30943:61;;;30998:3;31002:1;30998:6;;;;;;;;;;;;;;;;30984;30991:3;;;;;;30984:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;30979:3:0;;30943:61;;;-1:-1:-1;31020:9:0;31015:61;31039:3;:10;31035:1;:14;31015:61;;;31070:3;31074:1;31070:6;;;;;;;;;;;;;;;;31056;31063:3;;;;;;31056:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31051:3:0;;31015:61;;;-1:-1:-1;31092:9:0;31087:61;31111:3;:10;31107:1;:14;31087:61;;;31142:3;31146:1;31142:6;;;;;;;;;;;;;;;;31128;31135:3;;;;;;31128:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31123:3:0;;31087:61;;;-1:-1:-1;31164:9:0;31159:61;31183:3;:10;31179:1;:14;31159:61;;;31214:3;31218:1;31214:6;;;;;;;;;;;;;;;;31200;31207:3;;;;;;31200:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31195:3:0;;31159:61;;;-1:-1:-1;31236:9:0;31231:61;31255:3;:10;31251:1;:14;31231:61;;;31286:3;31290:1;31286:6;;;;;;;;;;;;;;;;31272;31279:3;;;;;;31272:11;;;;;;;;;;;:20;;;;;;;;;;-1:-1:-1;31267:3:0;;31231:61;;;-1:-1:-1;31317:6:0;;30338:994;-1:-1:-1;;;;;;;;;;;;;30338:994:0:o;12945:673::-;13005:4;13533:20;;13063:66;13569:15;;;;;:42;;-1:-1:-1;13588:23:0;;;13561:51;-1:-1:-1;;12945:673:0:o;40207:3793::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40207:3793:0;;;-1:-1:-1;40207:3793:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://bb18defe7ca16e9ef43c094f64d4fb2bc9c7785e892acac6379ee2022e65c072
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.