More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 6,382 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 10394814 | 63 days ago | IN | 0 MOVR | 0.00000992 | ||||
Set Approval For... | 10394814 | 63 days ago | IN | 0 MOVR | 0.00011941 | ||||
Set Approval For... | 7222353 | 290 days ago | IN | 0 MOVR | 0.00023883 | ||||
Transfer From | 5646710 | 509 days ago | IN | 0 MOVR | 0.00050055 | ||||
Transfer From | 5646630 | 509 days ago | IN | 0 MOVR | 0.00038437 | ||||
Transfer From | 5646626 | 509 days ago | IN | 0 MOVR | 0.0004721 | ||||
Transfer From | 5646622 | 509 days ago | IN | 0 MOVR | 0.00043827 | ||||
Transfer From | 5646618 | 509 days ago | IN | 0 MOVR | 0.0004721 | ||||
Transfer From | 5646614 | 509 days ago | IN | 0 MOVR | 0.00043827 | ||||
Transfer From | 5646609 | 509 days ago | IN | 0 MOVR | 0.00043827 | ||||
Transfer From | 5646604 | 509 days ago | IN | 0 MOVR | 0.00038437 | ||||
Transfer From | 5646601 | 509 days ago | IN | 0 MOVR | 0.00038437 | ||||
Transfer From | 5646597 | 509 days ago | IN | 0 MOVR | 0.00043827 | ||||
Transfer From | 5646593 | 509 days ago | IN | 0 MOVR | 0.00043827 | ||||
Transfer From | 5646590 | 509 days ago | IN | 0 MOVR | 0.00043827 | ||||
Transfer From | 5646587 | 509 days ago | IN | 0 MOVR | 0.00058377 | ||||
Set Approval For... | 4974887 | 606 days ago | IN | 0 MOVR | 0.00028031 | ||||
Set Approval For... | 4665252 | 649 days ago | IN | 0 MOVR | 0.00011698 | ||||
Set Approval For... | 4071795 | 734 days ago | IN | 0 MOVR | 0.00006842 | ||||
Set Approval For... | 3794053 | 774 days ago | IN | 0 MOVR | 0.00011698 | ||||
Set Approval For... | 3671910 | 791 days ago | IN | 0 MOVR | 0.00011698 | ||||
Transfer From | 3259240 | 850 days ago | IN | 0 MOVR | 0.00042293 | ||||
Set Approval For... | 2411949 | 977 days ago | IN | 0 MOVR | 0.00005376 | ||||
Set Approval For... | 2411945 | 977 days ago | IN | 0 MOVR | 0.00005376 | ||||
Set Approval For... | 2366431 | 985 days ago | IN | 0 MOVR | 0.00011698 |
Latest 7 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
CryptoButchers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2021-12-13 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom(address from, address to, uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } abstract contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { // Storage of map keys and values MapEntry[] _entries; // Position of the entry defined by a key in the `entries` array, plus 1 // because index 0 means a key is not in the map. mapping (bytes32 => uint256) _indexes; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); // The entry is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } /** * @dev Removes a key-value pair from a map. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function _remove(Map storage map, bytes32 key) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one // in the array, and then remove the last entry (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. MapEntry storage lastEntry = map._entries[lastIndex]; // Move the last entry to the index where the entry to delete is map._entries[toDeleteIndex] = lastEntry; // Update the index for the moved entry map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved entry was stored map._entries.pop(); // Delete the index for the deleted slot delete map._indexes[key]; return true; } else { return false; } } /** * @dev Returns true if the key is in the map. O(1). */ function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } /** * @dev Returns the number of key-value pairs in the map. O(1). */ function _length(Map storage map) private view returns (uint256) { return map._entries.length; } /** * @dev Returns the key-value pair stored at position `index` in the map. O(1). * * Note that there are no guarantees on the ordering of entries inside the * array, and it may change when more entries are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. */ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } /** * @dev Same as {_get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {_tryGet}. */ function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } // UintToAddressMap struct UintToAddressMap { Map _inner; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } /** * @dev Returns true if the key is in the map. O(1). */ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } /** * @dev Returns the number of elements in the map. O(1). */ function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. * * _Available since v3.4._ */ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens mapping (address => EnumerableSet.UintSet) private _holderTokens; // Mapping from owner to list of owned token IDs mapping (address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Enumerable mapping from token ids to their owners EnumerableMap.UintToAddressMap private _tokenOwners; // 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; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Base URI string private _baseURI; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } modifier canTransfer(uint256 _tokenId) { require(_isApprovedOrOwner(msg.sender, _tokenId)); _; } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _holderTokens[owner].length(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } function totalSupplyString() public view virtual returns (string memory) { return _tokenOwners.length().toString(); } function addTokenTo(address _to, uint256 _tokenId) internal { uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].pop(); ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds return _tokenOwners.length(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId); } function _safeTransfer(address from, address to, uint256 tokenId) internal virtual { _transfer(from, to, tokenId); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _mint(to, tokenId); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); allTokensIndex[tokenId] = allTokens.length; allTokens.push(tokenId); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); removeTokenFrom(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); removeTokenFrom(from, tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } contract Ownable is Context { address public _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract CryptoButchers is Ownable, ERC721 { using Strings for string; using Strings for uint256; using SafeMath for uint256; constructor () ERC721("CryptoButchers" ,"BUTCHER"){} struct ButcherNFT { string ipfsHash; address publisher; uint id; } uint256 public MAX_BUTCHERS = 7777; uint256 public priceMintButcher = 777000000000000000; uint256 public cutSale = 11; address payable public treasury; string public website = "cryptobutchers.com"; string public baseExtension = ".json"; ButcherNFT[] public butchersNFTs; mapping (string => uint256) ipfsHashToTokenId; mapping (address => uint256) internal publishedTokensCount; mapping (address => uint256[]) internal publishedTokens; mapping(address => mapping (uint256 => uint256)) internal publishedTokensIndex; struct SellingButcher { address payable seller; uint256 price; string ipfsHash; uint256 id; } mapping (uint256 => SellingButcher) public tokenIdToSellingButcher; SellingButcher[] public sellingItems; bool public pauseMint = true; function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function withdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function setTreasury(address payable _value) public onlyOwner { treasury = _value; } function setWebsite(string memory _value) public onlyOwner { website = _value; } function setBaseExtension(string memory _value) public onlyOwner { baseExtension = _value; } function setPriceMint(uint256 _value) public onlyOwner { priceMintButcher = _value; } function setBaseURI(string memory _value) public onlyOwner { _setBaseURI(_value); } function setPauseMint(bool _value) public onlyOwner { pauseMint = _value; } function setCutSale(uint256 _value) public onlyOwner { cutSale = _value; } function getIpfsHashToTokenId(string memory _string) public view returns (uint256){ return ipfsHashToTokenId[_string]; } function getOwnedTokens(address _owner) public view returns (uint256[] memory) { return ownedTokens[_owner]; } function mintButcher(uint256 _amount) public payable { require(pauseMint, "Mint paused."); require(totalSupply().add(_amount) < MAX_BUTCHERS, "Limit exceeded."); require(msg.value >= priceMintButcher.mul(_amount <= 0 ? 1 : _amount)); for(uint256 i = 0; i < _amount; i++){ ButcherNFT memory _butchersNFT = ButcherNFT({ ipfsHash: " ", publisher: msg.sender, id: 0 }); butchersNFTs.push(_butchersNFT); uint256 newButchersNFTId = butchersNFTs.length - 1; butchersNFTs[newButchersNFTId].id = newButchersNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newButchersNFTId.toString() , baseExtension)); butchersNFTs[newButchersNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newButchersNFTId; _mint(msg.sender, newButchersNFTId); publishedTokensCount[msg.sender]++; uint256 length = publishedTokens[msg.sender].length; publishedTokens[msg.sender].push(newButchersNFTId); publishedTokensIndex[msg.sender][newButchersNFTId] = length; } } function generateButchers(uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) < MAX_BUTCHERS, "Limit exceeded."); for(uint256 i = 0; i < _amount; i++){ ButcherNFT memory _butchersNFT = ButcherNFT({ ipfsHash: " ", publisher: msg.sender, id: 0 }); butchersNFTs.push(_butchersNFT); uint256 newButchersNFTId = butchersNFTs.length - 1; butchersNFTs[newButchersNFTId].id = newButchersNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newButchersNFTId.toString() , baseExtension)); butchersNFTs[newButchersNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newButchersNFTId; _mint(msg.sender, newButchersNFTId); publishedTokensCount[msg.sender]++; uint256 length = publishedTokens[msg.sender].length; publishedTokens[msg.sender].push(newButchersNFTId); publishedTokensIndex[msg.sender][newButchersNFTId] = length; } } function addButcherForSale(uint256 _tokenId, uint256 _price) public onlyOwnerOf(_tokenId) { require(tokenIdToSellingButcher[_tokenId].seller == address(0)); SellingButcher memory _sellingButcher = SellingButcher( payable(msg.sender), uint256(_price), butchersNFTs[_tokenId].ipfsHash, _tokenId ); tokenIdToSellingButcher[_tokenId] = _sellingButcher; approve(address(this), _tokenId); safeTransferFrom(msg.sender, address(this), _tokenId); } function cancelButcherForSale(uint256 _tokenId) public { require(tokenIdToSellingButcher[_tokenId].seller == msg.sender); this.safeTransferFrom(address(this), tokenIdToSellingButcher[_tokenId].seller, _tokenId); delete tokenIdToSellingButcher[_tokenId]; } function purchaseButcher(uint256 _tokenId) public payable{ uint256 priceItemEther = tokenIdToSellingButcher[_tokenId].price; address payable sellerAddress = tokenIdToSellingButcher[_tokenId].seller; require(sellerAddress != address(0)); require(sellerAddress != msg.sender); require(msg.value >= priceItemEther); uint256 priceItemResale = priceItemEther.sub(priceItemEther.mul(cutSale).div(100)); sellerAddress.transfer(priceItemResale); delete tokenIdToSellingButcher[_tokenId]; this.safeTransferFrom(address(this), msg.sender, _tokenId); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_BUTCHERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"addButcherForSale","outputs":[],"stateMutability":"nonpayable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"butchersNFTs","outputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"address","name":"publisher","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cancelButcherForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cutSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"generateButchers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_string","type":"string"}],"name":"getIpfsHashToTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintButcher","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMintButcher","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"purchaseButcher","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellingItems","outputs":[{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setCutSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPriceMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setWebsite","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToSellingButcher","outputs":[{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"website","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611e61600f55670ac875621e7a8000601055600b6011556040518060400160405280601281526020017f63727970746f62757463686572732e636f6d000000000000000000000000000081525060139080519060200190620000689291906200035e565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060149080519060200190620000b69291906200035e565b506001601c60006101000a81548160ff021916908315150217905550348015620000df57600080fd5b506040518060400160405280600e81526020017f43727970746f42757463686572730000000000000000000000000000000000008152506040518060400160405280600781526020017f425554434845520000000000000000000000000000000000000000000000000081525060006200015e6200027e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508160099080519060200190620002149291906200035e565b5080600a90805190602001906200022d9291906200035e565b50620002466380ac58cd60e01b6200028660201b60201c565b6200025e635b5e139f60e01b6200028660201b60201c565b6200027663780e9d6360e01b6200028660201b60201c565b5050620004f6565b600033905090565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620002f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e99062000435565b60405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b8280546200036c9062000468565b90600052602060002090601f016020900481019282620003905760008555620003dc565b82601f10620003ab57805160ff1916838001178555620003dc565b82800160010185558215620003dc579182015b82811115620003db578251825591602001919060010190620003be565b5b509050620003eb9190620003ef565b5090565b5b808211156200040a576000816000905550600101620003f0565b5090565b60006200041d601c8362000457565b91506200042a82620004cd565b602082019050919050565b6000602082019050818103600083015262000450816200040e565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200048157607f821691505b602082108114156200049857620004976200049e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b615a2380620005066000396000f3fe6080604052600436106102885760003560e01c8063715018a61161015a578063cd85cdb5116100c1578063f0f442601161007a578063f0f4426014610a12578063f2fde38b14610a3b578063f59e26d014610a64578063f7757ffa14610a8d578063f87f44b914610aa9578063ff5257eb14610ad257610288565b8063cd85cdb5146108f0578063d9d616551461091b578063da3ef23f14610958578063da6fa46c14610981578063e450674c146109ac578063e985e9c5146109d557610288565b8063bcaf656c11610113578063bcaf656c146107de578063be1ce91d14610809578063beb0a41614610834578063c66828621461085f578063c75098ea1461088a578063c87b56dd146108b357610288565b8063715018a6146106f45780637be86a011461070b5780638da5cb5b1461073457806395d89b411461075f578063a22cb4651461078a578063b2bdfa7b146107b357610288565b806342842e0e116101fe5780635a284b3f116101b75780635a284b3f146105d057806361d027b3146105fb5780636352211e1461062657806365de3833146106635780636c0360eb1461068c57806370a08231146106b757610288565b806342842e0e146104a9578063438b6300146104d25780634c9f48c61461050f5780634f6ccce71461052b57806355f506791461056857806355f804b3146105a757610288565b806310fcafab1161025057806310fcafab1461038457806318160ddd146103c457806323b872dd146103ef57806327ea2df0146104185780632f745c59146104555780633ccfd60b1461049257610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b3146103325780630dee18e41461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190614495565b610b12565b6040516102c19190614b8d565b60405180910390f35b3480156102d657600080fd5b506102df610b7a565b6040516102ec9190614ba8565b60405180910390f35b34801561030157600080fd5b5061031c6004803603810190610317919061450b565b610c0c565b6040516103299190614a7b565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190614428565b610c91565b005b34801561036757600080fd5b50610382600480360381019061037d919061450b565b610da9565b005b34801561039057600080fd5b506103ab60048036038101906103a6919061450b565b610e2f565b6040516103bb9493929190614ab1565b60405180910390f35b3480156103d057600080fd5b506103d9610f07565b6040516103e69190614ec8565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190614395565b610f18565b005b34801561042457600080fd5b5061043f600480360381019061043a91906144c2565b610f78565b60405161044c9190614ec8565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190614428565b610fa0565b6040516104899190614ec8565b60405180910390f35b34801561049e57600080fd5b506104a7610ffb565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190614395565b6110c0565b005b3480156104de57600080fd5b506104f960048036038101906104f491906142fb565b611120565b6040516105069190614b6b565b60405180910390f35b6105296004803603810190610524919061450b565b6111ce565b005b34801561053757600080fd5b50610552600480360381019061054d919061450b565b6113fb565b60405161055f9190614ec8565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a919061450b565b61141e565b60405161059e93929190614bca565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c991906144c2565b611500565b005b3480156105dc57600080fd5b506105e5611588565b6040516105f29190614ec8565b60405180910390f35b34801561060757600080fd5b5061061061158e565b60405161061d9190614a96565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061450b565b6115b4565b60405161065a9190614a7b565b60405180910390f35b34801561066f57600080fd5b5061068a6004803603810190610685919061450b565b6115eb565b005b34801561069857600080fd5b506106a1611671565b6040516106ae9190614ba8565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906142fb565b611703565b6040516106eb9190614ec8565b60405180910390f35b34801561070057600080fd5b506107096117c2565b005b34801561071757600080fd5b50610732600480360381019061072d919061450b565b6118fc565b005b34801561074057600080fd5b50610749611d3e565b6040516107569190614a7b565b60405180910390f35b34801561076b57600080fd5b50610774611d67565b6040516107819190614ba8565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac91906143e8565b611df9565b005b3480156107bf57600080fd5b506107c8611f7a565b6040516107d59190614a7b565b60405180910390f35b3480156107ea57600080fd5b506107f3611f9e565b6040516108009190614ec8565b60405180910390f35b34801561081557600080fd5b5061081e611fa4565b60405161082b9190614ec8565b60405180910390f35b34801561084057600080fd5b50610849611faa565b6040516108569190614ba8565b60405180910390f35b34801561086b57600080fd5b50610874612038565b6040516108819190614ba8565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190614538565b6120c6565b005b3480156108bf57600080fd5b506108da60048036038101906108d5919061450b565b612308565b6040516108e79190614ba8565b60405180910390f35b3480156108fc57600080fd5b506109056123b2565b6040516109129190614b8d565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d91906142fb565b6123c5565b60405161094f9190614b6b565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a91906144c2565b61245c565b005b34801561098d57600080fd5b506109966124f2565b6040516109a39190614ba8565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce919061450b565b61250b565b005b3480156109e157600080fd5b506109fc60048036038101906109f79190614355565b61267e565b604051610a099190614b8d565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190614328565b612712565b005b348015610a4757600080fd5b50610a626004803603810190610a5d91906142fb565b6127d2565b005b348015610a7057600080fd5b50610a8b6004803603810190610a869190614468565b61297b565b005b610aa76004803603810190610aa2919061450b565b612a14565b005b348015610ab557600080fd5b50610ad06004803603810190610acb91906144c2565b612e5b565b005b348015610ade57600080fd5b50610af96004803603810190610af4919061450b565b612ef1565b604051610b099493929190614ab1565b60405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054610b89906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb5906151c1565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b5050505050905090565b6000610c1782612fd9565b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90614e08565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c9c826115b4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0490614e88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2c612ff6565b73ffffffffffffffffffffffffffffffffffffffff161480610d5b5750610d5a81610d55612ff6565b61267e565b5b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614d68565b60405180910390fd5b610da48383612ffe565b505050565b610db1612ff6565b73ffffffffffffffffffffffffffffffffffffffff16610dcf611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90614e28565b60405180910390fd5b8060108190555050565b601a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054610e7e906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa906151c1565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050908060030154905084565b6000610f1360056130b7565b905090565b610f29610f23612ff6565b826130cc565b610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90614ea8565b60405180910390fd5b610f738383836131aa565b505050565b6000601682604051610f8a9190614a33565b9081526020016040518091039020549050919050565b6000610ff382600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133d590919063ffffffff16565b905092915050565b611003612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611021611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614e28565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110bd573d6000803e3d6000fd5b50565b6110d16110cb612ff6565b826130cc565b611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614ea8565b60405180910390fd5b61111b8383836133ef565b505050565b6060600061112d83611703565b905060008167ffffffffffffffff81111561114b5761114a615389565b5b6040519080825280602002602001820160405280156111795781602001602082028036833780820191505090505b50905060005b828110156111c3576111918582610fa0565b8282815181106111a4576111a361535a565b5b60200260200101818152505080806111bb90615224565b91505061117f565b508092505050919050565b6000601a60008381526020019081526020016000206001015490506000601a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561125e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561129757600080fd5b813410156112a457600080fd5b60006112e06112d160646112c3601154876133ff90919063ffffffff16565b61347a90919063ffffffff16565b846134d290919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611328573d6000803e3d6000fd5b50601a6000858152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600061137c919061413f565b600382016000905550503073ffffffffffffffffffffffffffffffffffffffff166342842e0e3033876040518463ffffffff1660e01b81526004016113c393929190614b34565b600060405180830381600087803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b5050505050505050565b60008061141283600561352b90919063ffffffff16565b50905080915050919050565b6015818154811061142e57600080fd5b9060005260206000209060030201600091509050806000018054611451906151c1565b80601f016020809104026020016040519081016040528092919081815260200182805461147d906151c1565b80156114ca5780601f1061149f576101008083540402835291602001916114ca565b820191906000526020600020905b8154815290600101906020018083116114ad57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b611508612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611526611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390614e28565b60405180910390fd5b61158581613557565b50565b60115481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115e4826040518060600160405280602981526020016159c56029913960056135719092919063ffffffff16565b9050919050565b6115f3612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611611611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90614e28565b60405180910390fd5b8060118190555050565b6060600e8054611680906151c1565b80601f01602080910402602001604051908101604052809291908181526020018280546116ac906151c1565b80156116f95780601f106116ce576101008083540402835291602001916116f9565b820191906000526020600020905b8154815290600101906020018083116116dc57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614d88565b60405180910390fd5b6117bb600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613590565b9050919050565b6117ca612ff6565b73ffffffffffffffffffffffffffffffffffffffff166117e8611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611904612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611922611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614e28565b60405180910390fd5b600f5461199582611987610f07565b6135a590919063ffffffff16565b106119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90614d08565b60405180910390fd5b60005b81811015611d3a57600060405180606001604052806040518060400160405280600181526020017f200000000000000000000000000000000000000000000000000000000000000081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905060158190806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019080519060200190611a9392919061417f565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155505060006001601580549050611afb919061508f565b90508060158281548110611b1257611b1161535a565b5b9060005260206000209060030201600201819055506000611b31611671565b9050600081611b3f84613603565b6014604051602001611b5393929190614a4a565b60405160208183030381529060405290508060158481548110611b7957611b7861535a565b5b90600052602060002090600302016000019080519060200190611b9d92919061417f565b5082601682604051611baf9190614a33565b908152602001604051809103902081905550611bcb3384613764565b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c1b90615224565b91905055506000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084908060018154018082558091505060019003906000526020600020016000909190919091505580601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000208190555050505050508080611d3290615224565b9150506119d8565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054611d76906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611da2906151c1565b8015611def5780601f10611dc457610100808354040283529160200191611def565b820191906000526020600020905b815481529060010190602001808311611dd257829003601f168201915b5050505050905090565b611e01612ff6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690614cc8565b60405180910390fd5b8060086000611e7c612ff6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f29612ff6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f6e9190614b8d565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60105481565b60138054611fb7906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe3906151c1565b80156120305780601f1061200557610100808354040283529160200191612030565b820191906000526020600020905b81548152906001019060200180831161201357829003601f168201915b505050505081565b60148054612045906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612071906151c1565b80156120be5780601f10612093576101008083540402835291602001916120be565b820191906000526020600020905b8154815290600101906020018083116120a157829003601f168201915b505050505081565b813373ffffffffffffffffffffffffffffffffffffffff166120e7826115b4565b73ffffffffffffffffffffffffffffffffffffffff161461210757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601a600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217657600080fd5b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001601586815481106121b9576121b861535a565b5b906000526020600020906003020160000180546121d5906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612201906151c1565b801561224e5780601f106122235761010080835404028352916020019161224e565b820191906000526020600020905b81548152906001019060200180831161223157829003601f168201915b5050505050815260200185815250905080601a600086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020190805190602001906122df92919061417f565b50606082015181600301559050506122f73085610c91565b6123023330866110c0565b50505050565b606061231382612fd9565b612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990614e68565b60405180910390fd5b600061235c611671565b9050600081511161237c57604051806020016040528060008152506123aa565b8061238684613603565b601460405160200161239a93929190614a4a565b6040516020818303038152906040525b915050919050565b601c60009054906101000a900460ff1681565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561245057602002820191906000526020600020905b81548152602001906001019080831161243c575b50505050509050919050565b612464612ff6565b73ffffffffffffffffffffffffffffffffffffffff16612482611d3e565b73ffffffffffffffffffffffffffffffffffffffff16146124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90614e28565b60405180910390fd5b80601490805190602001906124ee92919061417f565b5050565b606061250661250160056130b7565b613603565b905090565b3373ffffffffffffffffffffffffffffffffffffffff16601a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461257957600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166342842e0e30601a600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016125ec93929190614afd565b600060405180830381600087803b15801561260657600080fd5b505af115801561261a573d6000803e3d6000fd5b50505050601a6000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000612671919061413f565b6003820160009055505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61271a612ff6565b73ffffffffffffffffffffffffffffffffffffffff16612738611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614e28565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127da612ff6565b73ffffffffffffffffffffffffffffffffffffffff166127f8611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461284e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284590614e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590614c28565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612983612ff6565b73ffffffffffffffffffffffffffffffffffffffff166129a1611d3e565b73ffffffffffffffffffffffffffffffffffffffff16146129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614e28565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b601c60009054906101000a900460ff16612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a90614c48565b60405180910390fd5b600f54612a8082612a72610f07565b6135a590919063ffffffff16565b10612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614d08565b60405180910390fd5b612ae66000821115612ad25781612ad5565b60015b6010546133ff90919063ffffffff16565b341015612af257600080fd5b60005b81811015612e5757600060405180606001604052806040518060400160405280600181526020017f200000000000000000000000000000000000000000000000000000000000000081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905060158190806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019080519060200190612bb092919061417f565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155505060006001601580549050612c18919061508f565b90508060158281548110612c2f57612c2e61535a565b5b9060005260206000209060030201600201819055506000612c4e611671565b9050600081612c5c84613603565b6014604051602001612c7093929190614a4a565b60405160208183030381529060405290508060158481548110612c9657612c9561535a565b5b90600052602060002090600302016000019080519060200190612cba92919061417f565b5082601682604051612ccc9190614a33565b908152602001604051809103902081905550612ce83384613764565b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612d3890615224565b91905055506000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084908060018154018082558091505060019003906000526020600020016000909190919091505580601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000208190555050505050508080612e4f90615224565b915050612af5565b5050565b612e63612ff6565b73ffffffffffffffffffffffffffffffffffffffff16612e81611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614e28565b60405180910390fd5b8060139080519060200190612eed92919061417f565b5050565b601b8181548110612f0157600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054612f50906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7c906151c1565b8015612fc95780601f10612f9e57610100808354040283529160200191612fc9565b820191906000526020600020905b815481529060010190602001808311612fac57829003601f168201915b5050505050908060030154905084565b6000612fef82600561394290919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613071836115b4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130c58260000161395c565b9050919050565b60006130d782612fd9565b613116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310d90614d28565b60405180910390fd5b6000613121836115b4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061319057508373ffffffffffffffffffffffffffffffffffffffff1661317884610c0c565b73ffffffffffffffffffffffffffffffffffffffff16145b806131a157506131a0818561267e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166131ca826115b4565b73ffffffffffffffffffffffffffffffffffffffff1614613220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321790614e48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328790614ca8565b60405180910390fd5b61329b83838361396d565b6132a6600082612ffe565b6132f781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061397290919063ffffffff16565b5061334981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061398c90919063ffffffff16565b5061335483826139a6565b61335e8282613bd6565b61337481836005613ca09092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006133e48360000183613cd5565b60001c905092915050565b6133fa8383836131aa565b505050565b6000808314156134125760009050613474565b600082846134209190615035565b905082848261342f9190615004565b1461346f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346690614de8565b60405180910390fd5b809150505b92915050565b60008082116134be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b590614d48565b60405180910390fd5b81836134ca9190615004565b905092915050565b600082821115613517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350e90614ce8565b60405180910390fd5b8183613523919061508f565b905092915050565b60008060008061353e8660000186613d49565b915091508160001c8160001c9350935050509250929050565b80600e908051906020019061356d92919061417f565b5050565b6000613584846000018460001b84613dd3565b60001c90509392505050565b600061359e82600001613e74565b9050919050565b60008082846135b49190614fae565b9050838110156135f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f090614c88565b60405180910390fd5b8091505092915050565b6060600082141561364b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061375f565b600082905060005b6000821461367d57808061366690615224565b915050600a826136769190615004565b9150613653565b60008167ffffffffffffffff81111561369957613698615389565b5b6040519080825280601f01601f1916602001820160405280156136cb5781602001600182028036833780820191505090505b5090505b60008514613758576001826136e4919061508f565b9150600a856136f3919061526d565b60306136ff9190614fae565b60f81b8183815181106137155761371461535a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137519190615004565b94506136cf565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137cb90614dc8565b60405180910390fd5b6137dd81612fd9565b1561381d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381490614c68565b60405180910390fd5b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505561386f6000838361396d565b6138c081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061398c90919063ffffffff16565b506138cb8282613bd6565b6138e181836005613ca09092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613954836000018360001b613e85565b905092915050565b600081600001805490509050919050565b505050565b6000613984836000018360001b613ea8565b905092915050565b600061399e836000018360001b613fc0565b905092915050565b6000600460008381526020019081526020016000205490506000613a166001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506134d290919063ffffffff16565b90506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110613a6b57613a6a61535a565b5b9060005260206000200154905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110613aca57613ac961535a565b5b90600052602060002001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110613b2b57613b2a61535a565b5b9060005260206000200181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613b8857613b8761532b565b5b60019003818190600052602060002001600090559055600060046000868152602001908152602001600020819055508260046000838152602001908152602001600020819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055806004600084815260200190815260200160002081905550505050565b6000613ccc846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b614030565b90509392505050565b600081836000018054905011613d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1790614c08565b60405180910390fd5b826000018281548110613d3657613d3561535a565b5b9060005260206000200154905092915050565b60008082846000018054905011613d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8c90614da8565b60405180910390fd5b6000846000018481548110613dad57613dac61535a565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390613e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2c9190614ba8565b60405180910390fd5b5084600001600182613e47919061508f565b81548110613e5857613e5761535a565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114613fb4576000600182613eda919061508f565b9050600060018660000180549050613ef2919061508f565b90506000866000018281548110613f0c57613f0b61535a565b5b9060005260206000200154905080876000018481548110613f3057613f2f61535a565b5b9060005260206000200181905550600183613f4b9190614fae565b8760010160008381526020019081526020016000208190555086600001805480613f7857613f7761532b565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613fba565b60009150505b92915050565b6000613fcc838361411c565b61402557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061402a565b600090505b92915050565b60008084600101600085815260200190815260200160002054905060008114156140d757846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050614115565b82856000016001836140e9919061508f565b815481106140fa576140f961535a565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b50805461414b906151c1565b6000825580601f1061415d575061417c565b601f01602090049060005260206000209081019061417b9190614205565b5b50565b82805461418b906151c1565b90600052602060002090601f0160209004810192826141ad57600085556141f4565b82601f106141c657805160ff19168380011785556141f4565b828001600101855582156141f4579182015b828111156141f35782518255916020019190600101906141d8565b5b5090506142019190614205565b5090565b5b8082111561421e576000816000905550600101614206565b5090565b600061423561423084614f08565b614ee3565b905082815260208101848484011115614251576142506153bd565b5b61425c84828561517f565b509392505050565b60008135905061427381615951565b92915050565b60008135905061428881615968565b92915050565b60008135905061429d8161597f565b92915050565b6000813590506142b281615996565b92915050565b600082601f8301126142cd576142cc6153b8565b5b81356142dd848260208601614222565b91505092915050565b6000813590506142f5816159ad565b92915050565b600060208284031215614311576143106153c7565b5b600061431f84828501614264565b91505092915050565b60006020828403121561433e5761433d6153c7565b5b600061434c84828501614279565b91505092915050565b6000806040838503121561436c5761436b6153c7565b5b600061437a85828601614264565b925050602061438b85828601614264565b9150509250929050565b6000806000606084860312156143ae576143ad6153c7565b5b60006143bc86828701614264565b93505060206143cd86828701614264565b92505060406143de868287016142e6565b9150509250925092565b600080604083850312156143ff576143fe6153c7565b5b600061440d85828601614264565b925050602061441e8582860161428e565b9150509250929050565b6000806040838503121561443f5761443e6153c7565b5b600061444d85828601614264565b925050602061445e858286016142e6565b9150509250929050565b60006020828403121561447e5761447d6153c7565b5b600061448c8482850161428e565b91505092915050565b6000602082840312156144ab576144aa6153c7565b5b60006144b9848285016142a3565b91505092915050565b6000602082840312156144d8576144d76153c7565b5b600082013567ffffffffffffffff8111156144f6576144f56153c2565b5b614502848285016142b8565b91505092915050565b600060208284031215614521576145206153c7565b5b600061452f848285016142e6565b91505092915050565b6000806040838503121561454f5761454e6153c7565b5b600061455d858286016142e6565b925050602061456e858286016142e6565b9150509250929050565b60006145848383614a15565b60208301905092915050565b61459981615149565b82525050565b6145a8816150d5565b82525050565b6145b7816150c3565b82525050565b60006145c882614f5e565b6145d28185614f81565b93506145dd83614f39565b8060005b8381101561460e5781516145f58882614578565b975061460083614f74565b9250506001810190506145e1565b5085935050505092915050565b614624816150e7565b82525050565b600061463582614f69565b61463f8185614f92565b935061464f81856020860161518e565b614658816153cc565b840191505092915050565b600061466e82614f69565b6146788185614fa3565b935061468881856020860161518e565b80840191505092915050565b600081546146a1816151c1565b6146ab8186614fa3565b945060018216600081146146c657600181146146d75761470a565b60ff1983168652818601935061470a565b6146e085614f49565b60005b83811015614702578154818901526001820191506020810190506146e3565b838801955050505b50505092915050565b6000614720602283614f92565b915061472b826153dd565b604082019050919050565b6000614743602683614f92565b915061474e8261542c565b604082019050919050565b6000614766600c83614f92565b91506147718261547b565b602082019050919050565b6000614789601c83614f92565b9150614794826154a4565b602082019050919050565b60006147ac601b83614f92565b91506147b7826154cd565b602082019050919050565b60006147cf602483614f92565b91506147da826154f6565b604082019050919050565b60006147f2601983614f92565b91506147fd82615545565b602082019050919050565b6000614815601e83614f92565b91506148208261556e565b602082019050919050565b6000614838600f83614f92565b915061484382615597565b602082019050919050565b600061485b602c83614f92565b9150614866826155c0565b604082019050919050565b600061487e601a83614f92565b91506148898261560f565b602082019050919050565b60006148a1603883614f92565b91506148ac82615638565b604082019050919050565b60006148c4602a83614f92565b91506148cf82615687565b604082019050919050565b60006148e7602283614f92565b91506148f2826156d6565b604082019050919050565b600061490a602083614f92565b915061491582615725565b602082019050919050565b600061492d602183614f92565b91506149388261574e565b604082019050919050565b6000614950602c83614f92565b915061495b8261579d565b604082019050919050565b6000614973602083614f92565b915061497e826157ec565b602082019050919050565b6000614996602983614f92565b91506149a182615815565b604082019050919050565b60006149b9602f83614f92565b91506149c482615864565b604082019050919050565b60006149dc602183614f92565b91506149e7826158b3565b604082019050919050565b60006149ff603183614f92565b9150614a0a82615902565b604082019050919050565b614a1e8161513f565b82525050565b614a2d8161513f565b82525050565b6000614a3f8284614663565b915081905092915050565b6000614a568286614663565b9150614a628285614663565b9150614a6e8284614694565b9150819050949350505050565b6000602082019050614a9060008301846145ae565b92915050565b6000602082019050614aab600083018461459f565b92915050565b6000608082019050614ac6600083018761459f565b614ad36020830186614a24565b8181036040830152614ae5818561462a565b9050614af46060830184614a24565b95945050505050565b6000606082019050614b1260008301866145ae565b614b1f6020830185614590565b614b2c6040830184614a24565b949350505050565b6000606082019050614b4960008301866145ae565b614b5660208301856145ae565b614b636040830184614a24565b949350505050565b60006020820190508181036000830152614b8581846145bd565b905092915050565b6000602082019050614ba2600083018461461b565b92915050565b60006020820190508181036000830152614bc2818461462a565b905092915050565b60006060820190508181036000830152614be4818661462a565b9050614bf360208301856145ae565b614c006040830184614a24565b949350505050565b60006020820190508181036000830152614c2181614713565b9050919050565b60006020820190508181036000830152614c4181614736565b9050919050565b60006020820190508181036000830152614c6181614759565b9050919050565b60006020820190508181036000830152614c818161477c565b9050919050565b60006020820190508181036000830152614ca18161479f565b9050919050565b60006020820190508181036000830152614cc1816147c2565b9050919050565b60006020820190508181036000830152614ce1816147e5565b9050919050565b60006020820190508181036000830152614d0181614808565b9050919050565b60006020820190508181036000830152614d218161482b565b9050919050565b60006020820190508181036000830152614d418161484e565b9050919050565b60006020820190508181036000830152614d6181614871565b9050919050565b60006020820190508181036000830152614d8181614894565b9050919050565b60006020820190508181036000830152614da1816148b7565b9050919050565b60006020820190508181036000830152614dc1816148da565b9050919050565b60006020820190508181036000830152614de1816148fd565b9050919050565b60006020820190508181036000830152614e0181614920565b9050919050565b60006020820190508181036000830152614e2181614943565b9050919050565b60006020820190508181036000830152614e4181614966565b9050919050565b60006020820190508181036000830152614e6181614989565b9050919050565b60006020820190508181036000830152614e81816149ac565b9050919050565b60006020820190508181036000830152614ea1816149cf565b9050919050565b60006020820190508181036000830152614ec1816149f2565b9050919050565b6000602082019050614edd6000830184614a24565b92915050565b6000614eed614efe565b9050614ef982826151f3565b919050565b6000604051905090565b600067ffffffffffffffff821115614f2357614f22615389565b5b614f2c826153cc565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fb98261513f565b9150614fc48361513f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ff957614ff861529e565b5b828201905092915050565b600061500f8261513f565b915061501a8361513f565b92508261502a576150296152cd565b5b828204905092915050565b60006150408261513f565b915061504b8361513f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150845761508361529e565b5b828202905092915050565b600061509a8261513f565b91506150a58361513f565b9250828210156150b8576150b761529e565b5b828203905092915050565b60006150ce8261511f565b9050919050565b60006150e08261511f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006151548261515b565b9050919050565b60006151668261516d565b9050919050565b60006151788261511f565b9050919050565b82818337600083830152505050565b60005b838110156151ac578082015181840152602081019050615191565b838111156151bb576000848401525b50505050565b600060028204905060018216806151d957607f821691505b602082108114156151ed576151ec6152fc565b5b50919050565b6151fc826153cc565b810181811067ffffffffffffffff8211171561521b5761521a615389565b5b80604052505050565b600061522f8261513f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152625761526161529e565b5b600182019050919050565b60006152788261513f565b91506152838361513f565b925082615293576152926152cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74207061757365642e0000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f4c696d69742065786365656465642e0000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61595a816150c3565b811461596557600080fd5b50565b615971816150d5565b811461597c57600080fd5b50565b615988816150e7565b811461599357600080fd5b50565b61599f816150f3565b81146159aa57600080fd5b50565b6159b68161513f565b81146159c157600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220d54df41d94246e5be0556c857f46ae28c1b0a836a6c6f2e3008fb364acbcee0264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102885760003560e01c8063715018a61161015a578063cd85cdb5116100c1578063f0f442601161007a578063f0f4426014610a12578063f2fde38b14610a3b578063f59e26d014610a64578063f7757ffa14610a8d578063f87f44b914610aa9578063ff5257eb14610ad257610288565b8063cd85cdb5146108f0578063d9d616551461091b578063da3ef23f14610958578063da6fa46c14610981578063e450674c146109ac578063e985e9c5146109d557610288565b8063bcaf656c11610113578063bcaf656c146107de578063be1ce91d14610809578063beb0a41614610834578063c66828621461085f578063c75098ea1461088a578063c87b56dd146108b357610288565b8063715018a6146106f45780637be86a011461070b5780638da5cb5b1461073457806395d89b411461075f578063a22cb4651461078a578063b2bdfa7b146107b357610288565b806342842e0e116101fe5780635a284b3f116101b75780635a284b3f146105d057806361d027b3146105fb5780636352211e1461062657806365de3833146106635780636c0360eb1461068c57806370a08231146106b757610288565b806342842e0e146104a9578063438b6300146104d25780634c9f48c61461050f5780634f6ccce71461052b57806355f506791461056857806355f804b3146105a757610288565b806310fcafab1161025057806310fcafab1461038457806318160ddd146103c457806323b872dd146103ef57806327ea2df0146104185780632f745c59146104555780633ccfd60b1461049257610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b3146103325780630dee18e41461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190614495565b610b12565b6040516102c19190614b8d565b60405180910390f35b3480156102d657600080fd5b506102df610b7a565b6040516102ec9190614ba8565b60405180910390f35b34801561030157600080fd5b5061031c6004803603810190610317919061450b565b610c0c565b6040516103299190614a7b565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190614428565b610c91565b005b34801561036757600080fd5b50610382600480360381019061037d919061450b565b610da9565b005b34801561039057600080fd5b506103ab60048036038101906103a6919061450b565b610e2f565b6040516103bb9493929190614ab1565b60405180910390f35b3480156103d057600080fd5b506103d9610f07565b6040516103e69190614ec8565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190614395565b610f18565b005b34801561042457600080fd5b5061043f600480360381019061043a91906144c2565b610f78565b60405161044c9190614ec8565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190614428565b610fa0565b6040516104899190614ec8565b60405180910390f35b34801561049e57600080fd5b506104a7610ffb565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190614395565b6110c0565b005b3480156104de57600080fd5b506104f960048036038101906104f491906142fb565b611120565b6040516105069190614b6b565b60405180910390f35b6105296004803603810190610524919061450b565b6111ce565b005b34801561053757600080fd5b50610552600480360381019061054d919061450b565b6113fb565b60405161055f9190614ec8565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a919061450b565b61141e565b60405161059e93929190614bca565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c991906144c2565b611500565b005b3480156105dc57600080fd5b506105e5611588565b6040516105f29190614ec8565b60405180910390f35b34801561060757600080fd5b5061061061158e565b60405161061d9190614a96565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061450b565b6115b4565b60405161065a9190614a7b565b60405180910390f35b34801561066f57600080fd5b5061068a6004803603810190610685919061450b565b6115eb565b005b34801561069857600080fd5b506106a1611671565b6040516106ae9190614ba8565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906142fb565b611703565b6040516106eb9190614ec8565b60405180910390f35b34801561070057600080fd5b506107096117c2565b005b34801561071757600080fd5b50610732600480360381019061072d919061450b565b6118fc565b005b34801561074057600080fd5b50610749611d3e565b6040516107569190614a7b565b60405180910390f35b34801561076b57600080fd5b50610774611d67565b6040516107819190614ba8565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac91906143e8565b611df9565b005b3480156107bf57600080fd5b506107c8611f7a565b6040516107d59190614a7b565b60405180910390f35b3480156107ea57600080fd5b506107f3611f9e565b6040516108009190614ec8565b60405180910390f35b34801561081557600080fd5b5061081e611fa4565b60405161082b9190614ec8565b60405180910390f35b34801561084057600080fd5b50610849611faa565b6040516108569190614ba8565b60405180910390f35b34801561086b57600080fd5b50610874612038565b6040516108819190614ba8565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190614538565b6120c6565b005b3480156108bf57600080fd5b506108da60048036038101906108d5919061450b565b612308565b6040516108e79190614ba8565b60405180910390f35b3480156108fc57600080fd5b506109056123b2565b6040516109129190614b8d565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d91906142fb565b6123c5565b60405161094f9190614b6b565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a91906144c2565b61245c565b005b34801561098d57600080fd5b506109966124f2565b6040516109a39190614ba8565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce919061450b565b61250b565b005b3480156109e157600080fd5b506109fc60048036038101906109f79190614355565b61267e565b604051610a099190614b8d565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190614328565b612712565b005b348015610a4757600080fd5b50610a626004803603810190610a5d91906142fb565b6127d2565b005b348015610a7057600080fd5b50610a8b6004803603810190610a869190614468565b61297b565b005b610aa76004803603810190610aa2919061450b565b612a14565b005b348015610ab557600080fd5b50610ad06004803603810190610acb91906144c2565b612e5b565b005b348015610ade57600080fd5b50610af96004803603810190610af4919061450b565b612ef1565b604051610b099493929190614ab1565b60405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054610b89906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb5906151c1565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b5050505050905090565b6000610c1782612fd9565b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90614e08565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c9c826115b4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0490614e88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2c612ff6565b73ffffffffffffffffffffffffffffffffffffffff161480610d5b5750610d5a81610d55612ff6565b61267e565b5b610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190614d68565b60405180910390fd5b610da48383612ffe565b505050565b610db1612ff6565b73ffffffffffffffffffffffffffffffffffffffff16610dcf611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90614e28565b60405180910390fd5b8060108190555050565b601a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054610e7e906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa906151c1565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050908060030154905084565b6000610f1360056130b7565b905090565b610f29610f23612ff6565b826130cc565b610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90614ea8565b60405180910390fd5b610f738383836131aa565b505050565b6000601682604051610f8a9190614a33565b9081526020016040518091039020549050919050565b6000610ff382600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206133d590919063ffffffff16565b905092915050565b611003612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611021611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614e28565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110bd573d6000803e3d6000fd5b50565b6110d16110cb612ff6565b826130cc565b611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614ea8565b60405180910390fd5b61111b8383836133ef565b505050565b6060600061112d83611703565b905060008167ffffffffffffffff81111561114b5761114a615389565b5b6040519080825280602002602001820160405280156111795781602001602082028036833780820191505090505b50905060005b828110156111c3576111918582610fa0565b8282815181106111a4576111a361535a565b5b60200260200101818152505080806111bb90615224565b91505061117f565b508092505050919050565b6000601a60008381526020019081526020016000206001015490506000601a600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561125e57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561129757600080fd5b813410156112a457600080fd5b60006112e06112d160646112c3601154876133ff90919063ffffffff16565b61347a90919063ffffffff16565b846134d290919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611328573d6000803e3d6000fd5b50601a6000858152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600061137c919061413f565b600382016000905550503073ffffffffffffffffffffffffffffffffffffffff166342842e0e3033876040518463ffffffff1660e01b81526004016113c393929190614b34565b600060405180830381600087803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b5050505050505050565b60008061141283600561352b90919063ffffffff16565b50905080915050919050565b6015818154811061142e57600080fd5b9060005260206000209060030201600091509050806000018054611451906151c1565b80601f016020809104026020016040519081016040528092919081815260200182805461147d906151c1565b80156114ca5780601f1061149f576101008083540402835291602001916114ca565b820191906000526020600020905b8154815290600101906020018083116114ad57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b611508612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611526611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390614e28565b60405180910390fd5b61158581613557565b50565b60115481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115e4826040518060600160405280602981526020016159c56029913960056135719092919063ffffffff16565b9050919050565b6115f3612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611611611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90614e28565b60405180910390fd5b8060118190555050565b6060600e8054611680906151c1565b80601f01602080910402602001604051908101604052809291908181526020018280546116ac906151c1565b80156116f95780601f106116ce576101008083540402835291602001916116f9565b820191906000526020600020905b8154815290600101906020018083116116dc57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614d88565b60405180910390fd5b6117bb600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613590565b9050919050565b6117ca612ff6565b73ffffffffffffffffffffffffffffffffffffffff166117e8611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611904612ff6565b73ffffffffffffffffffffffffffffffffffffffff16611922611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614e28565b60405180910390fd5b600f5461199582611987610f07565b6135a590919063ffffffff16565b106119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90614d08565b60405180910390fd5b60005b81811015611d3a57600060405180606001604052806040518060400160405280600181526020017f200000000000000000000000000000000000000000000000000000000000000081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905060158190806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019080519060200190611a9392919061417f565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155505060006001601580549050611afb919061508f565b90508060158281548110611b1257611b1161535a565b5b9060005260206000209060030201600201819055506000611b31611671565b9050600081611b3f84613603565b6014604051602001611b5393929190614a4a565b60405160208183030381529060405290508060158481548110611b7957611b7861535a565b5b90600052602060002090600302016000019080519060200190611b9d92919061417f565b5082601682604051611baf9190614a33565b908152602001604051809103902081905550611bcb3384613764565b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c1b90615224565b91905055506000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084908060018154018082558091505060019003906000526020600020016000909190919091505580601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000208190555050505050508080611d3290615224565b9150506119d8565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054611d76906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611da2906151c1565b8015611def5780601f10611dc457610100808354040283529160200191611def565b820191906000526020600020905b815481529060010190602001808311611dd257829003601f168201915b5050505050905090565b611e01612ff6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6690614cc8565b60405180910390fd5b8060086000611e7c612ff6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f29612ff6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f6e9190614b8d565b60405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60105481565b60138054611fb7906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe3906151c1565b80156120305780601f1061200557610100808354040283529160200191612030565b820191906000526020600020905b81548152906001019060200180831161201357829003601f168201915b505050505081565b60148054612045906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612071906151c1565b80156120be5780601f10612093576101008083540402835291602001916120be565b820191906000526020600020905b8154815290600101906020018083116120a157829003601f168201915b505050505081565b813373ffffffffffffffffffffffffffffffffffffffff166120e7826115b4565b73ffffffffffffffffffffffffffffffffffffffff161461210757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601a600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217657600080fd5b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001601586815481106121b9576121b861535a565b5b906000526020600020906003020160000180546121d5906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612201906151c1565b801561224e5780601f106122235761010080835404028352916020019161224e565b820191906000526020600020905b81548152906001019060200180831161223157829003601f168201915b5050505050815260200185815250905080601a600086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020190805190602001906122df92919061417f565b50606082015181600301559050506122f73085610c91565b6123023330866110c0565b50505050565b606061231382612fd9565b612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990614e68565b60405180910390fd5b600061235c611671565b9050600081511161237c57604051806020016040528060008152506123aa565b8061238684613603565b601460405160200161239a93929190614a4a565b6040516020818303038152906040525b915050919050565b601c60009054906101000a900460ff1681565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561245057602002820191906000526020600020905b81548152602001906001019080831161243c575b50505050509050919050565b612464612ff6565b73ffffffffffffffffffffffffffffffffffffffff16612482611d3e565b73ffffffffffffffffffffffffffffffffffffffff16146124d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cf90614e28565b60405180910390fd5b80601490805190602001906124ee92919061417f565b5050565b606061250661250160056130b7565b613603565b905090565b3373ffffffffffffffffffffffffffffffffffffffff16601a600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461257957600080fd5b3073ffffffffffffffffffffffffffffffffffffffff166342842e0e30601a600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016125ec93929190614afd565b600060405180830381600087803b15801561260657600080fd5b505af115801561261a573d6000803e3d6000fd5b50505050601a6000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000612671919061413f565b6003820160009055505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61271a612ff6565b73ffffffffffffffffffffffffffffffffffffffff16612738611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614e28565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127da612ff6565b73ffffffffffffffffffffffffffffffffffffffff166127f8611d3e565b73ffffffffffffffffffffffffffffffffffffffff161461284e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284590614e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590614c28565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612983612ff6565b73ffffffffffffffffffffffffffffffffffffffff166129a1611d3e565b73ffffffffffffffffffffffffffffffffffffffff16146129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614e28565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b601c60009054906101000a900460ff16612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a90614c48565b60405180910390fd5b600f54612a8082612a72610f07565b6135a590919063ffffffff16565b10612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614d08565b60405180910390fd5b612ae66000821115612ad25781612ad5565b60015b6010546133ff90919063ffffffff16565b341015612af257600080fd5b60005b81811015612e5757600060405180606001604052806040518060400160405280600181526020017f200000000000000000000000000000000000000000000000000000000000000081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905060158190806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019080519060200190612bb092919061417f565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155505060006001601580549050612c18919061508f565b90508060158281548110612c2f57612c2e61535a565b5b9060005260206000209060030201600201819055506000612c4e611671565b9050600081612c5c84613603565b6014604051602001612c7093929190614a4a565b60405160208183030381529060405290508060158481548110612c9657612c9561535a565b5b90600052602060002090600302016000019080519060200190612cba92919061417f565b5082601682604051612ccc9190614a33565b908152602001604051809103902081905550612ce83384613764565b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612d3890615224565b91905055506000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084908060018154018082558091505060019003906000526020600020016000909190919091505580601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000208190555050505050508080612e4f90615224565b915050612af5565b5050565b612e63612ff6565b73ffffffffffffffffffffffffffffffffffffffff16612e81611d3e565b73ffffffffffffffffffffffffffffffffffffffff1614612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614e28565b60405180910390fd5b8060139080519060200190612eed92919061417f565b5050565b601b8181548110612f0157600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054612f50906151c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7c906151c1565b8015612fc95780601f10612f9e57610100808354040283529160200191612fc9565b820191906000526020600020905b815481529060010190602001808311612fac57829003601f168201915b5050505050908060030154905084565b6000612fef82600561394290919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613071836115b4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130c58260000161395c565b9050919050565b60006130d782612fd9565b613116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310d90614d28565b60405180910390fd5b6000613121836115b4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061319057508373ffffffffffffffffffffffffffffffffffffffff1661317884610c0c565b73ffffffffffffffffffffffffffffffffffffffff16145b806131a157506131a0818561267e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166131ca826115b4565b73ffffffffffffffffffffffffffffffffffffffff1614613220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321790614e48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328790614ca8565b60405180910390fd5b61329b83838361396d565b6132a6600082612ffe565b6132f781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061397290919063ffffffff16565b5061334981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061398c90919063ffffffff16565b5061335483826139a6565b61335e8282613bd6565b61337481836005613ca09092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006133e48360000183613cd5565b60001c905092915050565b6133fa8383836131aa565b505050565b6000808314156134125760009050613474565b600082846134209190615035565b905082848261342f9190615004565b1461346f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346690614de8565b60405180910390fd5b809150505b92915050565b60008082116134be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b590614d48565b60405180910390fd5b81836134ca9190615004565b905092915050565b600082821115613517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350e90614ce8565b60405180910390fd5b8183613523919061508f565b905092915050565b60008060008061353e8660000186613d49565b915091508160001c8160001c9350935050509250929050565b80600e908051906020019061356d92919061417f565b5050565b6000613584846000018460001b84613dd3565b60001c90509392505050565b600061359e82600001613e74565b9050919050565b60008082846135b49190614fae565b9050838110156135f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f090614c88565b60405180910390fd5b8091505092915050565b6060600082141561364b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061375f565b600082905060005b6000821461367d57808061366690615224565b915050600a826136769190615004565b9150613653565b60008167ffffffffffffffff81111561369957613698615389565b5b6040519080825280601f01601f1916602001820160405280156136cb5781602001600182028036833780820191505090505b5090505b60008514613758576001826136e4919061508f565b9150600a856136f3919061526d565b60306136ff9190614fae565b60f81b8183815181106137155761371461535a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137519190615004565b94506136cf565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137cb90614dc8565b60405180910390fd5b6137dd81612fd9565b1561381d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381490614c68565b60405180910390fd5b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505561386f6000838361396d565b6138c081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061398c90919063ffffffff16565b506138cb8282613bd6565b6138e181836005613ca09092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613954836000018360001b613e85565b905092915050565b600081600001805490509050919050565b505050565b6000613984836000018360001b613ea8565b905092915050565b600061399e836000018360001b613fc0565b905092915050565b6000600460008381526020019081526020016000205490506000613a166001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506134d290919063ffffffff16565b90506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110613a6b57613a6a61535a565b5b9060005260206000200154905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110613aca57613ac961535a565b5b90600052602060002001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110613b2b57613b2a61535a565b5b9060005260206000200181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480613b8857613b8761532b565b5b60019003818190600052602060002001600090559055600060046000868152602001908152602001600020819055508260046000838152602001908152602001600020819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055806004600084815260200190815260200160002081905550505050565b6000613ccc846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b614030565b90509392505050565b600081836000018054905011613d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1790614c08565b60405180910390fd5b826000018281548110613d3657613d3561535a565b5b9060005260206000200154905092915050565b60008082846000018054905011613d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8c90614da8565b60405180910390fd5b6000846000018481548110613dad57613dac61535a565b5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390613e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2c9190614ba8565b60405180910390fd5b5084600001600182613e47919061508f565b81548110613e5857613e5761535a565b5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114613fb4576000600182613eda919061508f565b9050600060018660000180549050613ef2919061508f565b90506000866000018281548110613f0c57613f0b61535a565b5b9060005260206000200154905080876000018481548110613f3057613f2f61535a565b5b9060005260206000200181905550600183613f4b9190614fae565b8760010160008381526020019081526020016000208190555086600001805480613f7857613f7761532b565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613fba565b60009150505b92915050565b6000613fcc838361411c565b61402557826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061402a565b600090505b92915050565b60008084600101600085815260200190815260200160002054905060008114156140d757846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050614115565b82856000016001836140e9919061508f565b815481106140fa576140f961535a565b5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b50805461414b906151c1565b6000825580601f1061415d575061417c565b601f01602090049060005260206000209081019061417b9190614205565b5b50565b82805461418b906151c1565b90600052602060002090601f0160209004810192826141ad57600085556141f4565b82601f106141c657805160ff19168380011785556141f4565b828001600101855582156141f4579182015b828111156141f35782518255916020019190600101906141d8565b5b5090506142019190614205565b5090565b5b8082111561421e576000816000905550600101614206565b5090565b600061423561423084614f08565b614ee3565b905082815260208101848484011115614251576142506153bd565b5b61425c84828561517f565b509392505050565b60008135905061427381615951565b92915050565b60008135905061428881615968565b92915050565b60008135905061429d8161597f565b92915050565b6000813590506142b281615996565b92915050565b600082601f8301126142cd576142cc6153b8565b5b81356142dd848260208601614222565b91505092915050565b6000813590506142f5816159ad565b92915050565b600060208284031215614311576143106153c7565b5b600061431f84828501614264565b91505092915050565b60006020828403121561433e5761433d6153c7565b5b600061434c84828501614279565b91505092915050565b6000806040838503121561436c5761436b6153c7565b5b600061437a85828601614264565b925050602061438b85828601614264565b9150509250929050565b6000806000606084860312156143ae576143ad6153c7565b5b60006143bc86828701614264565b93505060206143cd86828701614264565b92505060406143de868287016142e6565b9150509250925092565b600080604083850312156143ff576143fe6153c7565b5b600061440d85828601614264565b925050602061441e8582860161428e565b9150509250929050565b6000806040838503121561443f5761443e6153c7565b5b600061444d85828601614264565b925050602061445e858286016142e6565b9150509250929050565b60006020828403121561447e5761447d6153c7565b5b600061448c8482850161428e565b91505092915050565b6000602082840312156144ab576144aa6153c7565b5b60006144b9848285016142a3565b91505092915050565b6000602082840312156144d8576144d76153c7565b5b600082013567ffffffffffffffff8111156144f6576144f56153c2565b5b614502848285016142b8565b91505092915050565b600060208284031215614521576145206153c7565b5b600061452f848285016142e6565b91505092915050565b6000806040838503121561454f5761454e6153c7565b5b600061455d858286016142e6565b925050602061456e858286016142e6565b9150509250929050565b60006145848383614a15565b60208301905092915050565b61459981615149565b82525050565b6145a8816150d5565b82525050565b6145b7816150c3565b82525050565b60006145c882614f5e565b6145d28185614f81565b93506145dd83614f39565b8060005b8381101561460e5781516145f58882614578565b975061460083614f74565b9250506001810190506145e1565b5085935050505092915050565b614624816150e7565b82525050565b600061463582614f69565b61463f8185614f92565b935061464f81856020860161518e565b614658816153cc565b840191505092915050565b600061466e82614f69565b6146788185614fa3565b935061468881856020860161518e565b80840191505092915050565b600081546146a1816151c1565b6146ab8186614fa3565b945060018216600081146146c657600181146146d75761470a565b60ff1983168652818601935061470a565b6146e085614f49565b60005b83811015614702578154818901526001820191506020810190506146e3565b838801955050505b50505092915050565b6000614720602283614f92565b915061472b826153dd565b604082019050919050565b6000614743602683614f92565b915061474e8261542c565b604082019050919050565b6000614766600c83614f92565b91506147718261547b565b602082019050919050565b6000614789601c83614f92565b9150614794826154a4565b602082019050919050565b60006147ac601b83614f92565b91506147b7826154cd565b602082019050919050565b60006147cf602483614f92565b91506147da826154f6565b604082019050919050565b60006147f2601983614f92565b91506147fd82615545565b602082019050919050565b6000614815601e83614f92565b91506148208261556e565b602082019050919050565b6000614838600f83614f92565b915061484382615597565b602082019050919050565b600061485b602c83614f92565b9150614866826155c0565b604082019050919050565b600061487e601a83614f92565b91506148898261560f565b602082019050919050565b60006148a1603883614f92565b91506148ac82615638565b604082019050919050565b60006148c4602a83614f92565b91506148cf82615687565b604082019050919050565b60006148e7602283614f92565b91506148f2826156d6565b604082019050919050565b600061490a602083614f92565b915061491582615725565b602082019050919050565b600061492d602183614f92565b91506149388261574e565b604082019050919050565b6000614950602c83614f92565b915061495b8261579d565b604082019050919050565b6000614973602083614f92565b915061497e826157ec565b602082019050919050565b6000614996602983614f92565b91506149a182615815565b604082019050919050565b60006149b9602f83614f92565b91506149c482615864565b604082019050919050565b60006149dc602183614f92565b91506149e7826158b3565b604082019050919050565b60006149ff603183614f92565b9150614a0a82615902565b604082019050919050565b614a1e8161513f565b82525050565b614a2d8161513f565b82525050565b6000614a3f8284614663565b915081905092915050565b6000614a568286614663565b9150614a628285614663565b9150614a6e8284614694565b9150819050949350505050565b6000602082019050614a9060008301846145ae565b92915050565b6000602082019050614aab600083018461459f565b92915050565b6000608082019050614ac6600083018761459f565b614ad36020830186614a24565b8181036040830152614ae5818561462a565b9050614af46060830184614a24565b95945050505050565b6000606082019050614b1260008301866145ae565b614b1f6020830185614590565b614b2c6040830184614a24565b949350505050565b6000606082019050614b4960008301866145ae565b614b5660208301856145ae565b614b636040830184614a24565b949350505050565b60006020820190508181036000830152614b8581846145bd565b905092915050565b6000602082019050614ba2600083018461461b565b92915050565b60006020820190508181036000830152614bc2818461462a565b905092915050565b60006060820190508181036000830152614be4818661462a565b9050614bf360208301856145ae565b614c006040830184614a24565b949350505050565b60006020820190508181036000830152614c2181614713565b9050919050565b60006020820190508181036000830152614c4181614736565b9050919050565b60006020820190508181036000830152614c6181614759565b9050919050565b60006020820190508181036000830152614c818161477c565b9050919050565b60006020820190508181036000830152614ca18161479f565b9050919050565b60006020820190508181036000830152614cc1816147c2565b9050919050565b60006020820190508181036000830152614ce1816147e5565b9050919050565b60006020820190508181036000830152614d0181614808565b9050919050565b60006020820190508181036000830152614d218161482b565b9050919050565b60006020820190508181036000830152614d418161484e565b9050919050565b60006020820190508181036000830152614d6181614871565b9050919050565b60006020820190508181036000830152614d8181614894565b9050919050565b60006020820190508181036000830152614da1816148b7565b9050919050565b60006020820190508181036000830152614dc1816148da565b9050919050565b60006020820190508181036000830152614de1816148fd565b9050919050565b60006020820190508181036000830152614e0181614920565b9050919050565b60006020820190508181036000830152614e2181614943565b9050919050565b60006020820190508181036000830152614e4181614966565b9050919050565b60006020820190508181036000830152614e6181614989565b9050919050565b60006020820190508181036000830152614e81816149ac565b9050919050565b60006020820190508181036000830152614ea1816149cf565b9050919050565b60006020820190508181036000830152614ec1816149f2565b9050919050565b6000602082019050614edd6000830184614a24565b92915050565b6000614eed614efe565b9050614ef982826151f3565b919050565b6000604051905090565b600067ffffffffffffffff821115614f2357614f22615389565b5b614f2c826153cc565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fb98261513f565b9150614fc48361513f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ff957614ff861529e565b5b828201905092915050565b600061500f8261513f565b915061501a8361513f565b92508261502a576150296152cd565b5b828204905092915050565b60006150408261513f565b915061504b8361513f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150845761508361529e565b5b828202905092915050565b600061509a8261513f565b91506150a58361513f565b9250828210156150b8576150b761529e565b5b828203905092915050565b60006150ce8261511f565b9050919050565b60006150e08261511f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006151548261515b565b9050919050565b60006151668261516d565b9050919050565b60006151788261511f565b9050919050565b82818337600083830152505050565b60005b838110156151ac578082015181840152602081019050615191565b838111156151bb576000848401525b50505050565b600060028204905060018216806151d957607f821691505b602082108114156151ed576151ec6152fc565b5b50919050565b6151fc826153cc565b810181811067ffffffffffffffff8211171561521b5761521a615389565b5b80604052505050565b600061522f8261513f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152625761526161529e565b5b600182019050919050565b60006152788261513f565b91506152838361513f565b925082615293576152926152cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74207061757365642e0000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f4c696d69742065786365656465642e0000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61595a816150c3565b811461596557600080fd5b50565b615971816150d5565b811461597c57600080fd5b50565b615988816150e7565b811461599357600080fd5b50565b61599f816150f3565b81146159aa57600080fd5b50565b6159b68161513f565b81146159c157600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220d54df41d94246e5be0556c857f46ae28c1b0a836a6c6f2e3008fb364acbcee0264736f6c63430008070033
Deployed Bytecode Sourcemap
38124:7185:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2301:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27619:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31264:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30794:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40240:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39158:66;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30272:211;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32154:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40645:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30034:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39803:107;;;;;;;;;;;;;:::i;:::-;;32538:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44916:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44272:636;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30560:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38707:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40347:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38538:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38572:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27375:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40549:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28994:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27092:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37717:148;;;;;;;;;;;;;:::i;:::-;;42231:1173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37494:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27788:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31557:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37210:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38438:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38479:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38610:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38661:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43412:557;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39313:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39276:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40787:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40126:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29099:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43977:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31923:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39918:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37873:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40452:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40919:1304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40024:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39231:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;2301:150;2386:4;2410:20;:33;2431:11;2410:33;;;;;;;;;;;;;;;;;;;;;;;;;;;2403:40;;2301:150;;;:::o;27619:100::-;27673:13;27706:5;27699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27619:100;:::o;31264:221::-;31340:7;31368:16;31376:7;31368;:16::i;:::-;31360:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:15;:24;31469:7;31453:24;;;;;;;;;;;;;;;;;;;;;31446:31;;31264:221;;;:::o;30794:404::-;30875:13;30891:23;30906:7;30891:14;:23::i;:::-;30875:39;;30939:5;30933:11;;:2;:11;;;;30925:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31019:5;31003:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;31028:44;31052:5;31059:12;:10;:12::i;:::-;31028:23;:44::i;:::-;31003:69;30995:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;31169:21;31178:2;31182:7;31169:8;:21::i;:::-;30864:334;30794:404;;:::o;40240:99::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40325:6:::1;40306:16;:25;;;;40240:99:::0;:::o;39158:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30272:211::-;30333:7;30454:21;:12;:19;:21::i;:::-;30447:28;;30272:211;:::o;32154:313::-;32315:41;32334:12;:10;:12::i;:::-;32348:7;32315:18;:41::i;:::-;32307:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32431:28;32441:4;32447:2;32451:7;32431:9;:28::i;:::-;32154:313;;;:::o;40645:134::-;40719:7;40745:17;40763:7;40745:26;;;;;;:::i;:::-;;;;;;;;;;;;;;40738:33;;40645:134;;;:::o;30034:162::-;30131:7;30158:30;30182:5;30158:13;:20;30172:5;30158:20;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;30151:37;;30034:162;;;;:::o;39803:107::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39859:10:::1;39851:28;;:51;39880:21;39851:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39803:107::o:0;32538:258::-;32650:41;32669:12;:10;:12::i;:::-;32683:7;32650:18;:41::i;:::-;32642:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32756:32;32770:4;32776:2;32780:7;32756:13;:32::i;:::-;32538:258;;;:::o;44916:386::-;45003:16;45037:23;45063:17;45073:6;45063:9;:17::i;:::-;45037:43;;45091:25;45133:15;45119:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45091:58;;45165:9;45160:109;45180:15;45176:1;:19;45160:109;;;45227:30;45247:6;45255:1;45227:19;:30::i;:::-;45213:8;45222:1;45213:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45197:3;;;;;:::i;:::-;;;;45160:109;;;;45286:8;45279:15;;;;44916:386;;;:::o;44272:636::-;44340:22;44365:23;:33;44389:8;44365:33;;;;;;;;;;;:39;;;44340:64;;44415:29;44447:23;:33;44471:8;44447:33;;;;;;;;;;;:40;;;;;;;;;;;;44415:72;;44533:1;44508:27;;:13;:27;;;;44500:36;;;;;;44572:10;44555:27;;:13;:27;;;;44547:36;;;;;;44615:14;44602:9;:27;;44594:36;;;;;;44643:23;44669:56;44688:36;44720:3;44688:27;44707:7;;44688:14;:18;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;44669:14;:18;;:56;;;;:::i;:::-;44643:82;;44736:13;:22;;:39;44759:15;44736:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44798:23;:33;44822:8;44798:33;;;;;;;;;;;;44791:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;44842:4;:21;;;44872:4;44879:10;44891:8;44842:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44329:579;;;44272:636;:::o;30560:172::-;30635:7;30656:15;30677:22;30693:5;30677:12;:15;;:22;;;;:::i;:::-;30655:44;;;30717:7;30710:14;;;30560:172;;;:::o;38707:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40347:97::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40417:19:::1;40429:6;40417:11;:19::i;:::-;40347:97:::0;:::o;38538:27::-;;;;:::o;38572:31::-;;;;;;;;;;;;;:::o;27375:177::-;27447:7;27474:70;27491:7;27474:70;;;;;;;;;;;;;;;;;:12;:16;;:70;;;;;:::i;:::-;27467:77;;27375:177;;;:::o;40549:88::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40623:6:::1;40613:7;:16;;;;40549:88:::0;:::o;28994:97::-;29042:13;29075:8;29068:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28994:97;:::o;27092:221::-;27164:7;27209:1;27192:19;;:5;:19;;;;27184:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27276:29;:13;:20;27290:5;27276:20;;;;;;;;;;;;;;;:27;:29::i;:::-;27269:36;;27092:221;;;:::o;37717:148::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37824:1:::1;37787:40;;37808:6;::::0;::::1;;;;;;;;37787:40;;;;;;;;;;;;37855:1;37838:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;37717:148::o:0;42231:1173::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42339:12:::1;;42310:26;42328:7;42310:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:41;42302:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42388:9;42384:1013;42407:7;42403:1;:11;42384:1013;;;42435:30;42468:125;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;42542:10;42468:125;;;;;;42576:1;42468:125;;::::0;42435:158:::1;;42610:12;42628;42610:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42658:24;42707:1;42685:12;:19;;;;:23;;;;:::i;:::-;42658:50;;42759:16;42723:12;42736:16;42723:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;:52;;;;42790:21;42814:9;:7;:9::i;:::-;42790:33;;42838:26;42891:7;42900:27;:16;:25;:27::i;:::-;42930:13;42874:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42838:107;;43002:12;42960;42973:16;42960:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;:54;;;;;;;;;;;;:::i;:::-;;43063:16;43029:17;43047:12;43029:31;;;;;;:::i;:::-;;;;;;;;;;;;;:50;;;;43094:35;43100:10;43112:16;43094:5;:35::i;:::-;43146:20;:32;43167:10;43146:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;43195:14;43212:15;:27;43228:10;43212:27;;;;;;;;;;;;;;;:34;;;;43195:51;;43261:15;:27;43277:10;43261:27;;;;;;;;;;;;;;;43294:16;43261:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43379:6;43326:20;:32;43347:10;43326:32;;;;;;;;;;;;;;;:50;43359:16;43326:50;;;;;;;;;;;:59;;;;42420:977;;;;;42416:3;;;;;:::i;:::-;;;;42384:1013;;;;42231:1173:::0;:::o;37494:87::-;37540:7;37567:6;;;;;;;;;;;37560:13;;37494:87;:::o;27788:104::-;27844:13;27877:7;27870:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27788:104;:::o;31557:295::-;31672:12;:10;:12::i;:::-;31660:24;;:8;:24;;;;31652:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31772:8;31727:18;:32;31746:12;:10;:12::i;:::-;31727:32;;;;;;;;;;;;;;;:42;31760:8;31727:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31825:8;31796:48;;31811:12;:10;:12::i;:::-;31796:48;;;31835:8;31796:48;;;;;;:::i;:::-;;;;;;;;31557:295;;:::o;37210:21::-;;;;;;;;;;;;:::o;38438:34::-;;;;:::o;38479:52::-;;;;:::o;38610:44::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38661:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43412:557::-;43492:8;26872:10;26851:31;;:17;26859:8;26851:7;:17::i;:::-;:31;;;26843:40;;;;;;43573:1:::1;43521:54;;:23;:33;43545:8;43521:33;;;;;;;;;;;:40;;;;;;;;;;;;:54;;;43513:63;;;::::0;::::1;;43589:37;43629:161;;;;;;;;43666:10;43629:161;;;;;;43701:6;43629:161;;;;43724:12;43737:8;43724:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;43629:161;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43771:8;43629:161;;::::0;43589:201:::1;;43839:15;43803:23;:33;43827:8;43803:33;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43865:32;43881:4;43888:8;43865:7;:32::i;:::-;43908:53;43925:10;43945:4;43952:8;43908:16;:53::i;:::-;43502:467;43412:557:::0;;;:::o;39313:482::-;39431:13;39480:16;39488:7;39480;:16::i;:::-;39462:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;39588:28;39619:9;:7;:9::i;:::-;39588:40;;39677:1;39652:14;39646:28;:32;:141;;;;;;;;;;;;;;;;;39718:14;39734:18;:7;:16;:18::i;:::-;39754:13;39701:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39646:141;39639:148;;;39313:482;;;:::o;39276:28::-;;;;;;;;;;;;;:::o;40787:124::-;40848:16;40884:11;:19;40896:6;40884:19;;;;;;;;;;;;;;;40877:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40787:124;;;:::o;40126:106::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40218:6:::1;40202:13;:22;;;;;;;;;;;;:::i;:::-;;40126:106:::0;:::o;29099:131::-;29157:13;29190:32;:21;:12;:19;:21::i;:::-;:30;:32::i;:::-;29183:39;;29099:131;:::o;43977:287::-;44095:10;44051:54;;:23;:33;44075:8;44051:33;;;;;;;;;;;:40;;;;;;;;;;;;:54;;;44043:63;;;;;;44117:4;:21;;;44147:4;44154:23;:33;44178:8;44154:33;;;;;;;;;;;:40;;;;;;;;;;;;44196:8;44117:88;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44223:23;:33;44247:8;44223:33;;;;;;;;;;;;44216:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;43977:287;:::o;31923:164::-;32020:4;32044:18;:25;32063:5;32044:25;;;;;;;;;;;;;;;:35;32070:8;32044:35;;;;;;;;;;;;;;;;;;;;;;;;;32037:42;;31923:164;;;;:::o;39918:98::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40002:6:::1;39991:8;;:17;;;;;;;;;;;;;;;;;;39918:98:::0;:::o;37873:244::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37982:1:::1;37962:22;;:8;:22;;;;37954:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38072:8;38043:38;;38064:6;::::0;::::1;;;;;;;;38043:38;;;;;;;;;;;;38101:8;38092:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;37873:244:::0;:::o;40452:89::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40527:6:::1;40515:9;;:18;;;;;;;;;;;;;;;;;;40452:89:::0;:::o;40919:1304::-;40991:9;;;;;;;;;;;40983:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;41065:12;;41036:26;41054:7;41036:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:41;41028:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41131:48;41163:1;41152:7;:12;;:26;;41171:7;41152:26;;;41167:1;41152:26;41131:16;;:20;;:48;;;;:::i;:::-;41118:9;:61;;41110:70;;;;;;41207:9;41203:1013;41226:7;41222:1;:11;41203:1013;;;41254:30;41287:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41361:10;41287:125;;;;;;41395:1;41287:125;;;41254:158;;41429:12;41447;41429:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41477:24;41526:1;41504:12;:19;;;;:23;;;;:::i;:::-;41477:50;;41578:16;41542:12;41555:16;41542:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;:52;;;;41609:21;41633:9;:7;:9::i;:::-;41609:33;;41657:26;41710:7;41719:27;:16;:25;:27::i;:::-;41749:13;41693:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41657:107;;41821:12;41779;41792:16;41779:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;:54;;;;;;;;;;;;:::i;:::-;;41882:16;41848:17;41866:12;41848:31;;;;;;:::i;:::-;;;;;;;;;;;;;:50;;;;41913:35;41919:10;41931:16;41913:5;:35::i;:::-;41965:20;:32;41986:10;41965:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;42014:14;42031:15;:27;42047:10;42031:27;;;;;;;;;;;;;;;:34;;;;42014:51;;42080:15;:27;42096:10;42080:27;;;;;;;;;;;;;;;42113:16;42080:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42198:6;42145:20;:32;42166:10;42145:32;;;;;;;;;;;;;;;:50;42178:16;42145:50;;;;;;;;;;;:59;;;;41239:977;;;;;41235:3;;;;;:::i;:::-;;;;41203:1013;;;;40919:1304;:::o;40024:94::-;37640:12;:10;:12::i;:::-;37629:23;;:7;:5;:7::i;:::-;:23;;;37621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40104:6:::1;40094:7;:16;;;;;;;;;;;;:::i;:::-;;40024:94:::0;:::o;39231:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32942:127::-;33007:4;33031:30;33053:7;33031:12;:21;;:30;;;;:::i;:::-;33024:37;;32942:127;;;:::o;95:115::-;148:15;191:10;176:26;;95:115;:::o;36884:183::-;36977:2;36950:15;:24;36966:7;36950:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37033:7;37029:2;36995:46;;37004:23;37019:7;37004:14;:23::i;:::-;36995:46;;;;;;;;;;;;36884:183;;:::o;21091:123::-;21160:7;21187:19;21195:3;:10;;21187:7;:19::i;:::-;21180:26;;21091:123;;;:::o;33079:355::-;33172:4;33197:16;33205:7;33197;:16::i;:::-;33189:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33273:13;33289:23;33304:7;33289:14;:23::i;:::-;33273:39;;33342:5;33331:16;;:7;:16;;;:51;;;;33375:7;33351:31;;:20;33363:7;33351:11;:20::i;:::-;:31;;;33331:51;:94;;;;33386:39;33410:5;33417:7;33386:23;:39::i;:::-;33331:94;33323:103;;;33079:355;;;;:::o;34690:684::-;34815:4;34788:31;;:23;34803:7;34788:14;:23::i;:::-;:31;;;34780:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34916:1;34902:16;;:2;:16;;;;34894:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34972:39;34993:4;34999:2;35003:7;34972:20;:39::i;:::-;35076:29;35093:1;35097:7;35076:8;:29::i;:::-;35118:35;35145:7;35118:13;:19;35132:4;35118:19;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;;35164:30;35186:7;35164:13;:17;35178:2;35164:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;35207;35223:4;35229:7;35207:15;:30::i;:::-;35248:23;35259:2;35263:7;35248:10;:23::i;:::-;35292:29;35309:7;35318:2;35292:12;:16;;:29;;;;;:::i;:::-;;35358:7;35354:2;35339:27;;35348:4;35339:27;;;;;;;;;;;;34690:684;;;:::o;14174:137::-;14245:7;14280:22;14284:3;:10;;14296:5;14280:3;:22::i;:::-;14272:31;;14265:38;;14174:137;;;;:::o;32804:130::-;32898:28;32908:4;32914:2;32918:7;32898:9;:28::i;:::-;32804:130;;;:::o;3952:220::-;4010:7;4039:1;4034;:6;4030:20;;;4049:1;4042:8;;;;4030:20;4061:9;4077:1;4073;:5;;;;:::i;:::-;4061:17;;4106:1;4101;4097;:5;;;;:::i;:::-;:10;4089:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4163:1;4156:8;;;3952:220;;;;;:::o;4180:153::-;4238:7;4270:1;4266;:5;4258:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;4324:1;4320;:5;;;;:::i;:::-;4313:12;;4180:153;;;;:::o;3786:158::-;3844:7;3877:1;3872;:6;;3864:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3935:1;3931;:5;;;;:::i;:::-;3924:12;;3786:158;;;;:::o;21224:236::-;21304:7;21313;21334:11;21347:13;21364:22;21368:3;:10;;21380:5;21364:3;:22::i;:::-;21333:53;;;;21413:3;21405:12;;21443:5;21435:14;;21397:55;;;;;;21224:236;;;;;:::o;35607:100::-;35691:8;35680;:19;;;;;;;;;;;;:::i;:::-;;35607:100;:::o;22232:213::-;22339:7;22390:44;22395:3;:10;;22415:3;22407:12;;22421;22390:4;:44::i;:::-;22382:53;;22359:78;;22232:213;;;;;:::o;14052:114::-;14112:7;14139:19;14147:3;:10;;14139:7;:19::i;:::-;14132:26;;14052:114;;;:::o;3599:179::-;3657:7;3677:9;3693:1;3689;:5;;;;:::i;:::-;3677:17;;3718:1;3713;:6;;3705:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3769:1;3762:8;;;3599:179;;;;:::o;22678:723::-;22734:13;22964:1;22955:5;:10;22951:53;;;22982:10;;;;;;;;;;;;;;;;;;;;;22951:53;23014:12;23029:5;23014:20;;23045:14;23070:78;23085:1;23077:4;:9;23070:78;;23103:8;;;;;:::i;:::-;;;;23134:2;23126:10;;;;;:::i;:::-;;;23070:78;;;23158:19;23190:6;23180:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23158:39;;23208:154;23224:1;23215:5;:10;23208:154;;23252:1;23242:11;;;;;:::i;:::-;;;23319:2;23311:5;:10;;;;:::i;:::-;23298:2;:24;;;;:::i;:::-;23285:39;;23268:6;23275;23268:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;23348:2;23339:11;;;;;:::i;:::-;;;23208:154;;;23386:6;23372:21;;;;;22678:723;;;;:::o;33552:529::-;33646:1;33632:16;;:2;:16;;;;33624:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33705:16;33713:7;33705;:16::i;:::-;33704:17;33696:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33793:9;:16;;;;33767:14;:23;33782:7;33767:23;;;;;;;;;;;:42;;;;33820:9;33835:7;33820:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33856:45;33885:1;33889:2;33893:7;33856:20;:45::i;:::-;33914:30;33936:7;33914:13;:17;33928:2;33914:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;33957:23;33968:2;33972:7;33957:10;:23::i;:::-;33993:29;34010:7;34019:2;33993:12;:16;;:29;;;;;:::i;:::-;;34065:7;34061:2;34040:33;;34057:1;34040:33;;;;;;;;;;;;33552:529;;:::o;20852:151::-;20936:4;20960:35;20970:3;:10;;20990:3;20982:12;;20960:9;:35::i;:::-;20953:42;;20852:151;;;;:::o;17670:110::-;17726:7;17753:3;:12;;:19;;;;17746:26;;17670:110;;;:::o;37075:93::-;;;;:::o;13597:137::-;13667:4;13691:35;13699:3;:10;;13719:5;13711:14;;13691:7;:35::i;:::-;13684:42;;13597:137;;;;:::o;13290:131::-;13357:4;13381:32;13386:3;:10;;13406:5;13398:14;;13381:4;:32::i;:::-;13374:39;;13290:131;;;;:::o;29453:499::-;29531:18;29552:16;:26;29569:8;29552:26;;;;;;;;;;;;29531:47;;29589:22;29614:32;29644:1;29614:11;:18;29626:5;29614:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;29589:57;;29657:17;29677:11;:18;29689:5;29677:18;;;;;;;;;;;;;;;29696:14;29677:34;;;;;;;;:::i;:::-;;;;;;;;;;29657:54;;29757:9;29724:11;:18;29736:5;29724:18;;;;;;;;;;;;;;;29743:10;29724:30;;;;;;;;:::i;:::-;;;;;;;;;:42;;;;29814:1;29777:11;:18;29789:5;29777:18;;;;;;;;;;;;;;;29796:14;29777:34;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;29828:11;:18;29840:5;29828:18;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29892:1;29863:16;:26;29880:8;29863:26;;;;;;;;;;;:30;;;;29934:10;29904:16;:27;29921:9;29904:27;;;;;;;;;;;:40;;;;29520:432;;;29453:499;;:::o;29238:207::-;29309:14;29326:11;:16;29338:3;29326:16;;;;;;;;;;;;;;;:23;;;;29309:40;;29360:11;:16;29372:3;29360:16;;;;;;;;;;;;;;;29382:8;29360:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29431:6;29402:16;:26;29419:8;29402:26;;;;;;;;;;;:35;;;;29298:147;29238:207;;:::o;20275:185::-;20364:4;20388:64;20393:3;:10;;20413:3;20405:12;;20443:5;20427:23;;20419:32;;20388:4;:64::i;:::-;20381:71;;20275:185;;;;;:::o;10886:204::-;10953:7;11002:5;10981:3;:11;;:18;;;;:26;10973:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11064:3;:11;;11076:5;11064:18;;;;;;;;:::i;:::-;;;;;;;;;;11057:25;;10886:204;;;;:::o;18135:279::-;18202:7;18211;18261:5;18239:3;:12;;:19;;;;:27;18231:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18318:22;18343:3;:12;;18356:5;18343:19;;;;;;;;:::i;:::-;;;;;;;;;;;;18318:44;;18381:5;:10;;;18393:5;:12;;;18373:33;;;;;18135:279;;;;;:::o;19632:319::-;19726:7;19746:16;19765:3;:12;;:17;19778:3;19765:17;;;;;;;;;;;;19746:36;;19813:1;19801:8;:13;;19816:12;19793:36;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19883:3;:12;;19907:1;19896:8;:12;;;;:::i;:::-;19883:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;19876:40;;;19632:319;;;;;:::o;10769:109::-;10825:7;10852:3;:11;;:18;;;;10845:25;;10769:109;;;:::o;17450:125::-;17521:4;17566:1;17545:3;:12;;:17;17558:3;17545:17;;;;;;;;;;;;:22;;17538:29;;17450:125;;;;:::o;9596:1026::-;9662:4;9780:18;9801:3;:12;;:19;9814:5;9801:19;;;;;;;;;;;;9780:40;;9851:1;9837:10;:15;9833:782;;9909:21;9946:1;9933:10;:14;;;;:::i;:::-;9909:38;;9962:17;10003:1;9982:3;:11;;:18;;;;:22;;;;:::i;:::-;9962:42;;10021:17;10041:3;:11;;10053:9;10041:22;;;;;;;;:::i;:::-;;;;;;;;;;10021:42;;10187:9;10158:3;:11;;10170:13;10158:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;10306:1;10290:13;:17;;;;:::i;:::-;10264:3;:12;;:23;10277:9;10264:23;;;;;;;;;;;:43;;;;10416:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10511:3;:12;;:19;10524:5;10511:19;;;;;;;;;;;10504:26;;;10554:4;10547:11;;;;;;;;9833:782;10598:5;10591:12;;;9596:1026;;;;;:::o;9174:414::-;9237:4;9259:21;9269:3;9274:5;9259:9;:21::i;:::-;9254:327;;9297:3;:11;;9314:5;9297:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9480:3;:11;;:18;;;;9458:3;:12;;:19;9471:5;9458:19;;;;;;;;;;;:40;;;;9520:4;9513:11;;;;9254:327;9564:5;9557:12;;9174:414;;;;;:::o;14950:692::-;15026:4;15142:16;15161:3;:12;;:17;15174:3;15161:17;;;;;;;;;;;;15142:36;;15207:1;15195:8;:13;15191:444;;;15262:3;:12;;15280:38;;;;;;;;15297:3;15280:38;;;;15310:5;15280:38;;;15262:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15477:3;:12;;:19;;;;15457:3;:12;;:17;15470:3;15457:17;;;;;;;;;;;:39;;;;15518:4;15511:11;;;;;15191:444;15591:5;15555:3;:12;;15579:1;15568:8;:12;;;;:::i;:::-;15555:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;:41;;;;15618:5;15611:12;;;14950:692;;;;;;:::o;10630:129::-;10703:4;10750:1;10727:3;:12;;:19;10740:5;10727:19;;;;;;;;;;;;:24;;10720:31;;10630:129;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:412:1:-;85:5;110:66;126:49;168:6;126:49;:::i;:::-;110:66;:::i;:::-;101:75;;199:6;192:5;185:21;237:4;230:5;226:16;275:3;266:6;261:3;257:16;254:25;251:112;;;282:79;;:::i;:::-;251:112;372:41;406:6;401:3;396;372:41;:::i;:::-;91:328;7:412;;;;;:::o;425:139::-;471:5;509:6;496:20;487:29;;525:33;552:5;525:33;:::i;:::-;425:139;;;;:::o;570:155::-;624:5;662:6;649:20;640:29;;678:41;713:5;678:41;:::i;:::-;570:155;;;;:::o;731:133::-;774:5;812:6;799:20;790:29;;828:30;852:5;828:30;:::i;:::-;731:133;;;;:::o;870:137::-;915:5;953:6;940:20;931:29;;969:32;995:5;969:32;:::i;:::-;870:137;;;;:::o;1027:340::-;1083:5;1132:3;1125:4;1117:6;1113:17;1109:27;1099:122;;1140:79;;:::i;:::-;1099:122;1257:6;1244:20;1282:79;1357:3;1349:6;1342:4;1334:6;1330:17;1282:79;:::i;:::-;1273:88;;1089:278;1027:340;;;;:::o;1373:139::-;1419:5;1457:6;1444:20;1435:29;;1473:33;1500:5;1473:33;:::i;:::-;1373:139;;;;:::o;1518:329::-;1577:6;1626:2;1614:9;1605:7;1601:23;1597:32;1594:119;;;1632:79;;:::i;:::-;1594:119;1752:1;1777:53;1822:7;1813:6;1802:9;1798:22;1777:53;:::i;:::-;1767:63;;1723:117;1518:329;;;;:::o;1853:345::-;1920:6;1969:2;1957:9;1948:7;1944:23;1940:32;1937:119;;;1975:79;;:::i;:::-;1937:119;2095:1;2120:61;2173:7;2164:6;2153:9;2149:22;2120:61;:::i;:::-;2110:71;;2066:125;1853:345;;;;:::o;2204:474::-;2272:6;2280;2329:2;2317:9;2308:7;2304:23;2300:32;2297:119;;;2335:79;;:::i;:::-;2297:119;2455:1;2480:53;2525:7;2516:6;2505:9;2501:22;2480:53;:::i;:::-;2470:63;;2426:117;2582:2;2608:53;2653:7;2644:6;2633:9;2629:22;2608:53;:::i;:::-;2598:63;;2553:118;2204:474;;;;;:::o;2684:619::-;2761:6;2769;2777;2826:2;2814:9;2805:7;2801:23;2797:32;2794:119;;;2832:79;;:::i;:::-;2794:119;2952:1;2977:53;3022:7;3013:6;3002:9;2998:22;2977:53;:::i;:::-;2967:63;;2923:117;3079:2;3105:53;3150:7;3141:6;3130:9;3126:22;3105:53;:::i;:::-;3095:63;;3050:118;3207:2;3233:53;3278:7;3269:6;3258:9;3254:22;3233:53;:::i;:::-;3223:63;;3178:118;2684:619;;;;;:::o;3309:468::-;3374:6;3382;3431:2;3419:9;3410:7;3406:23;3402:32;3399:119;;;3437:79;;:::i;:::-;3399:119;3557:1;3582:53;3627:7;3618:6;3607:9;3603:22;3582:53;:::i;:::-;3572:63;;3528:117;3684:2;3710:50;3752:7;3743:6;3732:9;3728:22;3710:50;:::i;:::-;3700:60;;3655:115;3309:468;;;;;:::o;3783:474::-;3851:6;3859;3908:2;3896:9;3887:7;3883:23;3879:32;3876:119;;;3914:79;;:::i;:::-;3876:119;4034:1;4059:53;4104:7;4095:6;4084:9;4080:22;4059:53;:::i;:::-;4049:63;;4005:117;4161:2;4187:53;4232:7;4223:6;4212:9;4208:22;4187:53;:::i;:::-;4177:63;;4132:118;3783:474;;;;;:::o;4263:323::-;4319:6;4368:2;4356:9;4347:7;4343:23;4339:32;4336:119;;;4374:79;;:::i;:::-;4336:119;4494:1;4519:50;4561:7;4552:6;4541:9;4537:22;4519:50;:::i;:::-;4509:60;;4465:114;4263:323;;;;:::o;4592:327::-;4650:6;4699:2;4687:9;4678:7;4674:23;4670:32;4667:119;;;4705:79;;:::i;:::-;4667:119;4825:1;4850:52;4894:7;4885:6;4874:9;4870:22;4850:52;:::i;:::-;4840:62;;4796:116;4592:327;;;;:::o;4925:509::-;4994:6;5043:2;5031:9;5022:7;5018:23;5014:32;5011:119;;;5049:79;;:::i;:::-;5011:119;5197:1;5186:9;5182:17;5169:31;5227:18;5219:6;5216:30;5213:117;;;5249:79;;:::i;:::-;5213:117;5354:63;5409:7;5400:6;5389:9;5385:22;5354:63;:::i;:::-;5344:73;;5140:287;4925:509;;;;:::o;5440:329::-;5499:6;5548:2;5536:9;5527:7;5523:23;5519:32;5516:119;;;5554:79;;:::i;:::-;5516:119;5674:1;5699:53;5744:7;5735:6;5724:9;5720:22;5699:53;:::i;:::-;5689:63;;5645:117;5440:329;;;;:::o;5775:474::-;5843:6;5851;5900:2;5888:9;5879:7;5875:23;5871:32;5868:119;;;5906:79;;:::i;:::-;5868:119;6026:1;6051:53;6096:7;6087:6;6076:9;6072:22;6051:53;:::i;:::-;6041:63;;5997:117;6153:2;6179:53;6224:7;6215:6;6204:9;6200:22;6179:53;:::i;:::-;6169:63;;6124:118;5775:474;;;;;:::o;6255:179::-;6324:10;6345:46;6387:3;6379:6;6345:46;:::i;:::-;6423:4;6418:3;6414:14;6400:28;;6255:179;;;;:::o;6440:147::-;6535:45;6574:5;6535:45;:::i;:::-;6530:3;6523:58;6440:147;;:::o;6593:142::-;6696:32;6722:5;6696:32;:::i;:::-;6691:3;6684:45;6593:142;;:::o;6741:118::-;6828:24;6846:5;6828:24;:::i;:::-;6823:3;6816:37;6741:118;;:::o;6895:732::-;7014:3;7043:54;7091:5;7043:54;:::i;:::-;7113:86;7192:6;7187:3;7113:86;:::i;:::-;7106:93;;7223:56;7273:5;7223:56;:::i;:::-;7302:7;7333:1;7318:284;7343:6;7340:1;7337:13;7318:284;;;7419:6;7413:13;7446:63;7505:3;7490:13;7446:63;:::i;:::-;7439:70;;7532:60;7585:6;7532:60;:::i;:::-;7522:70;;7378:224;7365:1;7362;7358:9;7353:14;;7318:284;;;7322:14;7618:3;7611:10;;7019:608;;;6895:732;;;;:::o;7633:109::-;7714:21;7729:5;7714:21;:::i;:::-;7709:3;7702:34;7633:109;;:::o;7748:364::-;7836:3;7864:39;7897:5;7864:39;:::i;:::-;7919:71;7983:6;7978:3;7919:71;:::i;:::-;7912:78;;7999:52;8044:6;8039:3;8032:4;8025:5;8021:16;7999:52;:::i;:::-;8076:29;8098:6;8076:29;:::i;:::-;8071:3;8067:39;8060:46;;7840:272;7748:364;;;;:::o;8118:377::-;8224:3;8252:39;8285:5;8252:39;:::i;:::-;8307:89;8389:6;8384:3;8307:89;:::i;:::-;8300:96;;8405:52;8450:6;8445:3;8438:4;8431:5;8427:16;8405:52;:::i;:::-;8482:6;8477:3;8473:16;8466:23;;8228:267;8118:377;;;;:::o;8525:845::-;8628:3;8665:5;8659:12;8694:36;8720:9;8694:36;:::i;:::-;8746:89;8828:6;8823:3;8746:89;:::i;:::-;8739:96;;8866:1;8855:9;8851:17;8882:1;8877:137;;;;9028:1;9023:341;;;;8844:520;;8877:137;8961:4;8957:9;8946;8942:25;8937:3;8930:38;8997:6;8992:3;8988:16;8981:23;;8877:137;;9023:341;9090:38;9122:5;9090:38;:::i;:::-;9150:1;9164:154;9178:6;9175:1;9172:13;9164:154;;;9252:7;9246:14;9242:1;9237:3;9233:11;9226:35;9302:1;9293:7;9289:15;9278:26;;9200:4;9197:1;9193:12;9188:17;;9164:154;;;9347:6;9342:3;9338:16;9331:23;;9030:334;;8844:520;;8632:738;;8525:845;;;;:::o;9376:366::-;9518:3;9539:67;9603:2;9598:3;9539:67;:::i;:::-;9532:74;;9615:93;9704:3;9615:93;:::i;:::-;9733:2;9728:3;9724:12;9717:19;;9376:366;;;:::o;9748:::-;9890:3;9911:67;9975:2;9970:3;9911:67;:::i;:::-;9904:74;;9987:93;10076:3;9987:93;:::i;:::-;10105:2;10100:3;10096:12;10089:19;;9748:366;;;:::o;10120:::-;10262:3;10283:67;10347:2;10342:3;10283:67;:::i;:::-;10276:74;;10359:93;10448:3;10359:93;:::i;:::-;10477:2;10472:3;10468:12;10461:19;;10120:366;;;:::o;10492:::-;10634:3;10655:67;10719:2;10714:3;10655:67;:::i;:::-;10648:74;;10731:93;10820:3;10731:93;:::i;:::-;10849:2;10844:3;10840:12;10833:19;;10492:366;;;:::o;10864:::-;11006:3;11027:67;11091:2;11086:3;11027:67;:::i;:::-;11020:74;;11103:93;11192:3;11103:93;:::i;:::-;11221:2;11216:3;11212:12;11205:19;;10864:366;;;:::o;11236:::-;11378:3;11399:67;11463:2;11458:3;11399:67;:::i;:::-;11392:74;;11475:93;11564:3;11475:93;:::i;:::-;11593:2;11588:3;11584:12;11577:19;;11236:366;;;:::o;11608:::-;11750:3;11771:67;11835:2;11830:3;11771:67;:::i;:::-;11764:74;;11847:93;11936:3;11847:93;:::i;:::-;11965:2;11960:3;11956:12;11949:19;;11608:366;;;:::o;11980:::-;12122:3;12143:67;12207:2;12202:3;12143:67;:::i;:::-;12136:74;;12219:93;12308:3;12219:93;:::i;:::-;12337:2;12332:3;12328:12;12321:19;;11980:366;;;:::o;12352:::-;12494:3;12515:67;12579:2;12574:3;12515:67;:::i;:::-;12508:74;;12591:93;12680:3;12591:93;:::i;:::-;12709:2;12704:3;12700:12;12693:19;;12352:366;;;:::o;12724:::-;12866:3;12887:67;12951:2;12946:3;12887:67;:::i;:::-;12880:74;;12963:93;13052:3;12963:93;:::i;:::-;13081:2;13076:3;13072:12;13065:19;;12724:366;;;:::o;13096:::-;13238:3;13259:67;13323:2;13318:3;13259:67;:::i;:::-;13252:74;;13335:93;13424:3;13335:93;:::i;:::-;13453:2;13448:3;13444:12;13437:19;;13096:366;;;:::o;13468:::-;13610:3;13631:67;13695:2;13690:3;13631:67;:::i;:::-;13624:74;;13707:93;13796:3;13707:93;:::i;:::-;13825:2;13820:3;13816:12;13809:19;;13468:366;;;:::o;13840:::-;13982:3;14003:67;14067:2;14062:3;14003:67;:::i;:::-;13996:74;;14079:93;14168:3;14079:93;:::i;:::-;14197:2;14192:3;14188:12;14181:19;;13840:366;;;:::o;14212:::-;14354:3;14375:67;14439:2;14434:3;14375:67;:::i;:::-;14368:74;;14451:93;14540:3;14451:93;:::i;:::-;14569:2;14564:3;14560:12;14553:19;;14212:366;;;:::o;14584:::-;14726:3;14747:67;14811:2;14806:3;14747:67;:::i;:::-;14740:74;;14823:93;14912:3;14823:93;:::i;:::-;14941:2;14936:3;14932:12;14925:19;;14584:366;;;:::o;14956:::-;15098:3;15119:67;15183:2;15178:3;15119:67;:::i;:::-;15112:74;;15195:93;15284:3;15195:93;:::i;:::-;15313:2;15308:3;15304:12;15297:19;;14956:366;;;:::o;15328:::-;15470:3;15491:67;15555:2;15550:3;15491:67;:::i;:::-;15484:74;;15567:93;15656:3;15567:93;:::i;:::-;15685:2;15680:3;15676:12;15669:19;;15328:366;;;:::o;15700:::-;15842:3;15863:67;15927:2;15922:3;15863:67;:::i;:::-;15856:74;;15939:93;16028:3;15939:93;:::i;:::-;16057:2;16052:3;16048:12;16041:19;;15700:366;;;:::o;16072:::-;16214:3;16235:67;16299:2;16294:3;16235:67;:::i;:::-;16228:74;;16311:93;16400:3;16311:93;:::i;:::-;16429:2;16424:3;16420:12;16413:19;;16072:366;;;:::o;16444:::-;16586:3;16607:67;16671:2;16666:3;16607:67;:::i;:::-;16600:74;;16683:93;16772:3;16683:93;:::i;:::-;16801:2;16796:3;16792:12;16785:19;;16444:366;;;:::o;16816:::-;16958:3;16979:67;17043:2;17038:3;16979:67;:::i;:::-;16972:74;;17055:93;17144:3;17055:93;:::i;:::-;17173:2;17168:3;17164:12;17157:19;;16816:366;;;:::o;17188:::-;17330:3;17351:67;17415:2;17410:3;17351:67;:::i;:::-;17344:74;;17427:93;17516:3;17427:93;:::i;:::-;17545:2;17540:3;17536:12;17529:19;;17188:366;;;:::o;17560:108::-;17637:24;17655:5;17637:24;:::i;:::-;17632:3;17625:37;17560:108;;:::o;17674:118::-;17761:24;17779:5;17761:24;:::i;:::-;17756:3;17749:37;17674:118;;:::o;17798:275::-;17930:3;17952:95;18043:3;18034:6;17952:95;:::i;:::-;17945:102;;18064:3;18057:10;;17798:275;;;;:::o;18079:589::-;18304:3;18326:95;18417:3;18408:6;18326:95;:::i;:::-;18319:102;;18438:95;18529:3;18520:6;18438:95;:::i;:::-;18431:102;;18550:92;18638:3;18629:6;18550:92;:::i;:::-;18543:99;;18659:3;18652:10;;18079:589;;;;;;:::o;18674:222::-;18767:4;18805:2;18794:9;18790:18;18782:26;;18818:71;18886:1;18875:9;18871:17;18862:6;18818:71;:::i;:::-;18674:222;;;;:::o;18902:254::-;19011:4;19049:2;19038:9;19034:18;19026:26;;19062:87;19146:1;19135:9;19131:17;19122:6;19062:87;:::i;:::-;18902:254;;;;:::o;19162:676::-;19375:4;19413:3;19402:9;19398:19;19390:27;;19427:87;19511:1;19500:9;19496:17;19487:6;19427:87;:::i;:::-;19524:72;19592:2;19581:9;19577:18;19568:6;19524:72;:::i;:::-;19643:9;19637:4;19633:20;19628:2;19617:9;19613:18;19606:48;19671:78;19744:4;19735:6;19671:78;:::i;:::-;19663:86;;19759:72;19827:2;19816:9;19812:18;19803:6;19759:72;:::i;:::-;19162:676;;;;;;;:::o;19844:458::-;20001:4;20039:2;20028:9;20024:18;20016:26;;20052:71;20120:1;20109:9;20105:17;20096:6;20052:71;:::i;:::-;20133:80;20209:2;20198:9;20194:18;20185:6;20133:80;:::i;:::-;20223:72;20291:2;20280:9;20276:18;20267:6;20223:72;:::i;:::-;19844:458;;;;;;:::o;20308:442::-;20457:4;20495:2;20484:9;20480:18;20472:26;;20508:71;20576:1;20565:9;20561:17;20552:6;20508:71;:::i;:::-;20589:72;20657:2;20646:9;20642:18;20633:6;20589:72;:::i;:::-;20671;20739:2;20728:9;20724:18;20715:6;20671:72;:::i;:::-;20308:442;;;;;;:::o;20756:373::-;20899:4;20937:2;20926:9;20922:18;20914:26;;20986:9;20980:4;20976:20;20972:1;20961:9;20957:17;20950:47;21014:108;21117:4;21108:6;21014:108;:::i;:::-;21006:116;;20756:373;;;;:::o;21135:210::-;21222:4;21260:2;21249:9;21245:18;21237:26;;21273:65;21335:1;21324:9;21320:17;21311:6;21273:65;:::i;:::-;21135:210;;;;:::o;21351:313::-;21464:4;21502:2;21491:9;21487:18;21479:26;;21551:9;21545:4;21541:20;21537:1;21526:9;21522:17;21515:47;21579:78;21652:4;21643:6;21579:78;:::i;:::-;21571:86;;21351:313;;;;:::o;21670:533::-;21839:4;21877:2;21866:9;21862:18;21854:26;;21926:9;21920:4;21916:20;21912:1;21901:9;21897:17;21890:47;21954:78;22027:4;22018:6;21954:78;:::i;:::-;21946:86;;22042:72;22110:2;22099:9;22095:18;22086:6;22042:72;:::i;:::-;22124;22192:2;22181:9;22177:18;22168:6;22124:72;:::i;:::-;21670:533;;;;;;:::o;22209:419::-;22375:4;22413:2;22402:9;22398:18;22390:26;;22462:9;22456:4;22452:20;22448:1;22437:9;22433:17;22426:47;22490:131;22616:4;22490:131;:::i;:::-;22482:139;;22209:419;;;:::o;22634:::-;22800:4;22838:2;22827:9;22823:18;22815:26;;22887:9;22881:4;22877:20;22873:1;22862:9;22858:17;22851:47;22915:131;23041:4;22915:131;:::i;:::-;22907:139;;22634:419;;;:::o;23059:::-;23225:4;23263:2;23252:9;23248:18;23240:26;;23312:9;23306:4;23302:20;23298:1;23287:9;23283:17;23276:47;23340:131;23466:4;23340:131;:::i;:::-;23332:139;;23059:419;;;:::o;23484:::-;23650:4;23688:2;23677:9;23673:18;23665:26;;23737:9;23731:4;23727:20;23723:1;23712:9;23708:17;23701:47;23765:131;23891:4;23765:131;:::i;:::-;23757:139;;23484:419;;;:::o;23909:::-;24075:4;24113:2;24102:9;24098:18;24090:26;;24162:9;24156:4;24152:20;24148:1;24137:9;24133:17;24126:47;24190:131;24316:4;24190:131;:::i;:::-;24182:139;;23909:419;;;:::o;24334:::-;24500:4;24538:2;24527:9;24523:18;24515:26;;24587:9;24581:4;24577:20;24573:1;24562:9;24558:17;24551:47;24615:131;24741:4;24615:131;:::i;:::-;24607:139;;24334:419;;;:::o;24759:::-;24925:4;24963:2;24952:9;24948:18;24940:26;;25012:9;25006:4;25002:20;24998:1;24987:9;24983:17;24976:47;25040:131;25166:4;25040:131;:::i;:::-;25032:139;;24759:419;;;:::o;25184:::-;25350:4;25388:2;25377:9;25373:18;25365:26;;25437:9;25431:4;25427:20;25423:1;25412:9;25408:17;25401:47;25465:131;25591:4;25465:131;:::i;:::-;25457:139;;25184:419;;;:::o;25609:::-;25775:4;25813:2;25802:9;25798:18;25790:26;;25862:9;25856:4;25852:20;25848:1;25837:9;25833:17;25826:47;25890:131;26016:4;25890:131;:::i;:::-;25882:139;;25609:419;;;:::o;26034:::-;26200:4;26238:2;26227:9;26223:18;26215:26;;26287:9;26281:4;26277:20;26273:1;26262:9;26258:17;26251:47;26315:131;26441:4;26315:131;:::i;:::-;26307:139;;26034:419;;;:::o;26459:::-;26625:4;26663:2;26652:9;26648:18;26640:26;;26712:9;26706:4;26702:20;26698:1;26687:9;26683:17;26676:47;26740:131;26866:4;26740:131;:::i;:::-;26732:139;;26459:419;;;:::o;26884:::-;27050:4;27088:2;27077:9;27073:18;27065:26;;27137:9;27131:4;27127:20;27123:1;27112:9;27108:17;27101:47;27165:131;27291:4;27165:131;:::i;:::-;27157:139;;26884:419;;;:::o;27309:::-;27475:4;27513:2;27502:9;27498:18;27490:26;;27562:9;27556:4;27552:20;27548:1;27537:9;27533:17;27526:47;27590:131;27716:4;27590:131;:::i;:::-;27582:139;;27309:419;;;:::o;27734:::-;27900:4;27938:2;27927:9;27923:18;27915:26;;27987:9;27981:4;27977:20;27973:1;27962:9;27958:17;27951:47;28015:131;28141:4;28015:131;:::i;:::-;28007:139;;27734:419;;;:::o;28159:::-;28325:4;28363:2;28352:9;28348:18;28340:26;;28412:9;28406:4;28402:20;28398:1;28387:9;28383:17;28376:47;28440:131;28566:4;28440:131;:::i;:::-;28432:139;;28159:419;;;:::o;28584:::-;28750:4;28788:2;28777:9;28773:18;28765:26;;28837:9;28831:4;28827:20;28823:1;28812:9;28808:17;28801:47;28865:131;28991:4;28865:131;:::i;:::-;28857:139;;28584:419;;;:::o;29009:::-;29175:4;29213:2;29202:9;29198:18;29190:26;;29262:9;29256:4;29252:20;29248:1;29237:9;29233:17;29226:47;29290:131;29416:4;29290:131;:::i;:::-;29282:139;;29009:419;;;:::o;29434:::-;29600:4;29638:2;29627:9;29623:18;29615:26;;29687:9;29681:4;29677:20;29673:1;29662:9;29658:17;29651:47;29715:131;29841:4;29715:131;:::i;:::-;29707:139;;29434:419;;;:::o;29859:::-;30025:4;30063:2;30052:9;30048:18;30040:26;;30112:9;30106:4;30102:20;30098:1;30087:9;30083:17;30076:47;30140:131;30266:4;30140:131;:::i;:::-;30132:139;;29859:419;;;:::o;30284:::-;30450:4;30488:2;30477:9;30473:18;30465:26;;30537:9;30531:4;30527:20;30523:1;30512:9;30508:17;30501:47;30565:131;30691:4;30565:131;:::i;:::-;30557:139;;30284:419;;;:::o;30709:::-;30875:4;30913:2;30902:9;30898:18;30890:26;;30962:9;30956:4;30952:20;30948:1;30937:9;30933:17;30926:47;30990:131;31116:4;30990:131;:::i;:::-;30982:139;;30709:419;;;:::o;31134:::-;31300:4;31338:2;31327:9;31323:18;31315:26;;31387:9;31381:4;31377:20;31373:1;31362:9;31358:17;31351:47;31415:131;31541:4;31415:131;:::i;:::-;31407:139;;31134:419;;;:::o;31559:222::-;31652:4;31690:2;31679:9;31675:18;31667:26;;31703:71;31771:1;31760:9;31756:17;31747:6;31703:71;:::i;:::-;31559:222;;;;:::o;31787:129::-;31821:6;31848:20;;:::i;:::-;31838:30;;31877:33;31905:4;31897:6;31877:33;:::i;:::-;31787:129;;;:::o;31922:75::-;31955:6;31988:2;31982:9;31972:19;;31922:75;:::o;32003:308::-;32065:4;32155:18;32147:6;32144:30;32141:56;;;32177:18;;:::i;:::-;32141:56;32215:29;32237:6;32215:29;:::i;:::-;32207:37;;32299:4;32293;32289:15;32281:23;;32003:308;;;:::o;32317:132::-;32384:4;32407:3;32399:11;;32437:4;32432:3;32428:14;32420:22;;32317:132;;;:::o;32455:141::-;32504:4;32527:3;32519:11;;32550:3;32547:1;32540:14;32584:4;32581:1;32571:18;32563:26;;32455:141;;;:::o;32602:114::-;32669:6;32703:5;32697:12;32687:22;;32602:114;;;:::o;32722:99::-;32774:6;32808:5;32802:12;32792:22;;32722:99;;;:::o;32827:113::-;32897:4;32929;32924:3;32920:14;32912:22;;32827:113;;;:::o;32946:184::-;33045:11;33079:6;33074:3;33067:19;33119:4;33114:3;33110:14;33095:29;;32946:184;;;;:::o;33136:169::-;33220:11;33254:6;33249:3;33242:19;33294:4;33289:3;33285:14;33270:29;;33136:169;;;;:::o;33311:148::-;33413:11;33450:3;33435:18;;33311:148;;;;:::o;33465:305::-;33505:3;33524:20;33542:1;33524:20;:::i;:::-;33519:25;;33558:20;33576:1;33558:20;:::i;:::-;33553:25;;33712:1;33644:66;33640:74;33637:1;33634:81;33631:107;;;33718:18;;:::i;:::-;33631:107;33762:1;33759;33755:9;33748:16;;33465:305;;;;:::o;33776:185::-;33816:1;33833:20;33851:1;33833:20;:::i;:::-;33828:25;;33867:20;33885:1;33867:20;:::i;:::-;33862:25;;33906:1;33896:35;;33911:18;;:::i;:::-;33896:35;33953:1;33950;33946:9;33941:14;;33776:185;;;;:::o;33967:348::-;34007:7;34030:20;34048:1;34030:20;:::i;:::-;34025:25;;34064:20;34082:1;34064:20;:::i;:::-;34059:25;;34252:1;34184:66;34180:74;34177:1;34174:81;34169:1;34162:9;34155:17;34151:105;34148:131;;;34259:18;;:::i;:::-;34148:131;34307:1;34304;34300:9;34289:20;;33967:348;;;;:::o;34321:191::-;34361:4;34381:20;34399:1;34381:20;:::i;:::-;34376:25;;34415:20;34433:1;34415:20;:::i;:::-;34410:25;;34454:1;34451;34448:8;34445:34;;;34459:18;;:::i;:::-;34445:34;34504:1;34501;34497:9;34489:17;;34321:191;;;;:::o;34518:96::-;34555:7;34584:24;34602:5;34584:24;:::i;:::-;34573:35;;34518:96;;;:::o;34620:104::-;34665:7;34694:24;34712:5;34694:24;:::i;:::-;34683:35;;34620:104;;;:::o;34730:90::-;34764:7;34807:5;34800:13;34793:21;34782:32;;34730:90;;;:::o;34826:149::-;34862:7;34902:66;34895:5;34891:78;34880:89;;34826:149;;;:::o;34981:126::-;35018:7;35058:42;35051:5;35047:54;35036:65;;34981:126;;;:::o;35113:77::-;35150:7;35179:5;35168:16;;35113:77;;;:::o;35196:134::-;35254:9;35287:37;35318:5;35287:37;:::i;:::-;35274:50;;35196:134;;;:::o;35336:126::-;35386:9;35419:37;35450:5;35419:37;:::i;:::-;35406:50;;35336:126;;;:::o;35468:113::-;35518:9;35551:24;35569:5;35551:24;:::i;:::-;35538:37;;35468:113;;;:::o;35587:154::-;35671:6;35666:3;35661;35648:30;35733:1;35724:6;35719:3;35715:16;35708:27;35587:154;;;:::o;35747:307::-;35815:1;35825:113;35839:6;35836:1;35833:13;35825:113;;;35924:1;35919:3;35915:11;35909:18;35905:1;35900:3;35896:11;35889:39;35861:2;35858:1;35854:10;35849:15;;35825:113;;;35956:6;35953:1;35950:13;35947:101;;;36036:1;36027:6;36022:3;36018:16;36011:27;35947:101;35796:258;35747:307;;;:::o;36060:320::-;36104:6;36141:1;36135:4;36131:12;36121:22;;36188:1;36182:4;36178:12;36209:18;36199:81;;36265:4;36257:6;36253:17;36243:27;;36199:81;36327:2;36319:6;36316:14;36296:18;36293:38;36290:84;;;36346:18;;:::i;:::-;36290:84;36111:269;36060:320;;;:::o;36386:281::-;36469:27;36491:4;36469:27;:::i;:::-;36461:6;36457:40;36599:6;36587:10;36584:22;36563:18;36551:10;36548:34;36545:62;36542:88;;;36610:18;;:::i;:::-;36542:88;36650:10;36646:2;36639:22;36429:238;36386:281;;:::o;36673:233::-;36712:3;36735:24;36753:5;36735:24;:::i;:::-;36726:33;;36781:66;36774:5;36771:77;36768:103;;;36851:18;;:::i;:::-;36768:103;36898:1;36891:5;36887:13;36880:20;;36673:233;;;:::o;36912:176::-;36944:1;36961:20;36979:1;36961:20;:::i;:::-;36956:25;;36995:20;37013:1;36995:20;:::i;:::-;36990:25;;37034:1;37024:35;;37039:18;;:::i;:::-;37024:35;37080:1;37077;37073:9;37068:14;;36912:176;;;;:::o;37094:180::-;37142:77;37139:1;37132:88;37239:4;37236:1;37229:15;37263:4;37260:1;37253:15;37280:180;37328:77;37325:1;37318:88;37425:4;37422:1;37415:15;37449:4;37446:1;37439:15;37466:180;37514:77;37511:1;37504:88;37611:4;37608:1;37601:15;37635:4;37632:1;37625:15;37652:180;37700:77;37697:1;37690:88;37797:4;37794:1;37787:15;37821:4;37818:1;37811:15;37838:180;37886:77;37883:1;37876:88;37983:4;37980:1;37973:15;38007:4;38004:1;37997:15;38024:180;38072:77;38069:1;38062:88;38169:4;38166:1;38159:15;38193:4;38190:1;38183:15;38210:117;38319:1;38316;38309:12;38333:117;38442:1;38439;38432:12;38456:117;38565:1;38562;38555:12;38579:117;38688:1;38685;38678:12;38702:102;38743:6;38794:2;38790:7;38785:2;38778:5;38774:14;38770:28;38760:38;;38702:102;;;:::o;38810:221::-;38950:34;38946:1;38938:6;38934:14;38927:58;39019:4;39014:2;39006:6;39002:15;38995:29;38810:221;:::o;39037:225::-;39177:34;39173:1;39165:6;39161:14;39154:58;39246:8;39241:2;39233:6;39229:15;39222:33;39037:225;:::o;39268:162::-;39408:14;39404:1;39396:6;39392:14;39385:38;39268:162;:::o;39436:178::-;39576:30;39572:1;39564:6;39560:14;39553:54;39436:178;:::o;39620:177::-;39760:29;39756:1;39748:6;39744:14;39737:53;39620:177;:::o;39803:223::-;39943:34;39939:1;39931:6;39927:14;39920:58;40012:6;40007:2;39999:6;39995:15;39988:31;39803:223;:::o;40032:175::-;40172:27;40168:1;40160:6;40156:14;40149:51;40032:175;:::o;40213:180::-;40353:32;40349:1;40341:6;40337:14;40330:56;40213:180;:::o;40399:165::-;40539:17;40535:1;40527:6;40523:14;40516:41;40399:165;:::o;40570:231::-;40710:34;40706:1;40698:6;40694:14;40687:58;40779:14;40774:2;40766:6;40762:15;40755:39;40570:231;:::o;40807:176::-;40947:28;40943:1;40935:6;40931:14;40924:52;40807:176;:::o;40989:243::-;41129:34;41125:1;41117:6;41113:14;41106:58;41198:26;41193:2;41185:6;41181:15;41174:51;40989:243;:::o;41238:229::-;41378:34;41374:1;41366:6;41362:14;41355:58;41447:12;41442:2;41434:6;41430:15;41423:37;41238:229;:::o;41473:221::-;41613:34;41609:1;41601:6;41597:14;41590:58;41682:4;41677:2;41669:6;41665:15;41658:29;41473:221;:::o;41700:182::-;41840:34;41836:1;41828:6;41824:14;41817:58;41700:182;:::o;41888:220::-;42028:34;42024:1;42016:6;42012:14;42005:58;42097:3;42092:2;42084:6;42080:15;42073:28;41888:220;:::o;42114:231::-;42254:34;42250:1;42242:6;42238:14;42231:58;42323:14;42318:2;42310:6;42306:15;42299:39;42114:231;:::o;42351:182::-;42491:34;42487:1;42479:6;42475:14;42468:58;42351:182;:::o;42539:228::-;42679:34;42675:1;42667:6;42663:14;42656:58;42748:11;42743:2;42735:6;42731:15;42724:36;42539:228;:::o;42773:234::-;42913:34;42909:1;42901:6;42897:14;42890:58;42982:17;42977:2;42969:6;42965:15;42958:42;42773:234;:::o;43013:220::-;43153:34;43149:1;43141:6;43137:14;43130:58;43222:3;43217:2;43209:6;43205:15;43198:28;43013:220;:::o;43239:236::-;43379:34;43375:1;43367:6;43363:14;43356:58;43448:19;43443:2;43435:6;43431:15;43424:44;43239:236;:::o;43481:122::-;43554:24;43572:5;43554:24;:::i;:::-;43547:5;43544:35;43534:63;;43593:1;43590;43583:12;43534:63;43481:122;:::o;43609:138::-;43690:32;43716:5;43690:32;:::i;:::-;43683:5;43680:43;43670:71;;43737:1;43734;43727:12;43670:71;43609:138;:::o;43753:116::-;43823:21;43838:5;43823:21;:::i;:::-;43816:5;43813:32;43803:60;;43859:1;43856;43849:12;43803:60;43753:116;:::o;43875:120::-;43947:23;43964:5;43947:23;:::i;:::-;43940:5;43937:34;43927:62;;43985:1;43982;43975:12;43927:62;43875:120;:::o;44001:122::-;44074:24;44092:5;44074:24;:::i;:::-;44067:5;44064:35;44054:63;;44113:1;44110;44103:12;44054:63;44001:122;:::o
Swarm Source
ipfs://d54df41d94246e5be0556c857f46ae28c1b0a836a6c6f2e3008fb364acbcee02
Loading...
Loading
Loading...
Loading
OVERVIEW
CryptoButchers is a collection of collectible degenerative NFTs inspired by the culture of horror, very present in theaters in the 90s.Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
MOVR | 100.00% | $6.2 | 0.0209 | $0.1296 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.