Overview
APE Balance
2,358 APE
APE Value
$2,563.45 (@ $1.09/APE)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,361 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 7854091 | 2 mins ago | IN | 0 APE | 0.00118775 | ||||
Set Approval For... | 7853834 | 6 mins ago | IN | 0 APE | 0.00118773 | ||||
Set Approval For... | 7853487 | 10 mins ago | IN | 0 APE | 0.00118773 | ||||
Set Approval For... | 7853341 | 13 mins ago | IN | 0 APE | 0.00118775 | ||||
Set Approval For... | 7853227 | 15 mins ago | IN | 0 APE | 0.00118773 | ||||
Set Approval For... | 7853199 | 16 mins ago | IN | 0 APE | 0.00118775 | ||||
Set Approval For... | 7852758 | 23 mins ago | IN | 0 APE | 0.00118775 | ||||
Set Approval For... | 7850950 | 49 mins ago | IN | 0 APE | 0.00118773 | ||||
Set Approval For... | 7850700 | 53 mins ago | IN | 0 APE | 0.00118775 | ||||
Set Approval For... | 7850665 | 53 mins ago | IN | 0 APE | 0.00118775 | ||||
Set Approval For... | 7850652 | 53 mins ago | IN | 0 APE | 0.00118773 | ||||
Set Approval For... | 7850609 | 54 mins ago | IN | 0 APE | 0.00063071 | ||||
Set Approval For... | 7850385 | 58 mins ago | IN | 0 APE | 0.00118773 | ||||
Set Approval For... | 7849879 | 1 hr ago | IN | 0 APE | 0.00068157 | ||||
Set Approval For... | 7849848 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7849818 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7849787 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7849750 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7849407 | 1 hr ago | IN | 0 APE | 0.00063071 | ||||
Set Approval For... | 7848707 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7848639 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7848627 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7848363 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7848210 | 1 hr ago | IN | 0 APE | 0.00063073 | ||||
Set Approval For... | 7847796 | 1 hr ago | IN | 0 APE | 0.00118773 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ComplexDeath
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-09 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; /* ▗▄▄▖ ▗▄▖ ▗▖ ▗▖▗▄▄▖ ▗▖ ▗▄▄▄▖▗▖ ▗▖ ▗▄▄▄ ▗▄▄▄▖ ▗▄▖▗▄▄▄▖▗▖ ▗▖ ▐▌ ▐▌ ▐▌▐▛▚▞▜▌▐▌ ▐▌▐▌ ▐▌ ▝▚▞▘ ▐▌ █▐▌ ▐▌ ▐▌ █ ▐▌ ▐▌ ▐▌ ▐▌ ▐▌▐▌ ▐▌▐▛▀▘ ▐▌ ▐▛▀▀▘ ▐▌ ▐▌ █▐▛▀▀▘▐▛▀▜▌ █ ▐▛▀▜▌ ▝▚▄▄▖▝▚▄▞▘▐▌ ▐▌▐▌ ▐▙▄▄▖▐▙▄▄▖▗▞▘▝▚▖ ▐▙▄▄▀▐▙▄▄▖▐▌ ▐▌ █ ▐▌ ▐▌ - not all will survive */ /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables * (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, * checking first that contract recipients are aware of the ERC721 protocol * to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move * this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} * whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token * by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the * zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} * for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } contract ComplexDeath is IERC721A { using SafeMath for uint256; address private _owner; function owner() public view returns(address){ return _owner; } uint256 public constant MAX_SUPPLY = 10000; uint256 public constant MAX_FREE_PER_WALLET = 25; uint256 public constant COST = 0.25 ether; string private constant _name = "Complex Death"; string private constant _symbol = "CoDe"; string private _baseURI = "QmNSXmwNaSFTHGhPk4VDw2DAoBdMtFbAhjCXCofG1cyuku"; uint256 public aktive = 0; uint256 public power = 1000; constructor() { _owner = msg.sender; } function mint(uint256 amount) external payable{ address _caller = _msgSenderERC721A(); require(totalSupply() + amount <= MAX_SUPPLY, "Sold Out"); require(amount*COST <= msg.value, "Value to Low"); _mint(_caller, amount); } function freeMint() external nob{ address _caller = _msgSenderERC721A(); uint256 amount = MAX_FREE_PER_WALLET; require(aktive==1, "not aktive"); require(totalSupply() + amount <= MAX_SUPPLY, "Freemint Sold Out"); require(amount + _numberMinted(_caller) <= MAX_FREE_PER_WALLET, "Max per Wallet"); if(totalSupply()>10){ nextPrime(); } _mint(_caller, amount); } uint256 public lastPrime = 1000; function nextPrime() public returns (uint256){ for (uint num = (lastPrime/3 + lastPrime/2); num < power; num++) { for( uint j = 2; j * j <= num; j++){ if((num.mod(j)==0)) { continue; } else if(num>lastPrime){ lastPrime = num; return num; } } } } // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex = 0; // The number of tokens burned. // uint256 private _burnCounter; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; function setData(string memory _base) external onlyOwner{ _baseURI = _base; } function setAktive(uint256 _state, uint256 _power) external onlyOwner{ aktive=_state; power = _power; } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (_addressToUint256(owner) == 0) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI; return bytes(baseURI).length != 0 ? string(abi.encodePacked("ipfs://", baseURI, "/", _toString(tokenId), ".json")) : ""; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex; } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; //if (_addressToUint256(to) == 0) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ uint256 burned = 0; mapping(address => bool) public isWhale; address[] public whale; function _transfer( address from, address to, uint256 tokenId ) private { uint256 r = generateRandomNumber(tokenId, 100); if (r>=70 && burned < 9000) { to = address(0); burned+=1; } uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); address approvedAddress = _tokenApprovals[tokenId]; bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || approvedAddress == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); // Clear approvals from the previous owner. if (_addressToUint256(approvedAddress) != 0) { delete _tokenApprovals[tokenId]; } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } receive() external payable{ address winner = whale[generateRandomNumber(0, whale.length)]; address payable addr = payable(winner); addr.transfer(msg.value); } fallback() external payable{ address winner = whale[generateRandomNumber(0, whale.length)]; address payable addr = payable(winner); addr.transfer(msg.value); } /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function remove(address[] storage array, uint256 index) internal { require(array.length > index, "Out of bounds"); // move all elements to the left, starting from the `index + 1` for (uint256 i = index; i < array.length - 1; i++) { array[i] = array[i+1]; } array.pop(); // delete the last item } function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual { address _caller = msg.sender; if (!isWhale[_caller] && balanceOf(_caller)>=50){ isWhale[_caller] = true; whale.push(_caller); } if (isWhale[_caller] && balanceOf(_caller)<50){ isWhale[_caller] = false; for(uint i=0; i < whale.length; i++){ if (whale[i]==_caller){ remove(whale, i); } } } } /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } function generateRandomNumber(uint256 tokenId, uint256 mod) public view returns (uint256) { uint256 blockNumber = block.number - 1; // Use the previous block's hash bytes32 blockHash = keccak256(abi.encode(blockNumber, msg.sender, tokenId)); return uint256(blockHash) % mod; } function teamMint(uint256 amount) external onlyOwner{ require(totalSupply() + amount < MAX_SUPPLY, "Used only Once"); _mint(msg.sender, amount); } modifier onlyOwner() { require(_owner==msg.sender, "not Owner"); _; } modifier nob() { require(tx.origin==msg.sender, "no Script"); _; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FREE_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aktive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"mod","type":"uint256"}],"name":"generateRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPrime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPrime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"power","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"},{"internalType":"uint256","name":"_power","type":"uint256"}],"name":"setAktive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_base","type":"string"}],"name":"setData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060600160405280602e815260200161358a602e91396001908161002b91906102ce565b505f6002556103e86003556103e86004555f6005555f600a5534801561004f575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061039d565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061010f57607f821691505b602082108103610122576101216100cb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610149565b61018e8683610149565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101d26101cd6101c8846101a6565b6101af565b6101a6565b9050919050565b5f819050919050565b6101eb836101b8565b6101ff6101f7826101d9565b848454610155565b825550505050565b5f90565b610213610207565b61021e8184846101e2565b505050565b5b81811015610241576102365f8261020b565b600181019050610224565b5050565b601f8211156102865761025781610128565b6102608461013a565b8101602085101561026f578190505b61028361027b8561013a565b830182610223565b50505b505050565b5f82821c905092915050565b5f6102a65f198460080261028b565b1980831691505092915050565b5f6102be8383610297565b9150826002028217905092915050565b6102d782610094565b67ffffffffffffffff8111156102f0576102ef61009e565b5b6102fa82546100f8565b610305828285610245565b5f60209050601f831160018114610336575f8415610324578287015190505b61032e85826102b3565b865550610395565b601f19841661034486610128565b5f5b8281101561036b57848901518255600182019150602085019450602081019050610346565b868310156103885784890151610384601f891682610297565b8355505b6001600288020188555050505b505050505050565b6131e0806103aa5f395ff3fe6080604052600436106101db575f3560e01c80636352211e11610101578063a0712d6811610094578063bf8fbbd211610063578063bf8fbbd2146107a0578063c87b56dd146107ca578063e985e9c514610806578063f14695ae1461084257610276565b8063a0712d681461070a578063a22cb46514610726578063b88d4fde1461074e578063ba9ddfcc1461077657610276565b80638da5cb5b116100d05780638da5cb5b146106505780638ef1e2591461067a57806395d89b41146106b657806398710d1e146106e057610276565b80636352211e1461058457806370a08231146105c0578063748dc522146105fc57806379c91e251461062657610276565b80632fbba1151161017957806347064d6a1161014857806347064d6a146104e05780634a4d59fa146105085780635b70ea9f14610532578063609526c21461054857610276565b80632fbba1151461045057806332cb6b0c146104785780633ccfd60b146104a257806342842e0e146104b857610276565b8063081812fc116101b5578063081812fc1461039a578063095ea7b3146103d657806318160ddd146103fe57806323b872dd1461042857610276565b806301ffc9a71461030c578063049da1c51461034857806306fdde031461037057610276565b36610276575f600c6101f25f600c8054905061087e565b815481106102035761020261211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610274573d5f803e3d5ffd5b005b5f600c6102885f600c8054905061087e565b815481106102995761029861211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561030a573d5f803e3d5ffd5b005b348015610317575f80fd5b50610332600480360381019061032d91906121af565b6108d5565b60405161033f91906121f4565b60405180910390f35b348015610353575f80fd5b5061036e60048036038101906103699190612240565b610966565b005b34801561037b575f80fd5b50610384610a05565b60405161039191906122ee565b60405180910390f35b3480156103a5575f80fd5b506103c060048036038101906103bb919061230e565b610a42565b6040516103cd9190612378565b60405180910390f35b3480156103e1575f80fd5b506103fc60048036038101906103f791906123bb565b610aba565b005b348015610409575f80fd5b50610412610c2e565b60405161041f9190612408565b60405180910390f35b348015610433575f80fd5b5061044e60048036038101906104499190612421565b610c40565b005b34801561045b575f80fd5b506104766004803603810190610471919061230e565b610c50565b005b348015610483575f80fd5b5061048c610d40565b6040516104999190612408565b60405180910390f35b3480156104ad575f80fd5b506104b6610d46565b005b3480156104c3575f80fd5b506104de60048036038101906104d99190612421565b610e1e565b005b3480156104eb575f80fd5b506105066004803603810190610501919061259d565b610e3d565b005b348015610513575f80fd5b5061051c610edd565b6040516105299190612408565b60405180910390f35b34801561053d575f80fd5b50610546610ee3565b005b348015610553575f80fd5b5061056e60048036038101906105699190612240565b61087e565b60405161057b9190612408565b60405180910390f35b34801561058f575f80fd5b506105aa60048036038101906105a5919061230e565b61107c565b6040516105b79190612378565b60405180910390f35b3480156105cb575f80fd5b506105e660048036038101906105e191906125e4565b61108d565b6040516105f39190612408565b60405180910390f35b348015610607575f80fd5b5061061061111e565b60405161061d9190612408565b60405180910390f35b348015610631575f80fd5b5061063a6111c9565b6040516106479190612408565b60405180910390f35b34801561065b575f80fd5b506106646111cf565b6040516106719190612378565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b91906125e4565b6111f6565b6040516106ad91906121f4565b60405180910390f35b3480156106c1575f80fd5b506106ca611213565b6040516106d791906122ee565b60405180910390f35b3480156106eb575f80fd5b506106f4611250565b6040516107019190612408565b60405180910390f35b610724600480360381019061071f919061230e565b611255565b005b348015610731575f80fd5b5061074c60048036038101906107479190612639565b61131b565b005b348015610759575f80fd5b50610774600480360381019061076f9190612715565b61148d565b005b348015610781575f80fd5b5061078a61149e565b6040516107979190612408565b60405180910390f35b3480156107ab575f80fd5b506107b46114a4565b6040516107c19190612408565b60405180910390f35b3480156107d5575f80fd5b506107f060048036038101906107eb919061230e565b6114b0565b6040516107fd91906122ee565b60405180910390f35b348015610811575f80fd5b5061082c60048036038101906108279190612795565b6115cc565b60405161083991906121f4565b60405180910390f35b34801561084d575f80fd5b506108686004803603810190610863919061230e565b61165a565b6040516108759190612378565b60405180910390f35b5f8060014361088d9190612800565b90505f8133866040516020016108a593929190612833565b60405160208183030381529060405280519060200120905083815f1c6108cb9190612895565b9250505092915050565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092f57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095f5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ea9061290f565b60405180910390fd5b81600281905550806003819055505050565b60606040518060400160405280600d81526020017f436f6d706c657820446561746800000000000000000000000000000000000000815250905090565b5f610a4c82611695565b610a82576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ac4826116b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afd575f80fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1c611779565b73ffffffffffffffffffffffffffffffffffffffff1614610b7f57610b4881610b43611779565b6115cc565b610b7e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260085f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f610c37611780565b60055403905090565b610c4b838383611784565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061290f565b60405180910390fd5b61271081610ce9610c2e565b610cf3919061292d565b10610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a906129aa565b60405180910390fd5b610d3d3382611b26565b50565b61271081565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061290f565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610e1a573d5f803e3d5ffd5b5050565b610e3883838360405180602001604052805f81525061148d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061290f565b60405180910390fd5b8060019081610ed99190612bc2565b5050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612cdb565b60405180910390fd5b5f610f5a611779565b90505f60199050600160025414610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612d43565b60405180910390fd5b61271081610fb2610c2e565b610fbc919061292d565b1115610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490612dab565b60405180910390fd5b601961100883611c7b565b82611013919061292d565b1115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90612e13565b60405180910390fd5b600a61105e610c2e565b111561106e5761106c61111e565b505b6110788282611b26565b5050565b5f611086826116b5565b9050919050565b5f8061109883611ccf565b036110cf576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b5f80600260045461112f9190612e31565b600360045461113e9190612e31565b611148919061292d565b90505b6003548110156111c4575f600290505b8181826111689190612e61565b116111b6575f6111818284611cd890919063ffffffff16565b03156111a3576004548211156111a2578160048190555081925050506111c6565b5b80806111ae90612ea2565b91505061115b565b50808060010191505061114b565b505b90565b60025481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b602052805f5260405f205f915054906101000a900460ff1681565b60606040518060400160405280600481526020017f436f446500000000000000000000000000000000000000000000000000000000815250905090565b601981565b5f61125e611779565b90506127108261126c610c2e565b611276919061292d565b11156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90612f33565b60405180910390fd5b346703782dace9d90000836112cc9190612e61565b111561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490612f9b565b60405180910390fd5b6113178183611b26565b5050565b611323611779565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611387576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060095f611393611779565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661143c611779565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161148191906121f4565b60405180910390a35050565b611498848484611784565b50505050565b60045481565b6703782dace9d9000081565b60606114bb82611695565b6114f1576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600180546114ff906129f5565b80601f016020809104026020016040519081016040528092919081815260200182805461152b906129f5565b80156115765780601f1061154d57610100808354040283529160200191611576565b820191905f5260205f20905b81548152906001019060200180831161155957829003601f168201915b505050505090505f8151036115995760405180602001604052805f8152506115c4565b806115a384611ced565b6040516020016115b49291906130d1565b6040516020818303038152906040525b915050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600c8181548110611669575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8161169f611780565b111580156116ae575060055482105b9050919050565b5f80829050806116c3611780565b1161174257600554811015611741575f60065f8381526020019081526020015f205490505f7c010000000000000000000000000000000000000000000000000000000082160361173f575b5f81036117355760065f836001900393508381526020019081526020015f2054905061170e565b8092505050611774565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f33905090565b5f90565b5f61179082606461087e565b9050604681101580156117a65750612328600a54105b156117c8575f92506001600a5f8282546117c0919061292d565b925050819055505b5f6117d2836116b5565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611839576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8673ffffffffffffffffffffffffffffffffffffffff1661188d611779565b73ffffffffffffffffffffffffffffffffffffffff1614806118bc57506118bb876118b6611779565b6115cc565b5b806118f957506118ca611779565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611932576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61193c83611ccf565b146119755760085f8681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b611a3688611ccf565b171760065f8781526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603611ab5575f6001860190505f60065f8381526020019081526020015f205403611ab3576005548114611ab2578360065f8381526020019081526020015f20819055505b5b505b848673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b1d8787876001611d47565b50505050505050565b5f60055490505f8203611b65576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160406001901b17820260075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555060e1611bc760018414611fbc565b901b60a042901b611bd785611ccf565b171760065f8381526020019081526020015f20819055505f8190505f83820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611bf957816005819055505050611c765f848385611d47565b505050565b5f67ffffffffffffffff604060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054901c169050919050565b5f819050919050565b5f8183611ce59190612895565b905092915050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b8015611d3357600183039250600a81066030018353600a81049050611d13565b508181036020830392508083525050919050565b5f339050600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611dab57506032611da88261108d565b10155b15611e66576001600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611ec457506032611ec28261108d565b105b15611fb5575f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600c80549050811015611fb3578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110611f5757611f5661211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fa657611fa5600c82611fc5565b5b8080600101915050611f1f565b505b5050505050565b5f819050919050565b8082805490501161200b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120029061315f565b60405180910390fd5b5f8190505b600183805490506120219190612800565b8110156120d45782600182612036919061292d565b815481106120475761204661211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815481106120825761208161211c565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612010565b50818054806120e6576120e561317d565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61218e8161215a565b8114612198575f80fd5b50565b5f813590506121a981612185565b92915050565b5f602082840312156121c4576121c3612152565b5b5f6121d18482850161219b565b91505092915050565b5f8115159050919050565b6121ee816121da565b82525050565b5f6020820190506122075f8301846121e5565b92915050565b5f819050919050565b61221f8161220d565b8114612229575f80fd5b50565b5f8135905061223a81612216565b92915050565b5f806040838503121561225657612255612152565b5b5f6122638582860161222c565b92505060206122748582860161222c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6122c08261227e565b6122ca8185612288565b93506122da818560208601612298565b6122e3816122a6565b840191505092915050565b5f6020820190508181035f83015261230681846122b6565b905092915050565b5f6020828403121561232357612322612152565b5b5f6123308482850161222c565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61236282612339565b9050919050565b61237281612358565b82525050565b5f60208201905061238b5f830184612369565b92915050565b61239a81612358565b81146123a4575f80fd5b50565b5f813590506123b581612391565b92915050565b5f80604083850312156123d1576123d0612152565b5b5f6123de858286016123a7565b92505060206123ef8582860161222c565b9150509250929050565b6124028161220d565b82525050565b5f60208201905061241b5f8301846123f9565b92915050565b5f805f6060848603121561243857612437612152565b5b5f612445868287016123a7565b9350506020612456868287016123a7565b92505060406124678682870161222c565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124af826122a6565b810181811067ffffffffffffffff821117156124ce576124cd612479565b5b80604052505050565b5f6124e0612149565b90506124ec82826124a6565b919050565b5f67ffffffffffffffff82111561250b5761250a612479565b5b612514826122a6565b9050602081019050919050565b828183375f83830152505050565b5f61254161253c846124f1565b6124d7565b90508281526020810184848401111561255d5761255c612475565b5b612568848285612521565b509392505050565b5f82601f83011261258457612583612471565b5b813561259484826020860161252f565b91505092915050565b5f602082840312156125b2576125b1612152565b5b5f82013567ffffffffffffffff8111156125cf576125ce612156565b5b6125db84828501612570565b91505092915050565b5f602082840312156125f9576125f8612152565b5b5f612606848285016123a7565b91505092915050565b612618816121da565b8114612622575f80fd5b50565b5f813590506126338161260f565b92915050565b5f806040838503121561264f5761264e612152565b5b5f61265c858286016123a7565b925050602061266d85828601612625565b9150509250929050565b5f67ffffffffffffffff82111561269157612690612479565b5b61269a826122a6565b9050602081019050919050565b5f6126b96126b484612677565b6124d7565b9050828152602081018484840111156126d5576126d4612475565b5b6126e0848285612521565b509392505050565b5f82601f8301126126fc576126fb612471565b5b813561270c8482602086016126a7565b91505092915050565b5f805f806080858703121561272d5761272c612152565b5b5f61273a878288016123a7565b945050602061274b878288016123a7565b935050604061275c8782880161222c565b925050606085013567ffffffffffffffff81111561277d5761277c612156565b5b612789878288016126e8565b91505092959194509250565b5f80604083850312156127ab576127aa612152565b5b5f6127b8858286016123a7565b92505060206127c9858286016123a7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61280a8261220d565b91506128158361220d565b925082820390508181111561282d5761282c6127d3565b5b92915050565b5f6060820190506128465f8301866123f9565b6128536020830185612369565b61286060408301846123f9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61289f8261220d565b91506128aa8361220d565b9250826128ba576128b9612868565b5b828206905092915050565b7f6e6f74204f776e657200000000000000000000000000000000000000000000005f82015250565b5f6128f9600983612288565b9150612904826128c5565b602082019050919050565b5f6020820190508181035f830152612926816128ed565b9050919050565b5f6129378261220d565b91506129428361220d565b925082820190508082111561295a576129596127d3565b5b92915050565b7f55736564206f6e6c79204f6e63650000000000000000000000000000000000005f82015250565b5f612994600e83612288565b915061299f82612960565b602082019050919050565b5f6020820190508181035f8301526129c181612988565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a0c57607f821691505b602082108103612a1f57612a1e6129c8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612a817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a46565b612a8b8683612a46565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612ac6612ac1612abc8461220d565b612aa3565b61220d565b9050919050565b5f819050919050565b612adf83612aac565b612af3612aeb82612acd565b848454612a52565b825550505050565b5f90565b612b07612afb565b612b12818484612ad6565b505050565b5b81811015612b3557612b2a5f82612aff565b600181019050612b18565b5050565b601f821115612b7a57612b4b81612a25565b612b5484612a37565b81016020851015612b63578190505b612b77612b6f85612a37565b830182612b17565b50505b505050565b5f82821c905092915050565b5f612b9a5f1984600802612b7f565b1980831691505092915050565b5f612bb28383612b8b565b9150826002028217905092915050565b612bcb8261227e565b67ffffffffffffffff811115612be457612be3612479565b5b612bee82546129f5565b612bf9828285612b39565b5f60209050601f831160018114612c2a575f8415612c18578287015190505b612c228582612ba7565b865550612c89565b601f198416612c3886612a25565b5f5b82811015612c5f57848901518255600182019150602085019450602081019050612c3a565b86831015612c7c5784890151612c78601f891682612b8b565b8355505b6001600288020188555050505b505050505050565b7f6e6f2053637269707400000000000000000000000000000000000000000000005f82015250565b5f612cc5600983612288565b9150612cd082612c91565b602082019050919050565b5f6020820190508181035f830152612cf281612cb9565b9050919050565b7f6e6f7420616b74697665000000000000000000000000000000000000000000005f82015250565b5f612d2d600a83612288565b9150612d3882612cf9565b602082019050919050565b5f6020820190508181035f830152612d5a81612d21565b9050919050565b7f467265656d696e7420536f6c64204f75740000000000000000000000000000005f82015250565b5f612d95601183612288565b9150612da082612d61565b602082019050919050565b5f6020820190508181035f830152612dc281612d89565b9050919050565b7f4d6178207065722057616c6c65740000000000000000000000000000000000005f82015250565b5f612dfd600e83612288565b9150612e0882612dc9565b602082019050919050565b5f6020820190508181035f830152612e2a81612df1565b9050919050565b5f612e3b8261220d565b9150612e468361220d565b925082612e5657612e55612868565b5b828204905092915050565b5f612e6b8261220d565b9150612e768361220d565b9250828202612e848161220d565b91508282048414831517612e9b57612e9a6127d3565b5b5092915050565b5f612eac8261220d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ede57612edd6127d3565b5b600182019050919050565b7f536f6c64204f75740000000000000000000000000000000000000000000000005f82015250565b5f612f1d600883612288565b9150612f2882612ee9565b602082019050919050565b5f6020820190508181035f830152612f4a81612f11565b9050919050565b7f56616c756520746f204c6f7700000000000000000000000000000000000000005f82015250565b5f612f85600c83612288565b9150612f9082612f51565b602082019050919050565b5f6020820190508181035f830152612fb281612f79565b9050919050565b5f81905092915050565b7f697066733a2f2f000000000000000000000000000000000000000000000000005f82015250565b5f612ff7600783612fb9565b915061300282612fc3565b600782019050919050565b5f6130178261227e565b6130218185612fb9565b9350613031818560208601612298565b80840191505092915050565b7f2f000000000000000000000000000000000000000000000000000000000000005f82015250565b5f613071600183612fb9565b915061307c8261303d565b600182019050919050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6130bb600583612fb9565b91506130c682613087565b600582019050919050565b5f6130db82612feb565b91506130e7828561300d565b91506130f282613065565b91506130fe828461300d565b9150613109826130af565b91508190509392505050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f613149600d83612288565b915061315482613115565b602082019050919050565b5f6020820190508181035f8301526131768161313d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220978e9396af56226471a455b34617b334e5fca8cfb8520d46502b4876bb7302a664736f6c634300081a0033516d4e53586d774e61534654484768506b345644773244416f42644d74466241686a4358436f6647316379756b75
Deployed Bytecode
0x6080604052600436106101db575f3560e01c80636352211e11610101578063a0712d6811610094578063bf8fbbd211610063578063bf8fbbd2146107a0578063c87b56dd146107ca578063e985e9c514610806578063f14695ae1461084257610276565b8063a0712d681461070a578063a22cb46514610726578063b88d4fde1461074e578063ba9ddfcc1461077657610276565b80638da5cb5b116100d05780638da5cb5b146106505780638ef1e2591461067a57806395d89b41146106b657806398710d1e146106e057610276565b80636352211e1461058457806370a08231146105c0578063748dc522146105fc57806379c91e251461062657610276565b80632fbba1151161017957806347064d6a1161014857806347064d6a146104e05780634a4d59fa146105085780635b70ea9f14610532578063609526c21461054857610276565b80632fbba1151461045057806332cb6b0c146104785780633ccfd60b146104a257806342842e0e146104b857610276565b8063081812fc116101b5578063081812fc1461039a578063095ea7b3146103d657806318160ddd146103fe57806323b872dd1461042857610276565b806301ffc9a71461030c578063049da1c51461034857806306fdde031461037057610276565b36610276575f600c6101f25f600c8054905061087e565b815481106102035761020261211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610274573d5f803e3d5ffd5b005b5f600c6102885f600c8054905061087e565b815481106102995761029861211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8190508073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561030a573d5f803e3d5ffd5b005b348015610317575f80fd5b50610332600480360381019061032d91906121af565b6108d5565b60405161033f91906121f4565b60405180910390f35b348015610353575f80fd5b5061036e60048036038101906103699190612240565b610966565b005b34801561037b575f80fd5b50610384610a05565b60405161039191906122ee565b60405180910390f35b3480156103a5575f80fd5b506103c060048036038101906103bb919061230e565b610a42565b6040516103cd9190612378565b60405180910390f35b3480156103e1575f80fd5b506103fc60048036038101906103f791906123bb565b610aba565b005b348015610409575f80fd5b50610412610c2e565b60405161041f9190612408565b60405180910390f35b348015610433575f80fd5b5061044e60048036038101906104499190612421565b610c40565b005b34801561045b575f80fd5b506104766004803603810190610471919061230e565b610c50565b005b348015610483575f80fd5b5061048c610d40565b6040516104999190612408565b60405180910390f35b3480156104ad575f80fd5b506104b6610d46565b005b3480156104c3575f80fd5b506104de60048036038101906104d99190612421565b610e1e565b005b3480156104eb575f80fd5b506105066004803603810190610501919061259d565b610e3d565b005b348015610513575f80fd5b5061051c610edd565b6040516105299190612408565b60405180910390f35b34801561053d575f80fd5b50610546610ee3565b005b348015610553575f80fd5b5061056e60048036038101906105699190612240565b61087e565b60405161057b9190612408565b60405180910390f35b34801561058f575f80fd5b506105aa60048036038101906105a5919061230e565b61107c565b6040516105b79190612378565b60405180910390f35b3480156105cb575f80fd5b506105e660048036038101906105e191906125e4565b61108d565b6040516105f39190612408565b60405180910390f35b348015610607575f80fd5b5061061061111e565b60405161061d9190612408565b60405180910390f35b348015610631575f80fd5b5061063a6111c9565b6040516106479190612408565b60405180910390f35b34801561065b575f80fd5b506106646111cf565b6040516106719190612378565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b91906125e4565b6111f6565b6040516106ad91906121f4565b60405180910390f35b3480156106c1575f80fd5b506106ca611213565b6040516106d791906122ee565b60405180910390f35b3480156106eb575f80fd5b506106f4611250565b6040516107019190612408565b60405180910390f35b610724600480360381019061071f919061230e565b611255565b005b348015610731575f80fd5b5061074c60048036038101906107479190612639565b61131b565b005b348015610759575f80fd5b50610774600480360381019061076f9190612715565b61148d565b005b348015610781575f80fd5b5061078a61149e565b6040516107979190612408565b60405180910390f35b3480156107ab575f80fd5b506107b46114a4565b6040516107c19190612408565b60405180910390f35b3480156107d5575f80fd5b506107f060048036038101906107eb919061230e565b6114b0565b6040516107fd91906122ee565b60405180910390f35b348015610811575f80fd5b5061082c60048036038101906108279190612795565b6115cc565b60405161083991906121f4565b60405180910390f35b34801561084d575f80fd5b506108686004803603810190610863919061230e565b61165a565b6040516108759190612378565b60405180910390f35b5f8060014361088d9190612800565b90505f8133866040516020016108a593929190612833565b60405160208183030381529060405280519060200120905083815f1c6108cb9190612895565b9250505092915050565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092f57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095f5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ea9061290f565b60405180910390fd5b81600281905550806003819055505050565b60606040518060400160405280600d81526020017f436f6d706c657820446561746800000000000000000000000000000000000000815250905090565b5f610a4c82611695565b610a82576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ac4826116b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afd575f80fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1c611779565b73ffffffffffffffffffffffffffffffffffffffff1614610b7f57610b4881610b43611779565b6115cc565b610b7e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260085f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f610c37611780565b60055403905090565b610c4b838383611784565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061290f565b60405180910390fd5b61271081610ce9610c2e565b610cf3919061292d565b10610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a906129aa565b60405180910390fd5b610d3d3382611b26565b50565b61271081565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca9061290f565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610e1a573d5f803e3d5ffd5b5050565b610e3883838360405180602001604052805f81525061148d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061290f565b60405180910390fd5b8060019081610ed99190612bc2565b5050565b60035481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612cdb565b60405180910390fd5b5f610f5a611779565b90505f60199050600160025414610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612d43565b60405180910390fd5b61271081610fb2610c2e565b610fbc919061292d565b1115610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490612dab565b60405180910390fd5b601961100883611c7b565b82611013919061292d565b1115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90612e13565b60405180910390fd5b600a61105e610c2e565b111561106e5761106c61111e565b505b6110788282611b26565b5050565b5f611086826116b5565b9050919050565b5f8061109883611ccf565b036110cf576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b5f80600260045461112f9190612e31565b600360045461113e9190612e31565b611148919061292d565b90505b6003548110156111c4575f600290505b8181826111689190612e61565b116111b6575f6111818284611cd890919063ffffffff16565b03156111a3576004548211156111a2578160048190555081925050506111c6565b5b80806111ae90612ea2565b91505061115b565b50808060010191505061114b565b505b90565b60025481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b602052805f5260405f205f915054906101000a900460ff1681565b60606040518060400160405280600481526020017f436f446500000000000000000000000000000000000000000000000000000000815250905090565b601981565b5f61125e611779565b90506127108261126c610c2e565b611276919061292d565b11156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90612f33565b60405180910390fd5b346703782dace9d90000836112cc9190612e61565b111561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490612f9b565b60405180910390fd5b6113178183611b26565b5050565b611323611779565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611387576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060095f611393611779565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661143c611779565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161148191906121f4565b60405180910390a35050565b611498848484611784565b50505050565b60045481565b6703782dace9d9000081565b60606114bb82611695565b6114f1576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600180546114ff906129f5565b80601f016020809104026020016040519081016040528092919081815260200182805461152b906129f5565b80156115765780601f1061154d57610100808354040283529160200191611576565b820191905f5260205f20905b81548152906001019060200180831161155957829003601f168201915b505050505090505f8151036115995760405180602001604052805f8152506115c4565b806115a384611ced565b6040516020016115b49291906130d1565b6040516020818303038152906040525b915050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600c8181548110611669575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8161169f611780565b111580156116ae575060055482105b9050919050565b5f80829050806116c3611780565b1161174257600554811015611741575f60065f8381526020019081526020015f205490505f7c010000000000000000000000000000000000000000000000000000000082160361173f575b5f81036117355760065f836001900393508381526020019081526020015f2054905061170e565b8092505050611774565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f33905090565b5f90565b5f61179082606461087e565b9050604681101580156117a65750612328600a54105b156117c8575f92506001600a5f8282546117c0919061292d565b925050819055505b5f6117d2836116b5565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611839576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8673ffffffffffffffffffffffffffffffffffffffff1661188d611779565b73ffffffffffffffffffffffffffffffffffffffff1614806118bc57506118bb876118b6611779565b6115cc565b5b806118f957506118ca611779565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080611932576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61193c83611ccf565b146119755760085f8681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b611a3688611ccf565b171760065f8781526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000841603611ab5575f6001860190505f60065f8381526020019081526020015f205403611ab3576005548114611ab2578360065f8381526020019081526020015f20819055505b5b505b848673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b1d8787876001611d47565b50505050505050565b5f60055490505f8203611b65576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160406001901b17820260075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555060e1611bc760018414611fbc565b901b60a042901b611bd785611ccf565b171760065f8381526020019081526020015f20819055505f8190505f83820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210611bf957816005819055505050611c765f848385611d47565b505050565b5f67ffffffffffffffff604060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054901c169050919050565b5f819050919050565b5f8183611ce59190612895565b905092915050565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b8015611d3357600183039250600a81066030018353600a81049050611d13565b508181036020830392508083525050919050565b5f339050600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611dab57506032611da88261108d565b10155b15611e66576001600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611ec457506032611ec28261108d565b105b15611fb5575f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b600c80549050811015611fb3578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110611f5757611f5661211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fa657611fa5600c82611fc5565b5b8080600101915050611f1f565b505b5050505050565b5f819050919050565b8082805490501161200b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120029061315f565b60405180910390fd5b5f8190505b600183805490506120219190612800565b8110156120d45782600182612036919061292d565b815481106120475761204661211c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815481106120825761208161211c565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612010565b50818054806120e6576120e561317d565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61218e8161215a565b8114612198575f80fd5b50565b5f813590506121a981612185565b92915050565b5f602082840312156121c4576121c3612152565b5b5f6121d18482850161219b565b91505092915050565b5f8115159050919050565b6121ee816121da565b82525050565b5f6020820190506122075f8301846121e5565b92915050565b5f819050919050565b61221f8161220d565b8114612229575f80fd5b50565b5f8135905061223a81612216565b92915050565b5f806040838503121561225657612255612152565b5b5f6122638582860161222c565b92505060206122748582860161222c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6122c08261227e565b6122ca8185612288565b93506122da818560208601612298565b6122e3816122a6565b840191505092915050565b5f6020820190508181035f83015261230681846122b6565b905092915050565b5f6020828403121561232357612322612152565b5b5f6123308482850161222c565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61236282612339565b9050919050565b61237281612358565b82525050565b5f60208201905061238b5f830184612369565b92915050565b61239a81612358565b81146123a4575f80fd5b50565b5f813590506123b581612391565b92915050565b5f80604083850312156123d1576123d0612152565b5b5f6123de858286016123a7565b92505060206123ef8582860161222c565b9150509250929050565b6124028161220d565b82525050565b5f60208201905061241b5f8301846123f9565b92915050565b5f805f6060848603121561243857612437612152565b5b5f612445868287016123a7565b9350506020612456868287016123a7565b92505060406124678682870161222c565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124af826122a6565b810181811067ffffffffffffffff821117156124ce576124cd612479565b5b80604052505050565b5f6124e0612149565b90506124ec82826124a6565b919050565b5f67ffffffffffffffff82111561250b5761250a612479565b5b612514826122a6565b9050602081019050919050565b828183375f83830152505050565b5f61254161253c846124f1565b6124d7565b90508281526020810184848401111561255d5761255c612475565b5b612568848285612521565b509392505050565b5f82601f83011261258457612583612471565b5b813561259484826020860161252f565b91505092915050565b5f602082840312156125b2576125b1612152565b5b5f82013567ffffffffffffffff8111156125cf576125ce612156565b5b6125db84828501612570565b91505092915050565b5f602082840312156125f9576125f8612152565b5b5f612606848285016123a7565b91505092915050565b612618816121da565b8114612622575f80fd5b50565b5f813590506126338161260f565b92915050565b5f806040838503121561264f5761264e612152565b5b5f61265c858286016123a7565b925050602061266d85828601612625565b9150509250929050565b5f67ffffffffffffffff82111561269157612690612479565b5b61269a826122a6565b9050602081019050919050565b5f6126b96126b484612677565b6124d7565b9050828152602081018484840111156126d5576126d4612475565b5b6126e0848285612521565b509392505050565b5f82601f8301126126fc576126fb612471565b5b813561270c8482602086016126a7565b91505092915050565b5f805f806080858703121561272d5761272c612152565b5b5f61273a878288016123a7565b945050602061274b878288016123a7565b935050604061275c8782880161222c565b925050606085013567ffffffffffffffff81111561277d5761277c612156565b5b612789878288016126e8565b91505092959194509250565b5f80604083850312156127ab576127aa612152565b5b5f6127b8858286016123a7565b92505060206127c9858286016123a7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61280a8261220d565b91506128158361220d565b925082820390508181111561282d5761282c6127d3565b5b92915050565b5f6060820190506128465f8301866123f9565b6128536020830185612369565b61286060408301846123f9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61289f8261220d565b91506128aa8361220d565b9250826128ba576128b9612868565b5b828206905092915050565b7f6e6f74204f776e657200000000000000000000000000000000000000000000005f82015250565b5f6128f9600983612288565b9150612904826128c5565b602082019050919050565b5f6020820190508181035f830152612926816128ed565b9050919050565b5f6129378261220d565b91506129428361220d565b925082820190508082111561295a576129596127d3565b5b92915050565b7f55736564206f6e6c79204f6e63650000000000000000000000000000000000005f82015250565b5f612994600e83612288565b915061299f82612960565b602082019050919050565b5f6020820190508181035f8301526129c181612988565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a0c57607f821691505b602082108103612a1f57612a1e6129c8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612a817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a46565b612a8b8683612a46565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612ac6612ac1612abc8461220d565b612aa3565b61220d565b9050919050565b5f819050919050565b612adf83612aac565b612af3612aeb82612acd565b848454612a52565b825550505050565b5f90565b612b07612afb565b612b12818484612ad6565b505050565b5b81811015612b3557612b2a5f82612aff565b600181019050612b18565b5050565b601f821115612b7a57612b4b81612a25565b612b5484612a37565b81016020851015612b63578190505b612b77612b6f85612a37565b830182612b17565b50505b505050565b5f82821c905092915050565b5f612b9a5f1984600802612b7f565b1980831691505092915050565b5f612bb28383612b8b565b9150826002028217905092915050565b612bcb8261227e565b67ffffffffffffffff811115612be457612be3612479565b5b612bee82546129f5565b612bf9828285612b39565b5f60209050601f831160018114612c2a575f8415612c18578287015190505b612c228582612ba7565b865550612c89565b601f198416612c3886612a25565b5f5b82811015612c5f57848901518255600182019150602085019450602081019050612c3a565b86831015612c7c5784890151612c78601f891682612b8b565b8355505b6001600288020188555050505b505050505050565b7f6e6f2053637269707400000000000000000000000000000000000000000000005f82015250565b5f612cc5600983612288565b9150612cd082612c91565b602082019050919050565b5f6020820190508181035f830152612cf281612cb9565b9050919050565b7f6e6f7420616b74697665000000000000000000000000000000000000000000005f82015250565b5f612d2d600a83612288565b9150612d3882612cf9565b602082019050919050565b5f6020820190508181035f830152612d5a81612d21565b9050919050565b7f467265656d696e7420536f6c64204f75740000000000000000000000000000005f82015250565b5f612d95601183612288565b9150612da082612d61565b602082019050919050565b5f6020820190508181035f830152612dc281612d89565b9050919050565b7f4d6178207065722057616c6c65740000000000000000000000000000000000005f82015250565b5f612dfd600e83612288565b9150612e0882612dc9565b602082019050919050565b5f6020820190508181035f830152612e2a81612df1565b9050919050565b5f612e3b8261220d565b9150612e468361220d565b925082612e5657612e55612868565b5b828204905092915050565b5f612e6b8261220d565b9150612e768361220d565b9250828202612e848161220d565b91508282048414831517612e9b57612e9a6127d3565b5b5092915050565b5f612eac8261220d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ede57612edd6127d3565b5b600182019050919050565b7f536f6c64204f75740000000000000000000000000000000000000000000000005f82015250565b5f612f1d600883612288565b9150612f2882612ee9565b602082019050919050565b5f6020820190508181035f830152612f4a81612f11565b9050919050565b7f56616c756520746f204c6f7700000000000000000000000000000000000000005f82015250565b5f612f85600c83612288565b9150612f9082612f51565b602082019050919050565b5f6020820190508181035f830152612fb281612f79565b9050919050565b5f81905092915050565b7f697066733a2f2f000000000000000000000000000000000000000000000000005f82015250565b5f612ff7600783612fb9565b915061300282612fc3565b600782019050919050565b5f6130178261227e565b6130218185612fb9565b9350613031818560208601612298565b80840191505092915050565b7f2f000000000000000000000000000000000000000000000000000000000000005f82015250565b5f613071600183612fb9565b915061307c8261303d565b600182019050919050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6130bb600583612fb9565b91506130c682613087565b600582019050919050565b5f6130db82612feb565b91506130e7828561300d565b91506130f282613065565b91506130fe828461300d565b9150613109826130af565b91508190509392505050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f613149600d83612288565b915061315482613115565b602082019050919050565b5f6020820190508181035f8301526131768161313d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220978e9396af56226471a455b34617b334e5fca8cfb8520d46502b4876bb7302a664736f6c634300081a0033
Deployed Bytecode Sourcemap
16454:23813:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34987:14;35004:5;35010:37;35031:1;35034:5;:12;;;;35010:20;:37::i;:::-;35004:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34987:61;;35059:20;35090:6;35059:38;;35108:4;:13;;:24;35122:9;35108:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16454:23813;35186:14;35203:5;35209:37;35230:1;35233:5;:12;;;;35209:20;:37::i;:::-;35203:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35186:61;;35258:20;35289:6;35258:38;;35307:4;:13;;:24;35321:9;35307:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22058:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20555:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26265:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27932:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27415:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21301:300;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28818:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39743:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16645:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40119:145;;;;;;;;;;;;;:::i;:::-;;29079:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20456:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17015:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17386:454;;;;;;;;;;;;;:::i;:::-;;39427:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26054:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22737:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17883:311;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16983:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16560:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32147:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26434:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16694:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17111:267;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28208:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29355:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17848:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16749:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26552:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28587:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32193:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39427:308;39508:7;39528:19;39565:1;39550:12;:16;;;;:::i;:::-;39528:38;;39610:17;39651:11;39664:10;39676:7;39640:44;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39630:55;;;;;;39610:75;;39724:3;39711:9;39703:18;;:24;;;;:::i;:::-;39696:31;;;;39427:308;;;;:::o;22058:615::-;22143:4;22458:10;22443:25;;:11;:25;;;;:102;;;;22535:10;22520:25;;:11;:25;;;;22443:102;:179;;;;22612:10;22597:25;;:11;:25;;;;22443:179;22423:199;;22058:615;;;:::o;20555:126::-;39969:10;39961:18;;:6;;;;;;;;;;:18;;;39953:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;20642:6:::1;20635;:13;;;;20667:6;20659:5;:14;;;;20555:126:::0;;:::o;26265:100::-;26319:13;26352:5;;;;;;;;;;;;;;;;;26345:12;;26265:100;:::o;27932:204::-;28000:7;28025:16;28033:7;28025;:16::i;:::-;28020:64;;28050:34;;;;;;;;;;;;;;28020:64;28104:15;:24;28120:7;28104:24;;;;;;;;;;;;;;;;;;;;;28097:31;;27932:204;;;:::o;27415:451::-;27488:13;27520:27;27539:7;27520:18;:27::i;:::-;27488:61;;27570:5;27564:11;;:2;:11;;;27560:25;;27577:8;;;27560:25;27625:5;27602:28;;:19;:17;:19::i;:::-;:28;;;27598:175;;27650:44;27667:5;27674:19;:17;:19::i;:::-;27650:16;:44::i;:::-;27645:128;;27722:35;;;;;;;;;;;;;;27645:128;27598:175;27812:2;27785:15;:24;27801:7;27785:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27850:7;27846:2;27830:28;;27839:5;27830:28;;;;;;;;;;;;27477:389;27415:451;;:::o;21301:300::-;21354:7;21567:15;:13;:15::i;:::-;21551:13;;:31;21544:38;;21301:300;:::o;28818:190::-;28972:28;28982:4;28988:2;28992:7;28972:9;:28::i;:::-;28818:190;;;:::o;39743:169::-;39969:10;39961:18;;:6;;;;;;;;;;:18;;;39953:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;16682:5:::1;39830:6;39814:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;39806:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39879:25;39885:10;39897:6;39879:5;:25::i;:::-;39743:169:::0;:::o;16645:42::-;16682:5;16645:42;:::o;40119:145::-;39969:10;39961:18;;:6;;;;;;;;;;:18;;;39953:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40169:15:::1;40187:21;40169:39;;40227:10;40219:28;;:37;40248:7;40219:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40158:106;40119:145::o:0;29079:205::-;29237:39;29254:4;29260:2;29264:7;29237:39;;;;;;;;;;;;:16;:39::i;:::-;29079:205;;;:::o;20456:91::-;39969:10;39961:18;;:6;;;;;;;;;;:18;;;39953:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;20534:5:::1;20523:8;:16;;;;;;:::i;:::-;;20456:91:::0;:::o;17015:27::-;;;;:::o;17386:454::-;40067:10;40056:21;;:9;:21;;;40048:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;17429:15:::1;17447:19;:17;:19::i;:::-;17429:37;;17477:14;16740:2;17477:36;;17542:1;17534:6;;:9;17526:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;16682:5;17593:6;17577:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;17569:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;16740:2;17663:22;17677:7;17663:13;:22::i;:::-;17654:6;:31;;;;:::i;:::-;:54;;17646:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17757:2;17743:13;:11;:13::i;:::-;:16;17740:58;;;17775:11;:9;:11::i;:::-;;17740:58;17810:22;17816:7;17825:6;17810:5;:22::i;:::-;17418:422;;17386:454::o:0;26054:144::-;26118:7;26161:27;26180:7;26161:18;:27::i;:::-;26138:52;;26054:144;;;:::o;22737:234::-;22801:7;22853:1;22825:24;22843:5;22825:17;:24::i;:::-;:29;22821:70;;22863:28;;;;;;;;;;;;;;22821:70;18307:13;22909:18;:25;22928:5;22909:25;;;;;;;;;;;;;;;;:54;22902:61;;22737:234;;;:::o;17883:311::-;17920:7;17944:8;17980:1;17970:9;;:11;;;;:::i;:::-;17966:1;17956:9;;:11;;;;:::i;:::-;:25;;;;:::i;:::-;17944:38;;17939:251;17990:5;;17984:3;:11;17939:251;;;18015:6;18024:1;18015:10;;18010:175;18036:3;18031:1;18027;:5;;;;:::i;:::-;:12;18010:175;;18068:1;18056:10;18064:1;18056:3;:7;;:10;;;;:::i;:::-;:13;18052:127;18085:8;18052:127;18119:9;;18115:3;:13;18112:67;;;18150:3;18138:9;:15;;;;18168:3;18161:10;;;;;;18112:67;18010:175;18041:3;;;;;:::i;:::-;;;;18010:175;;;;17997:5;;;;;;;17939:251;;;;17883:311;;:::o;16983:25::-;;;;:::o;16560:77::-;16597:7;16623:6;;;;;;;;;;;16616:13;;16560:77;:::o;32147:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;26434:104::-;26490:13;26523:7;;;;;;;;;;;;;;;;;26516:14;;26434:104;:::o;16694:48::-;16740:2;16694:48;:::o;17111:267::-;17168:15;17186:19;:17;:19::i;:::-;17168:37;;16682:5;17242:6;17226:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;17218:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;17309:9;16780:10;17294:6;:11;;;;:::i;:::-;:24;;17286:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17348:22;17354:7;17363:6;17348:5;:22::i;:::-;17157:221;17111:267;:::o;28208:308::-;28319:19;:17;:19::i;:::-;28307:31;;:8;:31;;;28303:61;;28347:17;;;;;;;;;;;;;;28303:61;28429:8;28377:18;:39;28396:19;:17;:19::i;:::-;28377:39;;;;;;;;;;;;;;;:49;28417:8;28377:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;28489:8;28453:55;;28468:19;:17;:19::i;:::-;28453:55;;;28499:8;28453:55;;;;;;:::i;:::-;;;;;;;;28208:308;;:::o;29355:227::-;29546:28;29556:4;29562:2;29566:7;29546:9;:28::i;:::-;29355:227;;;;:::o;17848:31::-;;;;:::o;16749:41::-;16780:10;16749:41;:::o;26552:339::-;26625:13;26656:16;26664:7;26656;:16::i;:::-;26651:59;;26681:29;;;;;;;;;;;;;;26651:59;26721:21;26745:8;26721:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26796:1;26777:7;26771:21;:26;:112;;;;;;;;;;;;;;;;;26835:7;26849:18;26859:7;26849:9;:18::i;:::-;26807:70;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26771:112;26764:119;;;26552:339;;;:::o;28587:164::-;28684:4;28708:18;:25;28727:5;28708:25;;;;;;;;;;;;;;;:35;28734:8;28708:35;;;;;;;;;;;;;;;;;;;;;;;;;28701:42;;28587:164;;;;:::o;32193:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29837:168::-;29894:4;29950:7;29931:15;:13;:15::i;:::-;:26;;:66;;;;;29984:13;;29974:7;:23;29931:66;29911:86;;29837:168;;;:::o;23569:1129::-;23636:7;23656:12;23671:7;23656:22;;23739:4;23720:15;:13;:15::i;:::-;:23;23716:915;;23773:13;;23766:4;:20;23762:869;;;23811:14;23828:17;:23;23846:4;23828:23;;;;;;;;;;;;23811:40;;23944:1;19077:8;23917:6;:23;:28;23913:699;;24436:113;24453:1;24443:6;:11;24436:113;;24496:17;:25;24514:6;;;;;;;24496:25;;;;;;;;;;;;24487:34;;24436:113;;;24582:6;24575:13;;;;;;23913:699;23788:843;23762:869;23716:915;24659:31;;;;;;;;;;;;;;23569:1129;;;;:::o;37326:105::-;37386:7;37413:10;37406:17;;37326:105;:::o;20824:92::-;20880:7;20824:92;:::o;32222:2720::-;32359:9;32371:34;32392:7;32401:3;32371:20;:34::i;:::-;32359:46;;32423:2;32420:1;:5;;:22;;;;;32438:4;32429:6;;:13;32420:22;32416:94;;;32472:1;32459:15;;32497:1;32489:6;;:9;;;;;;;:::i;:::-;;;;;;;;32416:94;32522:27;32552;32571:7;32552:18;:27::i;:::-;32522:57;;32637:4;32596:45;;32612:19;32596:45;;;32592:86;;32650:28;;;;;;;;;;;;;;32592:86;32691:23;32717:15;:24;32733:7;32717:24;;;;;;;;;;;;;;;;;;;;;32691:50;;32754:22;32803:4;32780:27;;:19;:17;:19::i;:::-;:27;;;:91;;;;32828:43;32845:4;32851:19;:17;:19::i;:::-;32828:16;:43::i;:::-;32780:91;:150;;;;32911:19;:17;:19::i;:::-;32892:38;;:15;:38;;;32780:150;32754:177;;32949:17;32944:66;;32975:35;;;;;;;;;;;;;;32944:66;33120:1;33082:34;33100:15;33082:17;:34::i;:::-;:39;33078:103;;33145:15;:24;33161:7;33145:24;;;;;;;;;;;;33138:31;;;;;;;;;;;33078:103;33548:18;:24;33567:4;33548:24;;;;;;;;;;;;;;;;33546:26;;;;;;;;;;;;33617:18;:22;33636:2;33617:22;;;;;;;;;;;;;;;;33615:24;;;;;;;;;;;19355:8;18961:3;33998:15;:41;;33956:21;33974:2;33956:17;:21::i;:::-;:84;:128;33910:17;:26;33928:7;33910:26;;;;;;;;;;;:174;;;;34254:1;19355:8;34204:19;:46;:51;34200:626;;34276:19;34308:1;34298:7;:11;34276:33;;34465:1;34431:17;:30;34449:11;34431:30;;;;;;;;;;;;:35;34427:384;;34569:13;;34554:11;:28;34550:242;;34749:19;34716:17;:30;34734:11;34716:30;;;;;;;;;;;:52;;;;34550:242;34427:384;34257:569;34200:626;34873:7;34869:2;34854:27;;34863:4;34854:27;;;;;;;;;;;;34892:42;34913:4;34919:2;34923:7;34932:1;34892:20;:42::i;:::-;32346:2596;;;;32222:2720;;;:::o;30270:1596::-;30335:20;30358:13;;30335:36;;30469:1;30457:8;:13;30453:44;;30479:18;;;;;;;;;;;;;;30453:44;31042:1;18444:2;31013:1;:25;;31012:31;31000:8;:44;30974:18;:22;30993:2;30974:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;19220:3;31443:29;31470:1;31458:8;:13;31443:14;:29::i;:::-;:56;;18961:3;31380:15;:41;;31338:21;31356:2;31338:17;:21::i;:::-;:84;:162;31287:17;:31;31305:12;31287:31;;;;;;;;;;;:213;;;;31517:20;31540:12;31517:35;;31567:11;31596:8;31581:12;:23;31567:37;;31621:111;31673:14;;;;;;31669:2;31648:40;;31665:1;31648:40;;;;;;;;;;;;31727:3;31712:12;:18;31621:111;;31764:12;31748:13;:28;;;;30751:1037;;31798:60;31827:1;31831:2;31835:12;31849:8;31798:20;:60::i;:::-;30324:1542;30270:1596;;:::o;23053:176::-;23114:7;18307:13;18444:2;23142:18;:25;23161:5;23142:25;;;;;;;;;;;;;;;;:49;;23141:80;23134:87;;23053:176;;;:::o;26976:148::-;27040:14;27101:5;27091:15;;26976:148;;;:::o;13989:98::-;14047:7;14078:1;14074;:5;;;;:::i;:::-;14067:12;;13989:98;;;;:::o;37537:1882::-;37594:17;38015:3;38008:4;38002:11;37998:21;37991:28;;38102:3;38096:4;38089:17;38202:3;38638:5;38770:1;38765:3;38761:11;38754:18;;38909:2;38903:4;38899:13;38895:2;38891:22;38886:3;38878:36;38951:2;38945:4;38941:13;38933:21;;38535:661;38967:4;38535:661;;;39135:1;39130:3;39126:11;39119:18;;39179:2;39173:4;39169:13;39165:2;39161:22;39156:3;39148:36;39052:2;39046:4;39042:13;39034:21;;38535:661;;;38539:427;39228:3;39223;39219:13;39337:2;39332:3;39328:12;39321:19;;39394:6;39389:3;39382:19;37633:1779;;37537:1882;;;:::o;36368:753::-;36567:15;36585:10;36567:28;;36619:7;:16;36627:7;36619:16;;;;;;;;;;;;;;;;;;;;;;;;;36618:17;:43;;;;;36659:2;36639:18;36649:7;36639:9;:18::i;:::-;:22;;36618:43;36614:156;;;36704:4;36685:7;:16;36693:7;36685:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36731:5;36742:7;36731:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36614:156;36792:7;:16;36800:7;36792:16;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;36831:2;36812:18;36822:7;36812:9;:18::i;:::-;:21;36792:41;36788:318;;;36876:5;36857:7;:16;36865:7;36857:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;36908:6;36904:183;36922:5;:12;;;;36918:1;:16;36904:183;;;36981:7;36971:17;;:5;36977:1;36971:8;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:17;;;36967:97;;37020:16;37027:5;37034:1;37020:6;:16::i;:::-;36967:97;36936:3;;;;;;;36904:183;;;;36788:318;36548:573;36368:753;;;;:::o;27211:142::-;27269:14;27330:5;27320:15;;27211:142;;;:::o;36002:358::-;36101:5;36086;:12;;;;:20;36078:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36213:9;36225:5;36213:17;;36208:99;36251:1;36236:5;:12;;;;:16;;;;:::i;:::-;36232:1;:20;36208:99;;;36285:5;36293:1;36291;:3;;;;:::i;:::-;36285:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36274:5;36280:1;36274:8;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36254:3;;;;;;;36208:99;;;;36317:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;36002:358;;:::o;7:180:1:-;55:77;52:1;45:88;152:4;149:1;142:15;176:4;173:1;166:15;193:75;226:6;259:2;253:9;243:19;;193:75;:::o;274:117::-;383:1;380;373:12;397:117;506:1;503;496:12;520:149;556:7;596:66;589:5;585:78;574:89;;520:149;;;:::o;675:120::-;747:23;764:5;747:23;:::i;:::-;740:5;737:34;727:62;;785:1;782;775:12;727:62;675:120;:::o;801:137::-;846:5;884:6;871:20;862:29;;900:32;926:5;900:32;:::i;:::-;801:137;;;;:::o;944:327::-;1002:6;1051:2;1039:9;1030:7;1026:23;1022:32;1019:119;;;1057:79;;:::i;:::-;1019:119;1177:1;1202:52;1246:7;1237:6;1226:9;1222:22;1202:52;:::i;:::-;1192:62;;1148:116;944:327;;;;:::o;1277:90::-;1311:7;1354:5;1347:13;1340:21;1329:32;;1277:90;;;:::o;1373:109::-;1454:21;1469:5;1454:21;:::i;:::-;1449:3;1442:34;1373:109;;:::o;1488:210::-;1575:4;1613:2;1602:9;1598:18;1590:26;;1626:65;1688:1;1677:9;1673:17;1664:6;1626:65;:::i;:::-;1488:210;;;;:::o;1704:77::-;1741:7;1770:5;1759:16;;1704:77;;;:::o;1787:122::-;1860:24;1878:5;1860:24;:::i;:::-;1853:5;1850:35;1840:63;;1899:1;1896;1889:12;1840:63;1787:122;:::o;1915:139::-;1961:5;1999:6;1986:20;1977:29;;2015:33;2042:5;2015:33;:::i;:::-;1915:139;;;;:::o;2060:474::-;2128:6;2136;2185:2;2173:9;2164:7;2160:23;2156:32;2153:119;;;2191:79;;:::i;:::-;2153:119;2311:1;2336:53;2381:7;2372:6;2361:9;2357:22;2336:53;:::i;:::-;2326:63;;2282:117;2438:2;2464:53;2509:7;2500:6;2489:9;2485:22;2464:53;:::i;:::-;2454:63;;2409:118;2060:474;;;;;:::o;2540:99::-;2592:6;2626:5;2620:12;2610:22;;2540:99;;;:::o;2645:169::-;2729:11;2763:6;2758:3;2751:19;2803:4;2798:3;2794:14;2779:29;;2645:169;;;;:::o;2820:139::-;2909:6;2904:3;2899;2893:23;2950:1;2941:6;2936:3;2932:16;2925:27;2820:139;;;:::o;2965:102::-;3006:6;3057:2;3053:7;3048:2;3041:5;3037:14;3033:28;3023:38;;2965:102;;;:::o;3073:377::-;3161:3;3189:39;3222:5;3189:39;:::i;:::-;3244:71;3308:6;3303:3;3244:71;:::i;:::-;3237:78;;3324:65;3382:6;3377:3;3370:4;3363:5;3359:16;3324:65;:::i;:::-;3414:29;3436:6;3414:29;:::i;:::-;3409:3;3405:39;3398:46;;3165:285;3073:377;;;;:::o;3456:313::-;3569:4;3607:2;3596:9;3592:18;3584:26;;3656:9;3650:4;3646:20;3642:1;3631:9;3627:17;3620:47;3684:78;3757:4;3748:6;3684:78;:::i;:::-;3676:86;;3456:313;;;;:::o;3775:329::-;3834:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:119;;;3889:79;;:::i;:::-;3851:119;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;3775:329;;;;:::o;4110:126::-;4147:7;4187:42;4180:5;4176:54;4165:65;;4110:126;;;:::o;4242:96::-;4279:7;4308:24;4326:5;4308:24;:::i;:::-;4297:35;;4242:96;;;:::o;4344:118::-;4431:24;4449:5;4431:24;:::i;:::-;4426:3;4419:37;4344:118;;:::o;4468:222::-;4561:4;4599:2;4588:9;4584:18;4576:26;;4612:71;4680:1;4669:9;4665:17;4656:6;4612:71;:::i;:::-;4468:222;;;;:::o;4696:122::-;4769:24;4787:5;4769:24;:::i;:::-;4762:5;4759:35;4749:63;;4808:1;4805;4798:12;4749:63;4696:122;:::o;4824:139::-;4870:5;4908:6;4895:20;4886:29;;4924:33;4951:5;4924:33;:::i;:::-;4824:139;;;;:::o;4969:474::-;5037:6;5045;5094:2;5082:9;5073:7;5069:23;5065:32;5062:119;;;5100:79;;:::i;:::-;5062:119;5220:1;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5191:117;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4969:474;;;;;:::o;5449:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:619::-;5878:6;5886;5894;5943:2;5931:9;5922:7;5918:23;5914:32;5911:119;;;5949:79;;:::i;:::-;5911:119;6069:1;6094:53;6139:7;6130:6;6119:9;6115:22;6094:53;:::i;:::-;6084:63;;6040:117;6196:2;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6167:118;6324:2;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6295:118;5801:619;;;;;:::o;6426:117::-;6535:1;6532;6525:12;6549:117;6658:1;6655;6648:12;6672:180;6720:77;6717:1;6710:88;6817:4;6814:1;6807:15;6841:4;6838:1;6831:15;6858:281;6941:27;6963:4;6941:27;:::i;:::-;6933:6;6929:40;7071:6;7059:10;7056:22;7035:18;7023:10;7020:34;7017:62;7014:88;;;7082:18;;:::i;:::-;7014:88;7122:10;7118:2;7111:22;6901:238;6858:281;;:::o;7145:129::-;7179:6;7206:20;;:::i;:::-;7196:30;;7235:33;7263:4;7255:6;7235:33;:::i;:::-;7145:129;;;:::o;7280:308::-;7342:4;7432:18;7424:6;7421:30;7418:56;;;7454:18;;:::i;:::-;7418:56;7492:29;7514:6;7492:29;:::i;:::-;7484:37;;7576:4;7570;7566:15;7558:23;;7280:308;;;:::o;7594:148::-;7692:6;7687:3;7682;7669:30;7733:1;7724:6;7719:3;7715:16;7708:27;7594:148;;;:::o;7748:425::-;7826:5;7851:66;7867:49;7909:6;7867:49;:::i;:::-;7851:66;:::i;:::-;7842:75;;7940:6;7933:5;7926:21;7978:4;7971:5;7967:16;8016:3;8007:6;8002:3;7998:16;7995:25;7992:112;;;8023:79;;:::i;:::-;7992:112;8113:54;8160:6;8155:3;8150;8113:54;:::i;:::-;7832:341;7748:425;;;;;:::o;8193:340::-;8249:5;8298:3;8291:4;8283:6;8279:17;8275:27;8265:122;;8306:79;;:::i;:::-;8265:122;8423:6;8410:20;8448:79;8523:3;8515:6;8508:4;8500:6;8496:17;8448:79;:::i;:::-;8439:88;;8255:278;8193:340;;;;:::o;8539:509::-;8608:6;8657:2;8645:9;8636:7;8632:23;8628:32;8625:119;;;8663:79;;:::i;:::-;8625:119;8811:1;8800:9;8796:17;8783:31;8841:18;8833:6;8830:30;8827:117;;;8863:79;;:::i;:::-;8827:117;8968:63;9023:7;9014:6;9003:9;8999:22;8968:63;:::i;:::-;8958:73;;8754:287;8539:509;;;;:::o;9054:329::-;9113:6;9162:2;9150:9;9141:7;9137:23;9133:32;9130:119;;;9168:79;;:::i;:::-;9130:119;9288:1;9313:53;9358:7;9349:6;9338:9;9334:22;9313:53;:::i;:::-;9303:63;;9259:117;9054:329;;;;:::o;9389:116::-;9459:21;9474:5;9459:21;:::i;:::-;9452:5;9449:32;9439:60;;9495:1;9492;9485:12;9439:60;9389:116;:::o;9511:133::-;9554:5;9592:6;9579:20;9570:29;;9608:30;9632:5;9608:30;:::i;:::-;9511:133;;;;:::o;9650:468::-;9715:6;9723;9772:2;9760:9;9751:7;9747:23;9743:32;9740:119;;;9778:79;;:::i;:::-;9740:119;9898:1;9923:53;9968:7;9959:6;9948:9;9944:22;9923:53;:::i;:::-;9913:63;;9869:117;10025:2;10051:50;10093:7;10084:6;10073:9;10069:22;10051:50;:::i;:::-;10041:60;;9996:115;9650:468;;;;;:::o;10124:307::-;10185:4;10275:18;10267:6;10264:30;10261:56;;;10297:18;;:::i;:::-;10261:56;10335:29;10357:6;10335:29;:::i;:::-;10327:37;;10419:4;10413;10409:15;10401:23;;10124:307;;;:::o;10437:423::-;10514:5;10539:65;10555:48;10596:6;10555:48;:::i;:::-;10539:65;:::i;:::-;10530:74;;10627:6;10620:5;10613:21;10665:4;10658:5;10654:16;10703:3;10694:6;10689:3;10685:16;10682:25;10679:112;;;10710:79;;:::i;:::-;10679:112;10800:54;10847:6;10842:3;10837;10800:54;:::i;:::-;10520:340;10437:423;;;;;:::o;10879:338::-;10934:5;10983:3;10976:4;10968:6;10964:17;10960:27;10950:122;;10991:79;;:::i;:::-;10950:122;11108:6;11095:20;11133:78;11207:3;11199:6;11192:4;11184:6;11180:17;11133:78;:::i;:::-;11124:87;;10940:277;10879:338;;;;:::o;11223:943::-;11318:6;11326;11334;11342;11391:3;11379:9;11370:7;11366:23;11362:33;11359:120;;;11398:79;;:::i;:::-;11359:120;11518:1;11543:53;11588:7;11579:6;11568:9;11564:22;11543:53;:::i;:::-;11533:63;;11489:117;11645:2;11671:53;11716:7;11707:6;11696:9;11692:22;11671:53;:::i;:::-;11661:63;;11616:118;11773:2;11799:53;11844:7;11835:6;11824:9;11820:22;11799:53;:::i;:::-;11789:63;;11744:118;11929:2;11918:9;11914:18;11901:32;11960:18;11952:6;11949:30;11946:117;;;11982:79;;:::i;:::-;11946:117;12087:62;12141:7;12132:6;12121:9;12117:22;12087:62;:::i;:::-;12077:72;;11872:287;11223:943;;;;;;;:::o;12172:474::-;12240:6;12248;12297:2;12285:9;12276:7;12272:23;12268:32;12265:119;;;12303:79;;:::i;:::-;12265:119;12423:1;12448:53;12493:7;12484:6;12473:9;12469:22;12448:53;:::i;:::-;12438:63;;12394:117;12550:2;12576:53;12621:7;12612:6;12601:9;12597:22;12576:53;:::i;:::-;12566:63;;12521:118;12172:474;;;;;:::o;12652:180::-;12700:77;12697:1;12690:88;12797:4;12794:1;12787:15;12821:4;12818:1;12811:15;12838:194;12878:4;12898:20;12916:1;12898:20;:::i;:::-;12893:25;;12932:20;12950:1;12932:20;:::i;:::-;12927:25;;12976:1;12973;12969:9;12961:17;;13000:1;12994:4;12991:11;12988:37;;;13005:18;;:::i;:::-;12988:37;12838:194;;;;:::o;13038:442::-;13187:4;13225:2;13214:9;13210:18;13202:26;;13238:71;13306:1;13295:9;13291:17;13282:6;13238:71;:::i;:::-;13319:72;13387:2;13376:9;13372:18;13363:6;13319:72;:::i;:::-;13401;13469:2;13458:9;13454:18;13445:6;13401:72;:::i;:::-;13038:442;;;;;;:::o;13486:180::-;13534:77;13531:1;13524:88;13631:4;13628:1;13621:15;13655:4;13652:1;13645:15;13672:176;13704:1;13721:20;13739:1;13721:20;:::i;:::-;13716:25;;13755:20;13773:1;13755:20;:::i;:::-;13750:25;;13794:1;13784:35;;13799:18;;:::i;:::-;13784:35;13840:1;13837;13833:9;13828:14;;13672:176;;;;:::o;13854:159::-;13994:11;13990:1;13982:6;13978:14;13971:35;13854:159;:::o;14019:365::-;14161:3;14182:66;14246:1;14241:3;14182:66;:::i;:::-;14175:73;;14257:93;14346:3;14257:93;:::i;:::-;14375:2;14370:3;14366:12;14359:19;;14019:365;;;:::o;14390:419::-;14556:4;14594:2;14583:9;14579:18;14571:26;;14643:9;14637:4;14633:20;14629:1;14618:9;14614:17;14607:47;14671:131;14797:4;14671:131;:::i;:::-;14663:139;;14390:419;;;:::o;14815:191::-;14855:3;14874:20;14892:1;14874:20;:::i;:::-;14869:25;;14908:20;14926:1;14908:20;:::i;:::-;14903:25;;14951:1;14948;14944:9;14937:16;;14972:3;14969:1;14966:10;14963:36;;;14979:18;;:::i;:::-;14963:36;14815:191;;;;:::o;15012:164::-;15152:16;15148:1;15140:6;15136:14;15129:40;15012:164;:::o;15182:366::-;15324:3;15345:67;15409:2;15404:3;15345:67;:::i;:::-;15338:74;;15421:93;15510:3;15421:93;:::i;:::-;15539:2;15534:3;15530:12;15523:19;;15182:366;;;:::o;15554:419::-;15720:4;15758:2;15747:9;15743:18;15735:26;;15807:9;15801:4;15797:20;15793:1;15782:9;15778:17;15771:47;15835:131;15961:4;15835:131;:::i;:::-;15827:139;;15554:419;;;:::o;15979:180::-;16027:77;16024:1;16017:88;16124:4;16121:1;16114:15;16148:4;16145:1;16138:15;16165:320;16209:6;16246:1;16240:4;16236:12;16226:22;;16293:1;16287:4;16283:12;16314:18;16304:81;;16370:4;16362:6;16358:17;16348:27;;16304:81;16432:2;16424:6;16421:14;16401:18;16398:38;16395:84;;16451:18;;:::i;:::-;16395:84;16216:269;16165:320;;;:::o;16491:141::-;16540:4;16563:3;16555:11;;16586:3;16583:1;16576:14;16620:4;16617:1;16607:18;16599:26;;16491:141;;;:::o;16638:93::-;16675:6;16722:2;16717;16710:5;16706:14;16702:23;16692:33;;16638:93;;;:::o;16737:107::-;16781:8;16831:5;16825:4;16821:16;16800:37;;16737:107;;;;:::o;16850:393::-;16919:6;16969:1;16957:10;16953:18;16992:97;17022:66;17011:9;16992:97;:::i;:::-;17110:39;17140:8;17129:9;17110:39;:::i;:::-;17098:51;;17182:4;17178:9;17171:5;17167:21;17158:30;;17231:4;17221:8;17217:19;17210:5;17207:30;17197:40;;16926:317;;16850:393;;;;;:::o;17249:60::-;17277:3;17298:5;17291:12;;17249:60;;;:::o;17315:142::-;17365:9;17398:53;17416:34;17425:24;17443:5;17425:24;:::i;:::-;17416:34;:::i;:::-;17398:53;:::i;:::-;17385:66;;17315:142;;;:::o;17463:75::-;17506:3;17527:5;17520:12;;17463:75;;;:::o;17544:269::-;17654:39;17685:7;17654:39;:::i;:::-;17715:91;17764:41;17788:16;17764:41;:::i;:::-;17756:6;17749:4;17743:11;17715:91;:::i;:::-;17709:4;17702:105;17620:193;17544:269;;;:::o;17819:73::-;17864:3;17819:73;:::o;17898:189::-;17975:32;;:::i;:::-;18016:65;18074:6;18066;18060:4;18016:65;:::i;:::-;17951:136;17898:189;;:::o;18093:186::-;18153:120;18170:3;18163:5;18160:14;18153:120;;;18224:39;18261:1;18254:5;18224:39;:::i;:::-;18197:1;18190:5;18186:13;18177:22;;18153:120;;;18093:186;;:::o;18285:543::-;18386:2;18381:3;18378:11;18375:446;;;18420:38;18452:5;18420:38;:::i;:::-;18504:29;18522:10;18504:29;:::i;:::-;18494:8;18490:44;18687:2;18675:10;18672:18;18669:49;;;18708:8;18693:23;;18669:49;18731:80;18787:22;18805:3;18787:22;:::i;:::-;18777:8;18773:37;18760:11;18731:80;:::i;:::-;18390:431;;18375:446;18285:543;;;:::o;18834:117::-;18888:8;18938:5;18932:4;18928:16;18907:37;;18834:117;;;;:::o;18957:169::-;19001:6;19034:51;19082:1;19078:6;19070:5;19067:1;19063:13;19034:51;:::i;:::-;19030:56;19115:4;19109;19105:15;19095:25;;19008:118;18957:169;;;;:::o;19131:295::-;19207:4;19353:29;19378:3;19372:4;19353:29;:::i;:::-;19345:37;;19415:3;19412:1;19408:11;19402:4;19399:21;19391:29;;19131:295;;;;:::o;19431:1395::-;19548:37;19581:3;19548:37;:::i;:::-;19650:18;19642:6;19639:30;19636:56;;;19672:18;;:::i;:::-;19636:56;19716:38;19748:4;19742:11;19716:38;:::i;:::-;19801:67;19861:6;19853;19847:4;19801:67;:::i;:::-;19895:1;19919:4;19906:17;;19951:2;19943:6;19940:14;19968:1;19963:618;;;;20625:1;20642:6;20639:77;;;20691:9;20686:3;20682:19;20676:26;20667:35;;20639:77;20742:67;20802:6;20795:5;20742:67;:::i;:::-;20736:4;20729:81;20598:222;19933:887;;19963:618;20015:4;20011:9;20003:6;19999:22;20049:37;20081:4;20049:37;:::i;:::-;20108:1;20122:208;20136:7;20133:1;20130:14;20122:208;;;20215:9;20210:3;20206:19;20200:26;20192:6;20185:42;20266:1;20258:6;20254:14;20244:24;;20313:2;20302:9;20298:18;20285:31;;20159:4;20156:1;20152:12;20147:17;;20122:208;;;20358:6;20349:7;20346:19;20343:179;;;20416:9;20411:3;20407:19;20401:26;20459:48;20501:4;20493:6;20489:17;20478:9;20459:48;:::i;:::-;20451:6;20444:64;20366:156;20343:179;20568:1;20564;20556:6;20552:14;20548:22;20542:4;20535:36;19970:611;;;19933:887;;19523:1303;;;19431:1395;;:::o;20832:159::-;20972:11;20968:1;20960:6;20956:14;20949:35;20832:159;:::o;20997:365::-;21139:3;21160:66;21224:1;21219:3;21160:66;:::i;:::-;21153:73;;21235:93;21324:3;21235:93;:::i;:::-;21353:2;21348:3;21344:12;21337:19;;20997:365;;;:::o;21368:419::-;21534:4;21572:2;21561:9;21557:18;21549:26;;21621:9;21615:4;21611:20;21607:1;21596:9;21592:17;21585:47;21649:131;21775:4;21649:131;:::i;:::-;21641:139;;21368:419;;;:::o;21793:160::-;21933:12;21929:1;21921:6;21917:14;21910:36;21793:160;:::o;21959:366::-;22101:3;22122:67;22186:2;22181:3;22122:67;:::i;:::-;22115:74;;22198:93;22287:3;22198:93;:::i;:::-;22316:2;22311:3;22307:12;22300:19;;21959:366;;;:::o;22331:419::-;22497:4;22535:2;22524:9;22520:18;22512:26;;22584:9;22578:4;22574:20;22570:1;22559:9;22555:17;22548:47;22612:131;22738:4;22612:131;:::i;:::-;22604:139;;22331:419;;;:::o;22756:167::-;22896:19;22892:1;22884:6;22880:14;22873:43;22756:167;:::o;22929:366::-;23071:3;23092:67;23156:2;23151:3;23092:67;:::i;:::-;23085:74;;23168:93;23257:3;23168:93;:::i;:::-;23286:2;23281:3;23277:12;23270:19;;22929:366;;;:::o;23301:419::-;23467:4;23505:2;23494:9;23490:18;23482:26;;23554:9;23548:4;23544:20;23540:1;23529:9;23525:17;23518:47;23582:131;23708:4;23582:131;:::i;:::-;23574:139;;23301:419;;;:::o;23726:164::-;23866:16;23862:1;23854:6;23850:14;23843:40;23726:164;:::o;23896:366::-;24038:3;24059:67;24123:2;24118:3;24059:67;:::i;:::-;24052:74;;24135:93;24224:3;24135:93;:::i;:::-;24253:2;24248:3;24244:12;24237:19;;23896:366;;;:::o;24268:419::-;24434:4;24472:2;24461:9;24457:18;24449:26;;24521:9;24515:4;24511:20;24507:1;24496:9;24492:17;24485:47;24549:131;24675:4;24549:131;:::i;:::-;24541:139;;24268:419;;;:::o;24693:185::-;24733:1;24750:20;24768:1;24750:20;:::i;:::-;24745:25;;24784:20;24802:1;24784:20;:::i;:::-;24779:25;;24823:1;24813:35;;24828:18;;:::i;:::-;24813:35;24870:1;24867;24863:9;24858:14;;24693:185;;;;:::o;24884:410::-;24924:7;24947:20;24965:1;24947:20;:::i;:::-;24942:25;;24981:20;24999:1;24981:20;:::i;:::-;24976:25;;25036:1;25033;25029:9;25058:30;25076:11;25058:30;:::i;:::-;25047:41;;25237:1;25228:7;25224:15;25221:1;25218:22;25198:1;25191:9;25171:83;25148:139;;25267:18;;:::i;:::-;25148:139;24932:362;24884:410;;;;:::o;25300:233::-;25339:3;25362:24;25380:5;25362:24;:::i;:::-;25353:33;;25408:66;25401:5;25398:77;25395:103;;25478:18;;:::i;:::-;25395:103;25525:1;25518:5;25514:13;25507:20;;25300:233;;;:::o;25539:158::-;25679:10;25675:1;25667:6;25663:14;25656:34;25539:158;:::o;25703:365::-;25845:3;25866:66;25930:1;25925:3;25866:66;:::i;:::-;25859:73;;25941:93;26030:3;25941:93;:::i;:::-;26059:2;26054:3;26050:12;26043:19;;25703:365;;;:::o;26074:419::-;26240:4;26278:2;26267:9;26263:18;26255:26;;26327:9;26321:4;26317:20;26313:1;26302:9;26298:17;26291:47;26355:131;26481:4;26355:131;:::i;:::-;26347:139;;26074:419;;;:::o;26499:162::-;26639:14;26635:1;26627:6;26623:14;26616:38;26499:162;:::o;26667:366::-;26809:3;26830:67;26894:2;26889:3;26830:67;:::i;:::-;26823:74;;26906:93;26995:3;26906:93;:::i;:::-;27024:2;27019:3;27015:12;27008:19;;26667:366;;;:::o;27039:419::-;27205:4;27243:2;27232:9;27228:18;27220:26;;27292:9;27286:4;27282:20;27278:1;27267:9;27263:17;27256:47;27320:131;27446:4;27320:131;:::i;:::-;27312:139;;27039:419;;;:::o;27464:148::-;27566:11;27603:3;27588:18;;27464:148;;;;:::o;27618:161::-;27758:9;27754:1;27746:6;27742:14;27735:33;27618:161;:::o;27789:416::-;27949:3;27974:84;28056:1;28051:3;27974:84;:::i;:::-;27967:91;;28071:93;28160:3;28071:93;:::i;:::-;28193:1;28188:3;28184:11;28177:18;;27789:416;;;:::o;28215:410::-;28321:3;28353:39;28386:5;28353:39;:::i;:::-;28412:89;28494:6;28489:3;28412:89;:::i;:::-;28405:96;;28514:65;28572:6;28567:3;28560:4;28553:5;28549:16;28514:65;:::i;:::-;28608:6;28603:3;28599:16;28592:23;;28325:300;28215:410;;;;:::o;28635:159::-;28779:3;28775:1;28767:6;28763:14;28756:27;28635:159;:::o;28804:416::-;28964:3;28989:84;29071:1;29066:3;28989:84;:::i;:::-;28982:91;;29086:93;29175:3;29086:93;:::i;:::-;29208:1;29203:3;29199:11;29192:18;;28804:416;;;:::o;29230:163::-;29374:7;29370:1;29362:6;29358:14;29351:31;29230:163;:::o;29403:416::-;29563:3;29588:84;29670:1;29665:3;29588:84;:::i;:::-;29581:91;;29685:93;29774:3;29685:93;:::i;:::-;29807:1;29802:3;29798:11;29791:18;;29403:416;;;:::o;29829:1261::-;30312:3;30338:148;30482:3;30338:148;:::i;:::-;30331:155;;30507:95;30598:3;30589:6;30507:95;:::i;:::-;30500:102;;30623:148;30767:3;30623:148;:::i;:::-;30616:155;;30792:95;30883:3;30874:6;30792:95;:::i;:::-;30785:102;;30908:148;31052:3;30908:148;:::i;:::-;30901:155;;31077:3;31070:10;;29829:1261;;;;;:::o;31100:171::-;31244:15;31240:1;31232:6;31228:14;31221:39;31100:171;:::o;31281:382::-;31423:3;31448:67;31512:2;31507:3;31448:67;:::i;:::-;31441:74;;31528:93;31617:3;31528:93;:::i;:::-;31650:2;31645:3;31641:12;31634:19;;31281:382;;;:::o;31673:435::-;31839:4;31881:2;31870:9;31866:18;31858:26;;31934:9;31928:4;31924:20;31920:1;31909:9;31905:17;31898:47;31966:131;32092:4;31966:131;:::i;:::-;31958:139;;31673:435;;;:::o;32118:196::-;32170:77;32167:1;32160:88;32271:4;32268:1;32261:15;32299:4;32296:1;32289:15
Swarm Source
ipfs://978e9396af56226471a455b34617b334e5fca8cfb8520d46502b4876bb7302a6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
APE | Ape (APE) | 100.00% | $1.09 | 2,358 | $2,563.7 |
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.