Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 14907340 | 884 days ago | IN | 0 ETH | 0.08787494 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UwuQuestStampsUpgradeable
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-05 */ // Sources flattened with hardhat v2.8.2 https://hardhat.org // File contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract ERC1155 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 amount ); event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] amounts ); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); event URI(string value, uint256 indexed id); /*////////////////////////////////////////////////////////////// ERC1155 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => mapping(uint256 => uint256)) private _balanceOf; mapping(address => mapping(address => bool)) private _isApprovedForAll; /*////////////////////////////////////////////////////////////// METADATA LOGIC //////////////////////////////////////////////////////////////*/ function uri(uint256 id) public view virtual returns (string memory); /*////////////////////////////////////////////////////////////// ERC1155 LOGIC //////////////////////////////////////////////////////////////*/ function setApprovalForAll(address operator, bool approved) public virtual { _isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function isApprovedForAll(address account, address operator) public view virtual returns (bool) { return _isApprovedForAll[account][operator]; } function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual { require(msg.sender == from || isApprovedForAll(from, msg.sender), "NOT_AUTHORIZED"); _transferFrom(from, to, id, amount); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) == ERC1155TokenReceiver.onERC1155Received.selector, "UNSAFE_RECIPIENT" ); } function _transferFrom( address from, address to, uint256 id, uint256 amount ) internal virtual { _balanceOf[from][id] -= amount; _balanceOf[to][id] += amount; emit TransferSingle(msg.sender, from, to, id, amount); } function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes memory data ) public virtual { require(ids.length == amounts.length, "LENGTH_MISMATCH"); require(msg.sender == from || isApprovedForAll(from, msg.sender), "NOT_AUTHORIZED"); // Storing these outside the loop saves ~15 gas per iteration. uint256 id; uint256 amount; for (uint256 i = 0; i < ids.length; ) { id = ids[i]; amount = amounts[i]; _balanceOf[from][id] -= amount; _balanceOf[to][id] += amount; // An array can't have a total length // larger than the max uint256 value. unchecked { ++i; } } emit TransferBatch(msg.sender, from, to, ids, amounts); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) == ERC1155TokenReceiver.onERC1155BatchReceived.selector, "UNSAFE_RECIPIENT" ); } function balanceOf(address owner, uint256 tokenId) public view returns (uint256) { return _balanceOf[owner][tokenId]; } function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) public view virtual returns (uint256[] memory balances) { require(owners.length == ids.length, "LENGTH_MISMATCH"); balances = new uint256[](owners.length); // Unchecked because the only math done is incrementing // the array index counter which cannot possibly overflow. unchecked { for (uint256 i = 0; i < owners.length; ++i) { balances[i] = _balanceOf[owners[i]][ids[i]]; } } } /*////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155 interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { _balanceOf[to][id] += amount; emit TransferSingle(msg.sender, address(0), to, id, amount); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) == ERC1155TokenReceiver.onERC1155Received.selector, "UNSAFE_RECIPIENT" ); } function _batchMint( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { uint256 idsLength = ids.length; // Saves MLOADs. require(idsLength == amounts.length, "LENGTH_MISMATCH"); for (uint256 i = 0; i < idsLength; ) { _balanceOf[to][ids[i]] += amounts[i]; // An array can't have a total length // larger than the max uint256 value. unchecked { ++i; } } emit TransferBatch(msg.sender, address(0), to, ids, amounts); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) == ERC1155TokenReceiver.onERC1155BatchReceived.selector, "UNSAFE_RECIPIENT" ); } function _batchBurn( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { uint256 idsLength = ids.length; // Saves MLOADs. require(idsLength == amounts.length, "LENGTH_MISMATCH"); for (uint256 i = 0; i < idsLength; ) { _balanceOf[from][ids[i]] -= amounts[i]; // An array can't have a total length // larger than the max uint256 value. unchecked { ++i; } } emit TransferBatch(msg.sender, from, address(0), ids, amounts); } function _burn( address from, uint256 id, uint256 amount ) internal virtual { _balanceOf[from][id] -= amount; emit TransferSingle(msg.sender, from, address(0), id, amount); } } /// @notice A generic interface for a contract which properly accepts ERC1155 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol) abstract contract ERC1155TokenReceiver { function onERC1155Received( address, address, uint256, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC1155TokenReceiver.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) external virtual returns (bytes4) { return ERC1155TokenReceiver.onERC1155BatchReceived.selector; } } abstract contract ERC1155URIStorage is ERC1155 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) internal _tokenURIs; // Optional base URI string internal _baseURI; /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the concatenation of the `_baseURI` * and the token-specific uri if the latter is set * * This enables the following behaviors: * * - if `_tokenURIs[tokenId]` is set, then the result is the concatenation * of `_baseURI` and `_tokenURIs[tokenId]` (keep in mind that `_baseURI` * is empty per default); * * - if `_tokenURIs[tokenId]` is NOT set then we fallback to `super.uri()` * which in most cases will contain `ERC1155._uri`; * * - if `_tokenURIs[tokenId]` is NOT set, and if the parents do not have a * uri value set, then the result is empty. */ function uri(uint256 tokenId) public view virtual override returns (string memory) { require(exists(tokenId), "Doesn't exist"); string memory tokenURI = _tokenURIs[tokenId]; // If token URI is set, concatenate base URI and tokenURI (via abi.encodePacked). return bytes(tokenURI).length > 0 ? string(abi.encodePacked(_baseURI, tokenURI)) : tokenURI; } function _setBaseURI(string memory baseURI) internal virtual { _baseURI = baseURI; } /** * @dev Sets `tokenURI` as the tokenURI of `tokenId`. */ function _setURI(uint256 tokenId, string memory tokenURI) internal virtual { _tokenURIs[tokenId] = tokenURI; emit URI(uri(tokenId), tokenId); } function exists(uint256 tokenId) public view returns (bool) { return bytes(_tokenURIs[tokenId]).length != 0; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`. */ modifier initializer() { bool isTopLevelCall = _setInitializedVersion(1); if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original * initialization step. This is essential to configure modules that are added through upgrades and that require * initialization. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. */ modifier reinitializer(uint8 version) { bool isTopLevelCall = _setInitializedVersion(version); if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(version); } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. */ function _disableInitializers() internal virtual { _setInitializedVersion(type(uint8).max); } function _setInitializedVersion(uint8 version) private returns (bool) { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, and for the lowest level // of initializers, because in other contexts the contract may have been reentered. if (_initializing) { require( version == 1 && !AddressUpgradeable.isContract(address(this)), "Initializable: contract is already initialized" ); return false; } else { require(_initialized < version, "Initializable: contract is already initialized"); _initialized = version; return true; } } } interface ProxyRegistry { function proxies(address who) external view returns (address); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; } contract UwuQuestStampsUpgradeable is ERC1155URIStorage, OwnableUpgradeable { using Strings for string; string public constant name = "uwu Quest Stamps"; string public constant symbol = "UWUQS"; address public openSeaProxyRegistryAddress; function __UwuQuestStampsUpgradeable_init(string memory _baseURI) external initializer { __Ownable_init(); _setBaseURI(_baseURI); } function setTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner { _setURI(tokenId, _tokenURI); } function setBaseURI(string memory newBaseURI) external onlyOwner { _setBaseURI(newBaseURI); } function setProxyRegistry(address registry) external onlyOwner { openSeaProxyRegistryAddress = registry; } function baseURI() external view returns (string memory) { return _baseURI; } function initializeStamp(address who, uint256 tokenId, uint256 amount, string memory _tokenURI) public onlyOwner { require(!exists(tokenId), "uwu quest: Stamp already exists"); _setURI(tokenId, _tokenURI); _mint(who, tokenId, amount, ""); } function mint(address to, uint256 id, uint256 amount) public onlyOwner { require(exists(id), "Not initialized"); _mint(to, id, amount, ""); } function mintMany(address[] memory receivers, uint256[] memory ids, uint256[] memory amounts) public onlyOwner { require(receivers.length == ids.length, "Wrong length 1"); require(ids.length == amounts.length, "Wrong length 2"); for (uint256 i; i < receivers.length; i++) { require(bytes(_tokenURIs[ids[i]]).length != 0, "Not initialized"); _mint(receivers[i], ids[i], amounts[i], bytes("")); } } // Mints up to a given balance, function mintManyUpTo(address[] memory receivers, uint256[] memory ids, uint256[] memory amounts) public onlyOwner { require(receivers.length == ids.length, "Wrong length 1"); require(ids.length == amounts.length, "Wrong length 2"); for (uint256 i; i < receivers.length; i++) { require(bytes(_tokenURIs[ids[i]]).length != 0, "Not initialized"); uint256 currentBalance = balanceOf(receivers[i], ids[i]); if (currentBalance < amounts[i]) { uint256 balanceToMint = amounts[i] - currentBalance; _mint(receivers[i], ids[i], balanceToMint, bytes("")); } } } function transferMany(address[] memory tos, uint256[] memory ids, uint256[] memory amounts) public { require(tos.length == ids.length, "Wrong length 1"); require(ids.length == amounts.length, "Wrong length 2"); for (uint256 i; i < tos.length; i++) { safeTransferFrom(msg.sender, tos[i], ids[i], amounts[i], bytes("")); } } function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Get a reference to OpenSea's proxy registry contract by instantiating // the contract using the already existing address. ProxyRegistry proxyRegistry = ProxyRegistry(openSeaProxyRegistryAddress); if (proxyRegistry.proxies(owner) == operator) { return true; } return super.isApprovedForAll(owner, operator); } function adminTransferMany(address[] memory froms, address[] memory tos, uint256[] memory ids, uint256[] memory amounts) public onlyOwner { require(froms.length == tos.length, "Wrong length 1"); require(tos.length == ids.length, "Wrong length 1"); require(ids.length == amounts.length, "Wrong length 2"); for (uint256 i; i < froms.length; i++) { _transferFrom(froms[i], tos[i], ids[i], amounts[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"__UwuQuestStampsUpgradeable_init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"froms","type":"address[]"},{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"adminTransferMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"initializeStamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintManyUpTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSeaProxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"}],"name":"setProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"transferMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50614220806100206000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806363c57551116100de578063adfdeef911610097578063e985e9c511610071578063e985e9c514610456578063f1037c1214610486578063f242432a146104a2578063f2fde38b146104be5761018d565b8063adfdeef914610400578063b7f47d321461041c578063bb4ba5181461043a5761018d565b806363c57551146103645780636c0360eb14610380578063715018a61461039e5780638da5cb5b146103a857806395d89b41146103c6578063a22cb465146103e45761018d565b80632eb2c2d61161014b5780634e1273f4116101255780634e1273f4146102cc5780634f558e79146102fc57806355f804b31461032c578063628a743d146103485761018d565b80632eb2c2d6146102785780632fc01968146102945780633d192a70146102b05761018d565b8062fdd58e1461019257806301ffc9a7146101c257806306fdde03146101f25780630e89341c14610210578063156e29f614610240578063162094c41461025c575b600080fd5b6101ac60048036038101906101a79190612fd5565b6104da565b6040516101b99190613ad3565b60405180910390f35b6101dc60048036038101906101d791906132aa565b610534565b6040516101e991906138fb565b60405180910390f35b6101fa6105c6565b6040516102079190613931565b60405180910390f35b61022a6004803603810190610225919061333d565b6105ff565b6040516102379190613931565b60405180910390f35b61025a60048036038101906102559190613011565b610724565b005b61027660048036038101906102719190613366565b610808565b005b610292600480360381019061028d9190612e42565b610892565b005b6102ae60048036038101906102a991906132fc565b610cc6565b005b6102ca60048036038101906102c59190613060565b610d65565b005b6102e660048036038101906102e191906130db565b610e55565b6040516102f391906138d9565b60405180910390f35b6103166004803603810190610311919061333d565b611056565b60405161032391906138fb565b60405180910390f35b610346600480360381019061034191906132fc565b611082565b005b610362600480360381019061035d9190613213565b61110a565b005b61037e60048036038101906103799190613150565b61149a565b005b610388611714565b6040516103959190613931565b60405180910390f35b6103a66117a6565b005b6103b061182e565b6040516103bd91906137bd565b60405180910390f35b6103ce611858565b6040516103db9190613931565b60405180910390f35b6103fe60048036038101906103f99190612f99565b611891565b005b61041a60048036038101906104159190612db4565b61198e565b005b610424611a4e565b60405161043191906137bd565b60405180910390f35b610454600480360381019061044f9190613213565b611a74565b005b610470600480360381019061046b9190612e06565b611d1b565b60405161047d91906138fb565b60405180910390f35b6104a0600480360381019061049b9190613213565b611e1d565b005b6104bc60048036038101906104b79190612f0a565b611fa6565b005b6104d860048036038101906104d39190612db4565b6121a7565b005b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058f575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105bf5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6040518060400160405280601081526020017f757775205175657374205374616d70730000000000000000000000000000000081525081565b606061060a82611056565b610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090613973565b60405180910390fd5b600060026000848152602001908152602001600020805461066990613de6565b80601f016020809104026020016040519081016040528092919081815260200182805461069590613de6565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b5050505050905060008151116106f8578061071c565b60038160405160200161070c929190613799565b6040516020818303038152906040525b915050919050565b61072c61229f565b73ffffffffffffffffffffffffffffffffffffffff1661074a61182e565b73ffffffffffffffffffffffffffffffffffffffff16146107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790613a13565b60405180910390fd5b6107a982611056565b6107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90613993565b60405180910390fd5b610803838383604051806020016040528060008152506122a7565b505050565b61081061229f565b73ffffffffffffffffffffffffffffffffffffffff1661082e61182e565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90613a13565b60405180910390fd5b61088e8282612502565b5050565b8282905085859050146108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190613a53565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061091a57506109198733611d1b565b5b610959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095090613ab3565b60405180910390fd5b60008060005b87879050811015610ac5578787828181106109a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013592508585828181106109e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201359150816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a4d9190613cdd565b92505081905550816000808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610ab39190613c87565b9250508190555080600101905061095f565b508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8a8a8a8a604051610b40949392919061389e565b60405180910390a460008873ffffffffffffffffffffffffffffffffffffffff163b14610c4a5763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168873ffffffffffffffffffffffffffffffffffffffff1663bc197c81338c8b8b8b8b8b6040518863ffffffff1660e01b8152600401610bd397969594939291906137d8565b602060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2591906132d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610c7c565b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb2906139f3565b60405180910390fd5b505050505050505050565b6000610cd2600161256e565b90508015610cf6576001600460016101000a81548160ff0219169083151502179055505b610cfe612662565b610d07826126bb565b8015610d61576000600460016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d589190613916565b60405180910390a15b5050565b610d6d61229f565b73ffffffffffffffffffffffffffffffffffffffff16610d8b61182e565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890613a13565b60405180910390fd5b610dea83611056565b15610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906139b3565b60405180910390fd5b610e348382612502565b610e4f848484604051806020016040528060008152506122a7565b50505050565b6060828290508585905014610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690613a53565b60405180910390fd5b8484905067ffffffffffffffff811115610ee2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f105781602001602082028036833780820191505090505b50905060005b8585905081101561104d57600080878784818110610f5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610f729190612db4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610fe7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002054828281518110611036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806001019050610f16565b50949350505050565b60008060026000848152602001908152602001600020805461107790613de6565b905014159050919050565b61108a61229f565b73ffffffffffffffffffffffffffffffffffffffff166110a861182e565b73ffffffffffffffffffffffffffffffffffffffff16146110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590613a13565b60405180910390fd5b611107816126bb565b50565b61111261229f565b73ffffffffffffffffffffffffffffffffffffffff1661113061182e565b73ffffffffffffffffffffffffffffffffffffffff1614611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90613a13565b60405180910390fd5b81518351146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190613a93565b60405180910390fd5b805182511461120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590613a33565b60405180910390fd5b60005b835181101561149457600060026000858481518110611259577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020805461127a90613de6565b905014156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490613993565b60405180910390fd5b60006113498583815181106112fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185848151811061133c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104da565b9050828281518110611384577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151811015611480576000818484815181106113cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113e19190613cdd565b905061147e86848151811061141f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151868581518110611460577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183604051806020016040528060008152506122a7565b505b50808061148c90613e49565b915050611211565b50505050565b6114a261229f565b73ffffffffffffffffffffffffffffffffffffffff166114c061182e565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613a13565b60405180910390fd5b825184511461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613a93565b60405180910390fd5b815183511461159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590613a93565b60405180910390fd5b80518251146115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990613a33565b60405180910390fd5b60005b845181101561170d576116fa85828151811061162a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061166b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518584815181106116ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518585815181106116ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516126d5565b808061170590613e49565b9150506115e5565b5050505050565b60606003805461172390613de6565b80601f016020809104026020016040519081016040528092919081815260200182805461174f90613de6565b801561179c5780601f106117715761010080835404028352916020019161179c565b820191906000526020600020905b81548152906001019060200180831161177f57829003601f168201915b5050505050905090565b6117ae61229f565b73ffffffffffffffffffffffffffffffffffffffff166117cc61182e565b73ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613a13565b60405180910390fd5b61182c6000612825565b565b6000600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600581526020017f555755515300000000000000000000000000000000000000000000000000000081525081565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161198291906138fb565b60405180910390a35050565b61199661229f565b73ffffffffffffffffffffffffffffffffffffffff166119b461182e565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613a13565b60405180910390fd5b80603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a7c61229f565b73ffffffffffffffffffffffffffffffffffffffff16611a9a61182e565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790613a13565b60405180910390fd5b8151835114611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90613a93565b60405180910390fd5b8051825114611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613a33565b60405180910390fd5b60005b8351811015611d1557600060026000858481518110611bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000208054611be490613de6565b90501415611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613993565b60405180910390fd5b611d02848281518110611c63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848381518110611ca4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848481518110611ce5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051806020016040528060008152506122a7565b8080611d0d90613e49565b915050611b7b565b50505050565b600080603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611d9391906137bd565b60206040518083038186803b158015611dab57600080fd5b505afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190612ddd565b73ffffffffffffffffffffffffffffffffffffffff161415611e09576001915050611e17565b611e1384846128eb565b9150505b92915050565b8151835114611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890613a93565b60405180910390fd5b8051825114611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613a33565b60405180910390fd5b60005b8351811015611fa057611f8d33858381518110611eee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858481518110611f2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858581518110611f70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405180602001604052806000815250611fa6565b8080611f9890613e49565b915050611ea8565b50505050565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611fe65750611fe58533611d1b565b5b612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613ab3565b60405180910390fd5b612031858585856126d5565b60008473ffffffffffffffffffffffffffffffffffffffff163b1461212f5763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e6133888787876040518663ffffffff1660e01b81526004016120b8959493929190613844565b602060405180830381600087803b1580156120d257600080fd5b505af11580156120e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210a91906132d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612161565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6121a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612197906139f3565b60405180910390fd5b5050505050565b6121af61229f565b73ffffffffffffffffffffffffffffffffffffffff166121cd61182e565b73ffffffffffffffffffffffffffffffffffffffff1614612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613a13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613953565b60405180910390fd5b61229c81612825565b50565b600033905090565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546123069190613c87565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051612384929190613aee565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b1461248b5763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b8152600401612414959493929190613844565b602060405180830381600087803b15801561242e57600080fd5b505af1158015612442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246691906132d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124bd565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3906139f3565b60405180910390fd5b50505050565b80600260008481526020019081526020016000209080519060200190612529929190612a03565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612555846105ff565b6040516125629190613931565b60405180910390a25050565b6000600460019054906101000a900460ff16156125e65760018260ff1614801561259e575061259c3061297f565b155b6125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d4906139d3565b60405180910390fd5b6000905061265d565b8160ff16600460009054906101000a900460ff1660ff161061263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906139d3565b60405180910390fd5b81600460006101000a81548160ff021916908360ff160217905550600190505b919050565b600460019054906101000a900460ff166126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890613a73565b60405180910390fd5b6126b96129a2565b565b80600390805190602001906126d1929190612a03565b5050565b806000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546127349190613cdd565b92505081905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461279a9190613c87565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612817929190613aee565b60405180910390a450505050565b6000600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600460019054906101000a900460ff166129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890613a73565b60405180910390fd5b612a016129fc61229f565b612825565b565b828054612a0f90613de6565b90600052602060002090601f016020900481019282612a315760008555612a78565b82601f10612a4a57805160ff1916838001178555612a78565b82800160010185558215612a78579182015b82811115612a77578251825591602001919060010190612a5c565b5b509050612a859190612a89565b5090565b5b80821115612aa2576000816000905550600101612a8a565b5090565b6000612ab9612ab484613b3c565b613b17565b90508083825260208201905082856020860282011115612ad857600080fd5b60005b85811015612b085781612aee8882612bfa565b845260208401935060208301925050600181019050612adb565b5050509392505050565b6000612b25612b2084613b68565b613b17565b90508083825260208201905082856020860282011115612b4457600080fd5b60005b85811015612b745781612b5a8882612d9f565b845260208401935060208301925050600181019050612b47565b5050509392505050565b6000612b91612b8c84613b94565b613b17565b905082815260208101848484011115612ba957600080fd5b612bb4848285613da4565b509392505050565b6000612bcf612bca84613bc5565b613b17565b905082815260208101848484011115612be757600080fd5b612bf2848285613da4565b509392505050565b600081359050612c098161418e565b92915050565b600081519050612c1e8161418e565b92915050565b60008083601f840112612c3657600080fd5b8235905067ffffffffffffffff811115612c4f57600080fd5b602083019150836020820283011115612c6757600080fd5b9250929050565b600082601f830112612c7f57600080fd5b8135612c8f848260208601612aa6565b91505092915050565b60008083601f840112612caa57600080fd5b8235905067ffffffffffffffff811115612cc357600080fd5b602083019150836020820283011115612cdb57600080fd5b9250929050565b600082601f830112612cf357600080fd5b8135612d03848260208601612b12565b91505092915050565b600081359050612d1b816141a5565b92915050565b600081359050612d30816141bc565b92915050565b600081519050612d45816141bc565b92915050565b600082601f830112612d5c57600080fd5b8135612d6c848260208601612b7e565b91505092915050565b600082601f830112612d8657600080fd5b8135612d96848260208601612bbc565b91505092915050565b600081359050612dae816141d3565b92915050565b600060208284031215612dc657600080fd5b6000612dd484828501612bfa565b91505092915050565b600060208284031215612def57600080fd5b6000612dfd84828501612c0f565b91505092915050565b60008060408385031215612e1957600080fd5b6000612e2785828601612bfa565b9250506020612e3885828601612bfa565b9150509250929050565b600080600080600080600060a0888a031215612e5d57600080fd5b6000612e6b8a828b01612bfa565b9750506020612e7c8a828b01612bfa565b965050604088013567ffffffffffffffff811115612e9957600080fd5b612ea58a828b01612c98565b9550955050606088013567ffffffffffffffff811115612ec457600080fd5b612ed08a828b01612c98565b9350935050608088013567ffffffffffffffff811115612eef57600080fd5b612efb8a828b01612d4b565b91505092959891949750929550565b600080600080600060a08688031215612f2257600080fd5b6000612f3088828901612bfa565b9550506020612f4188828901612bfa565b9450506040612f5288828901612d9f565b9350506060612f6388828901612d9f565b925050608086013567ffffffffffffffff811115612f8057600080fd5b612f8c88828901612d4b565b9150509295509295909350565b60008060408385031215612fac57600080fd5b6000612fba85828601612bfa565b9250506020612fcb85828601612d0c565b9150509250929050565b60008060408385031215612fe857600080fd5b6000612ff685828601612bfa565b925050602061300785828601612d9f565b9150509250929050565b60008060006060848603121561302657600080fd5b600061303486828701612bfa565b935050602061304586828701612d9f565b925050604061305686828701612d9f565b9150509250925092565b6000806000806080858703121561307657600080fd5b600061308487828801612bfa565b945050602061309587828801612d9f565b93505060406130a687828801612d9f565b925050606085013567ffffffffffffffff8111156130c357600080fd5b6130cf87828801612d75565b91505092959194509250565b600080600080604085870312156130f157600080fd5b600085013567ffffffffffffffff81111561310b57600080fd5b61311787828801612c24565b9450945050602085013567ffffffffffffffff81111561313657600080fd5b61314287828801612c98565b925092505092959194509250565b6000806000806080858703121561316657600080fd5b600085013567ffffffffffffffff81111561318057600080fd5b61318c87828801612c6e565b945050602085013567ffffffffffffffff8111156131a957600080fd5b6131b587828801612c6e565b935050604085013567ffffffffffffffff8111156131d257600080fd5b6131de87828801612ce2565b925050606085013567ffffffffffffffff8111156131fb57600080fd5b61320787828801612ce2565b91505092959194509250565b60008060006060848603121561322857600080fd5b600084013567ffffffffffffffff81111561324257600080fd5b61324e86828701612c6e565b935050602084013567ffffffffffffffff81111561326b57600080fd5b61327786828701612ce2565b925050604084013567ffffffffffffffff81111561329457600080fd5b6132a086828701612ce2565b9150509250925092565b6000602082840312156132bc57600080fd5b60006132ca84828501612d21565b91505092915050565b6000602082840312156132e557600080fd5b60006132f384828501612d36565b91505092915050565b60006020828403121561330e57600080fd5b600082013567ffffffffffffffff81111561332857600080fd5b61333484828501612d75565b91505092915050565b60006020828403121561334f57600080fd5b600061335d84828501612d9f565b91505092915050565b6000806040838503121561337957600080fd5b600061338785828601612d9f565b925050602083013567ffffffffffffffff8111156133a457600080fd5b6133b085828601612d75565b9150509250929050565b60006133c6838361377b565b60208301905092915050565b6133db81613d11565b82525050565b60006133ed8385613c49565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561341c57600080fd5b60208302925061342d838584613da4565b82840190509392505050565b600061344482613c1b565b61344e8185613c49565b935061345983613bf6565b8060005b8381101561348a57815161347188826133ba565b975061347c83613c3c565b92505060018101905061345d565b5085935050505092915050565b6134a081613d23565b82525050565b60006134b182613c26565b6134bb8185613c5a565b93506134cb818560208601613db3565b6134d481613f1f565b840191505092915050565b6134e881613d92565b82525050565b60006134f982613c31565b6135038185613c6b565b9350613513818560208601613db3565b61351c81613f1f565b840191505092915050565b600061353282613c31565b61353c8185613c7c565b935061354c818560208601613db3565b80840191505092915050565b6000815461356581613de6565b61356f8186613c7c565b9450600182166000811461358a576001811461359b576135ce565b60ff198316865281860193506135ce565b6135a485613c06565b60005b838110156135c6578154818901526001820191506020810190506135a7565b838801955050505b50505092915050565b60006135e4602683613c6b565b91506135ef82613f30565b604082019050919050565b6000613607600d83613c6b565b915061361282613f7f565b602082019050919050565b600061362a600f83613c6b565b915061363582613fa8565b602082019050919050565b600061364d601f83613c6b565b915061365882613fd1565b602082019050919050565b6000613670602e83613c6b565b915061367b82613ffa565b604082019050919050565b6000613693601083613c6b565b915061369e82614049565b602082019050919050565b60006136b6602083613c6b565b91506136c182614072565b602082019050919050565b60006136d9600e83613c6b565b91506136e48261409b565b602082019050919050565b60006136fc600f83613c6b565b9150613707826140c4565b602082019050919050565b600061371f602b83613c6b565b915061372a826140ed565b604082019050919050565b6000613742600e83613c6b565b915061374d8261413c565b602082019050919050565b6000613765600e83613c6b565b915061377082614165565b602082019050919050565b61378481613d7b565b82525050565b61379381613d7b565b82525050565b60006137a58285613558565b91506137b18284613527565b91508190509392505050565b60006020820190506137d260008301846133d2565b92915050565b600060a0820190506137ed600083018a6133d2565b6137fa60208301896133d2565b818103604083015261380d8187896133e1565b905081810360608301526138228185876133e1565b9050818103608083015261383681846134a6565b905098975050505050505050565b600060a08201905061385960008301886133d2565b61386660208301876133d2565b613873604083018661378a565b613880606083018561378a565b818103608083015261389281846134a6565b90509695505050505050565b600060408201905081810360008301526138b98186886133e1565b905081810360208301526138ce8184866133e1565b905095945050505050565b600060208201905081810360008301526138f38184613439565b905092915050565b60006020820190506139106000830184613497565b92915050565b600060208201905061392b60008301846134df565b92915050565b6000602082019050818103600083015261394b81846134ee565b905092915050565b6000602082019050818103600083015261396c816135d7565b9050919050565b6000602082019050818103600083015261398c816135fa565b9050919050565b600060208201905081810360008301526139ac8161361d565b9050919050565b600060208201905081810360008301526139cc81613640565b9050919050565b600060208201905081810360008301526139ec81613663565b9050919050565b60006020820190508181036000830152613a0c81613686565b9050919050565b60006020820190508181036000830152613a2c816136a9565b9050919050565b60006020820190508181036000830152613a4c816136cc565b9050919050565b60006020820190508181036000830152613a6c816136ef565b9050919050565b60006020820190508181036000830152613a8c81613712565b9050919050565b60006020820190508181036000830152613aac81613735565b9050919050565b60006020820190508181036000830152613acc81613758565b9050919050565b6000602082019050613ae8600083018461378a565b92915050565b6000604082019050613b03600083018561378a565b613b10602083018461378a565b9392505050565b6000613b21613b32565b9050613b2d8282613e18565b919050565b6000604051905090565b600067ffffffffffffffff821115613b5757613b56613ef0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b8357613b82613ef0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613baf57613bae613ef0565b5b613bb882613f1f565b9050602081019050919050565b600067ffffffffffffffff821115613be057613bdf613ef0565b5b613be982613f1f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c9282613d7b565b9150613c9d83613d7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cd257613cd1613e92565b5b828201905092915050565b6000613ce882613d7b565b9150613cf383613d7b565b925082821015613d0657613d05613e92565b5b828203905092915050565b6000613d1c82613d5b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613d9d82613d85565b9050919050565b82818337600083830152505050565b60005b83811015613dd1578082015181840152602081019050613db6565b83811115613de0576000848401525b50505050565b60006002820490506001821680613dfe57607f821691505b60208210811415613e1257613e11613ec1565b5b50919050565b613e2182613f1f565b810181811067ffffffffffffffff82111715613e4057613e3f613ef0565b5b80604052505050565b6000613e5482613d7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e8757613e86613e92565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f446f65736e277420657869737400000000000000000000000000000000000000600082015250565b7f4e6f7420696e697469616c697a65640000000000000000000000000000000000600082015250565b7f7577752071756573743a205374616d7020616c72656164792065786973747300600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f57726f6e67206c656e6774682032000000000000000000000000000000000000600082015250565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f57726f6e67206c656e6774682031000000000000000000000000000000000000600082015250565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b61419781613d11565b81146141a257600080fd5b50565b6141ae81613d23565b81146141b957600080fd5b50565b6141c581613d2f565b81146141d057600080fd5b50565b6141dc81613d7b565b81146141e757600080fd5b5056fea26469706673582212201968054571a713e1ca698c4797725073693d4db77180967a2d4ddf5451504da064736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806363c57551116100de578063adfdeef911610097578063e985e9c511610071578063e985e9c514610456578063f1037c1214610486578063f242432a146104a2578063f2fde38b146104be5761018d565b8063adfdeef914610400578063b7f47d321461041c578063bb4ba5181461043a5761018d565b806363c57551146103645780636c0360eb14610380578063715018a61461039e5780638da5cb5b146103a857806395d89b41146103c6578063a22cb465146103e45761018d565b80632eb2c2d61161014b5780634e1273f4116101255780634e1273f4146102cc5780634f558e79146102fc57806355f804b31461032c578063628a743d146103485761018d565b80632eb2c2d6146102785780632fc01968146102945780633d192a70146102b05761018d565b8062fdd58e1461019257806301ffc9a7146101c257806306fdde03146101f25780630e89341c14610210578063156e29f614610240578063162094c41461025c575b600080fd5b6101ac60048036038101906101a79190612fd5565b6104da565b6040516101b99190613ad3565b60405180910390f35b6101dc60048036038101906101d791906132aa565b610534565b6040516101e991906138fb565b60405180910390f35b6101fa6105c6565b6040516102079190613931565b60405180910390f35b61022a6004803603810190610225919061333d565b6105ff565b6040516102379190613931565b60405180910390f35b61025a60048036038101906102559190613011565b610724565b005b61027660048036038101906102719190613366565b610808565b005b610292600480360381019061028d9190612e42565b610892565b005b6102ae60048036038101906102a991906132fc565b610cc6565b005b6102ca60048036038101906102c59190613060565b610d65565b005b6102e660048036038101906102e191906130db565b610e55565b6040516102f391906138d9565b60405180910390f35b6103166004803603810190610311919061333d565b611056565b60405161032391906138fb565b60405180910390f35b610346600480360381019061034191906132fc565b611082565b005b610362600480360381019061035d9190613213565b61110a565b005b61037e60048036038101906103799190613150565b61149a565b005b610388611714565b6040516103959190613931565b60405180910390f35b6103a66117a6565b005b6103b061182e565b6040516103bd91906137bd565b60405180910390f35b6103ce611858565b6040516103db9190613931565b60405180910390f35b6103fe60048036038101906103f99190612f99565b611891565b005b61041a60048036038101906104159190612db4565b61198e565b005b610424611a4e565b60405161043191906137bd565b60405180910390f35b610454600480360381019061044f9190613213565b611a74565b005b610470600480360381019061046b9190612e06565b611d1b565b60405161047d91906138fb565b60405180910390f35b6104a0600480360381019061049b9190613213565b611e1d565b005b6104bc60048036038101906104b79190612f0a565b611fa6565b005b6104d860048036038101906104d39190612db4565b6121a7565b005b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058f575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105bf5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6040518060400160405280601081526020017f757775205175657374205374616d70730000000000000000000000000000000081525081565b606061060a82611056565b610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090613973565b60405180910390fd5b600060026000848152602001908152602001600020805461066990613de6565b80601f016020809104026020016040519081016040528092919081815260200182805461069590613de6565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b5050505050905060008151116106f8578061071c565b60038160405160200161070c929190613799565b6040516020818303038152906040525b915050919050565b61072c61229f565b73ffffffffffffffffffffffffffffffffffffffff1661074a61182e565b73ffffffffffffffffffffffffffffffffffffffff16146107a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079790613a13565b60405180910390fd5b6107a982611056565b6107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90613993565b60405180910390fd5b610803838383604051806020016040528060008152506122a7565b505050565b61081061229f565b73ffffffffffffffffffffffffffffffffffffffff1661082e61182e565b73ffffffffffffffffffffffffffffffffffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90613a13565b60405180910390fd5b61088e8282612502565b5050565b8282905085859050146108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190613a53565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061091a57506109198733611d1b565b5b610959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095090613ab3565b60405180910390fd5b60008060005b87879050811015610ac5578787828181106109a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013592508585828181106109e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201359150816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a4d9190613cdd565b92505081905550816000808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610ab39190613c87565b9250508190555080600101905061095f565b508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8a8a8a8a604051610b40949392919061389e565b60405180910390a460008873ffffffffffffffffffffffffffffffffffffffff163b14610c4a5763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168873ffffffffffffffffffffffffffffffffffffffff1663bc197c81338c8b8b8b8b8b6040518863ffffffff1660e01b8152600401610bd397969594939291906137d8565b602060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2591906132d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610c7c565b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb2906139f3565b60405180910390fd5b505050505050505050565b6000610cd2600161256e565b90508015610cf6576001600460016101000a81548160ff0219169083151502179055505b610cfe612662565b610d07826126bb565b8015610d61576000600460016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d589190613916565b60405180910390a15b5050565b610d6d61229f565b73ffffffffffffffffffffffffffffffffffffffff16610d8b61182e565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890613a13565b60405180910390fd5b610dea83611056565b15610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906139b3565b60405180910390fd5b610e348382612502565b610e4f848484604051806020016040528060008152506122a7565b50505050565b6060828290508585905014610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690613a53565b60405180910390fd5b8484905067ffffffffffffffff811115610ee2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f105781602001602082028036833780820191505090505b50905060005b8585905081101561104d57600080878784818110610f5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610f729190612db4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610fe7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002054828281518110611036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806001019050610f16565b50949350505050565b60008060026000848152602001908152602001600020805461107790613de6565b905014159050919050565b61108a61229f565b73ffffffffffffffffffffffffffffffffffffffff166110a861182e565b73ffffffffffffffffffffffffffffffffffffffff16146110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590613a13565b60405180910390fd5b611107816126bb565b50565b61111261229f565b73ffffffffffffffffffffffffffffffffffffffff1661113061182e565b73ffffffffffffffffffffffffffffffffffffffff1614611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90613a13565b60405180910390fd5b81518351146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190613a93565b60405180910390fd5b805182511461120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590613a33565b60405180910390fd5b60005b835181101561149457600060026000858481518110611259577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518152602001908152602001600020805461127a90613de6565b905014156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490613993565b60405180910390fd5b60006113498583815181106112fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185848151811061133c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104da565b9050828281518110611384577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151811015611480576000818484815181106113cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113e19190613cdd565b905061147e86848151811061141f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151868581518110611460577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183604051806020016040528060008152506122a7565b505b50808061148c90613e49565b915050611211565b50505050565b6114a261229f565b73ffffffffffffffffffffffffffffffffffffffff166114c061182e565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613a13565b60405180910390fd5b825184511461155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190613a93565b60405180910390fd5b815183511461159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590613a93565b60405180910390fd5b80518251146115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990613a33565b60405180910390fd5b60005b845181101561170d576116fa85828151811061162a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061166b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518584815181106116ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518585815181106116ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516126d5565b808061170590613e49565b9150506115e5565b5050505050565b60606003805461172390613de6565b80601f016020809104026020016040519081016040528092919081815260200182805461174f90613de6565b801561179c5780601f106117715761010080835404028352916020019161179c565b820191906000526020600020905b81548152906001019060200180831161177f57829003601f168201915b5050505050905090565b6117ae61229f565b73ffffffffffffffffffffffffffffffffffffffff166117cc61182e565b73ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613a13565b60405180910390fd5b61182c6000612825565b565b6000600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600581526020017f555755515300000000000000000000000000000000000000000000000000000081525081565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161198291906138fb565b60405180910390a35050565b61199661229f565b73ffffffffffffffffffffffffffffffffffffffff166119b461182e565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190613a13565b60405180910390fd5b80603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a7c61229f565b73ffffffffffffffffffffffffffffffffffffffff16611a9a61182e565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790613a13565b60405180910390fd5b8151835114611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90613a93565b60405180910390fd5b8051825114611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613a33565b60405180910390fd5b60005b8351811015611d1557600060026000858481518110611bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000208054611be490613de6565b90501415611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613993565b60405180910390fd5b611d02848281518110611c63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848381518110611ca4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848481518110611ce5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051806020016040528060008152506122a7565b8080611d0d90613e49565b915050611b7b565b50505050565b600080603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611d9391906137bd565b60206040518083038186803b158015611dab57600080fd5b505afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190612ddd565b73ffffffffffffffffffffffffffffffffffffffff161415611e09576001915050611e17565b611e1384846128eb565b9150505b92915050565b8151835114611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890613a93565b60405180910390fd5b8051825114611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613a33565b60405180910390fd5b60005b8351811015611fa057611f8d33858381518110611eee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858481518110611f2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858581518110611f70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405180602001604052806000815250611fa6565b8080611f9890613e49565b915050611ea8565b50505050565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611fe65750611fe58533611d1b565b5b612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613ab3565b60405180910390fd5b612031858585856126d5565b60008473ffffffffffffffffffffffffffffffffffffffff163b1461212f5763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e6133888787876040518663ffffffff1660e01b81526004016120b8959493929190613844565b602060405180830381600087803b1580156120d257600080fd5b505af11580156120e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210a91906132d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612161565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6121a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612197906139f3565b60405180910390fd5b5050505050565b6121af61229f565b73ffffffffffffffffffffffffffffffffffffffff166121cd61182e565b73ffffffffffffffffffffffffffffffffffffffff1614612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613a13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613953565b60405180910390fd5b61229c81612825565b50565b600033905090565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546123069190613c87565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051612384929190613aee565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b1461248b5763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b8152600401612414959493929190613844565b602060405180830381600087803b15801561242e57600080fd5b505af1158015612442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246691906132d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124bd565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3906139f3565b60405180910390fd5b50505050565b80600260008481526020019081526020016000209080519060200190612529929190612a03565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612555846105ff565b6040516125629190613931565b60405180910390a25050565b6000600460019054906101000a900460ff16156125e65760018260ff1614801561259e575061259c3061297f565b155b6125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d4906139d3565b60405180910390fd5b6000905061265d565b8160ff16600460009054906101000a900460ff1660ff161061263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906139d3565b60405180910390fd5b81600460006101000a81548160ff021916908360ff160217905550600190505b919050565b600460019054906101000a900460ff166126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890613a73565b60405180910390fd5b6126b96129a2565b565b80600390805190602001906126d1929190612a03565b5050565b806000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546127349190613cdd565b92505081905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461279a9190613c87565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612817929190613aee565b60405180910390a450505050565b6000600460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600460019054906101000a900460ff166129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890613a73565b60405180910390fd5b612a016129fc61229f565b612825565b565b828054612a0f90613de6565b90600052602060002090601f016020900481019282612a315760008555612a78565b82601f10612a4a57805160ff1916838001178555612a78565b82800160010185558215612a78579182015b82811115612a77578251825591602001919060010190612a5c565b5b509050612a859190612a89565b5090565b5b80821115612aa2576000816000905550600101612a8a565b5090565b6000612ab9612ab484613b3c565b613b17565b90508083825260208201905082856020860282011115612ad857600080fd5b60005b85811015612b085781612aee8882612bfa565b845260208401935060208301925050600181019050612adb565b5050509392505050565b6000612b25612b2084613b68565b613b17565b90508083825260208201905082856020860282011115612b4457600080fd5b60005b85811015612b745781612b5a8882612d9f565b845260208401935060208301925050600181019050612b47565b5050509392505050565b6000612b91612b8c84613b94565b613b17565b905082815260208101848484011115612ba957600080fd5b612bb4848285613da4565b509392505050565b6000612bcf612bca84613bc5565b613b17565b905082815260208101848484011115612be757600080fd5b612bf2848285613da4565b509392505050565b600081359050612c098161418e565b92915050565b600081519050612c1e8161418e565b92915050565b60008083601f840112612c3657600080fd5b8235905067ffffffffffffffff811115612c4f57600080fd5b602083019150836020820283011115612c6757600080fd5b9250929050565b600082601f830112612c7f57600080fd5b8135612c8f848260208601612aa6565b91505092915050565b60008083601f840112612caa57600080fd5b8235905067ffffffffffffffff811115612cc357600080fd5b602083019150836020820283011115612cdb57600080fd5b9250929050565b600082601f830112612cf357600080fd5b8135612d03848260208601612b12565b91505092915050565b600081359050612d1b816141a5565b92915050565b600081359050612d30816141bc565b92915050565b600081519050612d45816141bc565b92915050565b600082601f830112612d5c57600080fd5b8135612d6c848260208601612b7e565b91505092915050565b600082601f830112612d8657600080fd5b8135612d96848260208601612bbc565b91505092915050565b600081359050612dae816141d3565b92915050565b600060208284031215612dc657600080fd5b6000612dd484828501612bfa565b91505092915050565b600060208284031215612def57600080fd5b6000612dfd84828501612c0f565b91505092915050565b60008060408385031215612e1957600080fd5b6000612e2785828601612bfa565b9250506020612e3885828601612bfa565b9150509250929050565b600080600080600080600060a0888a031215612e5d57600080fd5b6000612e6b8a828b01612bfa565b9750506020612e7c8a828b01612bfa565b965050604088013567ffffffffffffffff811115612e9957600080fd5b612ea58a828b01612c98565b9550955050606088013567ffffffffffffffff811115612ec457600080fd5b612ed08a828b01612c98565b9350935050608088013567ffffffffffffffff811115612eef57600080fd5b612efb8a828b01612d4b565b91505092959891949750929550565b600080600080600060a08688031215612f2257600080fd5b6000612f3088828901612bfa565b9550506020612f4188828901612bfa565b9450506040612f5288828901612d9f565b9350506060612f6388828901612d9f565b925050608086013567ffffffffffffffff811115612f8057600080fd5b612f8c88828901612d4b565b9150509295509295909350565b60008060408385031215612fac57600080fd5b6000612fba85828601612bfa565b9250506020612fcb85828601612d0c565b9150509250929050565b60008060408385031215612fe857600080fd5b6000612ff685828601612bfa565b925050602061300785828601612d9f565b9150509250929050565b60008060006060848603121561302657600080fd5b600061303486828701612bfa565b935050602061304586828701612d9f565b925050604061305686828701612d9f565b9150509250925092565b6000806000806080858703121561307657600080fd5b600061308487828801612bfa565b945050602061309587828801612d9f565b93505060406130a687828801612d9f565b925050606085013567ffffffffffffffff8111156130c357600080fd5b6130cf87828801612d75565b91505092959194509250565b600080600080604085870312156130f157600080fd5b600085013567ffffffffffffffff81111561310b57600080fd5b61311787828801612c24565b9450945050602085013567ffffffffffffffff81111561313657600080fd5b61314287828801612c98565b925092505092959194509250565b6000806000806080858703121561316657600080fd5b600085013567ffffffffffffffff81111561318057600080fd5b61318c87828801612c6e565b945050602085013567ffffffffffffffff8111156131a957600080fd5b6131b587828801612c6e565b935050604085013567ffffffffffffffff8111156131d257600080fd5b6131de87828801612ce2565b925050606085013567ffffffffffffffff8111156131fb57600080fd5b61320787828801612ce2565b91505092959194509250565b60008060006060848603121561322857600080fd5b600084013567ffffffffffffffff81111561324257600080fd5b61324e86828701612c6e565b935050602084013567ffffffffffffffff81111561326b57600080fd5b61327786828701612ce2565b925050604084013567ffffffffffffffff81111561329457600080fd5b6132a086828701612ce2565b9150509250925092565b6000602082840312156132bc57600080fd5b60006132ca84828501612d21565b91505092915050565b6000602082840312156132e557600080fd5b60006132f384828501612d36565b91505092915050565b60006020828403121561330e57600080fd5b600082013567ffffffffffffffff81111561332857600080fd5b61333484828501612d75565b91505092915050565b60006020828403121561334f57600080fd5b600061335d84828501612d9f565b91505092915050565b6000806040838503121561337957600080fd5b600061338785828601612d9f565b925050602083013567ffffffffffffffff8111156133a457600080fd5b6133b085828601612d75565b9150509250929050565b60006133c6838361377b565b60208301905092915050565b6133db81613d11565b82525050565b60006133ed8385613c49565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561341c57600080fd5b60208302925061342d838584613da4565b82840190509392505050565b600061344482613c1b565b61344e8185613c49565b935061345983613bf6565b8060005b8381101561348a57815161347188826133ba565b975061347c83613c3c565b92505060018101905061345d565b5085935050505092915050565b6134a081613d23565b82525050565b60006134b182613c26565b6134bb8185613c5a565b93506134cb818560208601613db3565b6134d481613f1f565b840191505092915050565b6134e881613d92565b82525050565b60006134f982613c31565b6135038185613c6b565b9350613513818560208601613db3565b61351c81613f1f565b840191505092915050565b600061353282613c31565b61353c8185613c7c565b935061354c818560208601613db3565b80840191505092915050565b6000815461356581613de6565b61356f8186613c7c565b9450600182166000811461358a576001811461359b576135ce565b60ff198316865281860193506135ce565b6135a485613c06565b60005b838110156135c6578154818901526001820191506020810190506135a7565b838801955050505b50505092915050565b60006135e4602683613c6b565b91506135ef82613f30565b604082019050919050565b6000613607600d83613c6b565b915061361282613f7f565b602082019050919050565b600061362a600f83613c6b565b915061363582613fa8565b602082019050919050565b600061364d601f83613c6b565b915061365882613fd1565b602082019050919050565b6000613670602e83613c6b565b915061367b82613ffa565b604082019050919050565b6000613693601083613c6b565b915061369e82614049565b602082019050919050565b60006136b6602083613c6b565b91506136c182614072565b602082019050919050565b60006136d9600e83613c6b565b91506136e48261409b565b602082019050919050565b60006136fc600f83613c6b565b9150613707826140c4565b602082019050919050565b600061371f602b83613c6b565b915061372a826140ed565b604082019050919050565b6000613742600e83613c6b565b915061374d8261413c565b602082019050919050565b6000613765600e83613c6b565b915061377082614165565b602082019050919050565b61378481613d7b565b82525050565b61379381613d7b565b82525050565b60006137a58285613558565b91506137b18284613527565b91508190509392505050565b60006020820190506137d260008301846133d2565b92915050565b600060a0820190506137ed600083018a6133d2565b6137fa60208301896133d2565b818103604083015261380d8187896133e1565b905081810360608301526138228185876133e1565b9050818103608083015261383681846134a6565b905098975050505050505050565b600060a08201905061385960008301886133d2565b61386660208301876133d2565b613873604083018661378a565b613880606083018561378a565b818103608083015261389281846134a6565b90509695505050505050565b600060408201905081810360008301526138b98186886133e1565b905081810360208301526138ce8184866133e1565b905095945050505050565b600060208201905081810360008301526138f38184613439565b905092915050565b60006020820190506139106000830184613497565b92915050565b600060208201905061392b60008301846134df565b92915050565b6000602082019050818103600083015261394b81846134ee565b905092915050565b6000602082019050818103600083015261396c816135d7565b9050919050565b6000602082019050818103600083015261398c816135fa565b9050919050565b600060208201905081810360008301526139ac8161361d565b9050919050565b600060208201905081810360008301526139cc81613640565b9050919050565b600060208201905081810360008301526139ec81613663565b9050919050565b60006020820190508181036000830152613a0c81613686565b9050919050565b60006020820190508181036000830152613a2c816136a9565b9050919050565b60006020820190508181036000830152613a4c816136cc565b9050919050565b60006020820190508181036000830152613a6c816136ef565b9050919050565b60006020820190508181036000830152613a8c81613712565b9050919050565b60006020820190508181036000830152613aac81613735565b9050919050565b60006020820190508181036000830152613acc81613758565b9050919050565b6000602082019050613ae8600083018461378a565b92915050565b6000604082019050613b03600083018561378a565b613b10602083018461378a565b9392505050565b6000613b21613b32565b9050613b2d8282613e18565b919050565b6000604051905090565b600067ffffffffffffffff821115613b5757613b56613ef0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b8357613b82613ef0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613baf57613bae613ef0565b5b613bb882613f1f565b9050602081019050919050565b600067ffffffffffffffff821115613be057613bdf613ef0565b5b613be982613f1f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c9282613d7b565b9150613c9d83613d7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cd257613cd1613e92565b5b828201905092915050565b6000613ce882613d7b565b9150613cf383613d7b565b925082821015613d0657613d05613e92565b5b828203905092915050565b6000613d1c82613d5b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613d9d82613d85565b9050919050565b82818337600083830152505050565b60005b83811015613dd1578082015181840152602081019050613db6565b83811115613de0576000848401525b50505050565b60006002820490506001821680613dfe57607f821691505b60208210811415613e1257613e11613ec1565b5b50919050565b613e2182613f1f565b810181811067ffffffffffffffff82111715613e4057613e3f613ef0565b5b80604052505050565b6000613e5482613d7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e8757613e86613e92565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f446f65736e277420657869737400000000000000000000000000000000000000600082015250565b7f4e6f7420696e697469616c697a65640000000000000000000000000000000000600082015250565b7f7577752071756573743a205374616d7020616c72656164792065786973747300600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f57726f6e67206c656e6774682032000000000000000000000000000000000000600082015250565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f57726f6e67206c656e6774682031000000000000000000000000000000000000600082015250565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b61419781613d11565b81146141a257600080fd5b50565b6141ae81613d23565b81146141b957600080fd5b50565b6141c581613d2f565b81146141d057600080fd5b50565b6141dc81613d7b565b81146141e757600080fd5b5056fea26469706673582212201968054571a713e1ca698c4797725073693d4db77180967a2d4ddf5451504da064736f6c63430008040033
Deployed Bytecode Sourcemap
27232:3668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6243:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7179:345;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27342:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11874:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28356:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27652:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:1247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27493:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28100:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6384:601;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12632:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27776:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28985:591;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30463:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28004:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26117:103;;;:::i;:::-;;25466:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27394:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3671:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27879:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27442:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28516:427;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29935:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29585:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4053:628;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26375:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6243:133;6315:7;6342:10;:17;6353:5;6342:17;;;;;;;;;;;;;;;:26;6360:7;6342:26;;;;;;;;;;;;6335:33;;6243:133;;;;:::o;7179:345::-;7255:4;7307:10;7292:25;;:11;:25;;;;:101;;;;7383:10;7368:25;;:11;:25;;;;7292:101;:178;;;;7460:10;7445:25;;:11;:25;;;;7292:178;7272:198;;7179:345;;;:::o;27342:48::-;;;;;;;;;;;;;;;;;;;:::o;11874:393::-;11942:13;11976:15;11983:7;11976:6;:15::i;:::-;11968:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;12020:22;12045:10;:19;12056:7;12045:19;;;;;;;;;;;12020:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12200:1;12181:8;12175:22;:26;:84;;12251:8;12175:84;;;12228:8;12238;12211:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12175:84;12168:91;;;11874:393;;;:::o;28356:155::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28446:10:::1;28453:2;28446:6;:10::i;:::-;28438:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28481:25;28487:2;28491;28495:6;28481:25;;;;;;;;;;;::::0;:5:::1;:25::i;:::-;28356:155:::0;;;:::o;27652:119::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27739:27:::1;27747:7;27756:9;27739:7;:27::i;:::-;27652:119:::0;;:::o;4988:1247::-;5216:7;;:14;;5202:3;;:10;;:28;5194:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5285:4;5271:18;;:10;:18;;;:56;;;;5293:34;5310:4;5316:10;5293:16;:34::i;:::-;5271:56;5263:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;5431:10;5452:14;5484:9;5479:366;5503:3;;:10;;5499:1;:14;5479:366;;;5537:3;;5541:1;5537:6;;;;;;;;;;;;;;;;;;;;;5532:11;;5567:7;;5575:1;5567:10;;;;;;;;;;;;;;;;;;;;;5558:19;;5618:6;5594:10;:16;5605:4;5594:16;;;;;;;;;;;;;;;:20;5611:2;5594:20;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5661:6;5639:10;:14;5650:2;5639:14;;;;;;;;;;;;;;;:18;5654:2;5639:18;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;5815:3;;;;;5479:366;;;;5894:2;5862:49;;5888:4;5862:49;;5876:10;5862:49;;;5898:3;;5903:7;;5862:49;;;;;;;;;:::i;:::-;;;;;;;;5964:1;5946:2;:14;;;:19;:237;;6131:52;;;6021:162;;;6042:2;6021:47;;;6069:10;6081:4;6087:3;;6092:7;;6101:4;6021:85;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:162;;;;5946:237;;;5999:1;5985:16;;:2;:16;;;;5946:237;5924:303;;;;;;;;;;;;:::i;:::-;;;;;;;;;4988:1247;;;;;;;;;:::o;27493:154::-;21206:19;21228:25;21251:1;21228:22;:25::i;:::-;21206:47;;21268:14;21264:67;;;21315:4;21299:13;;:20;;;;;;;;;;;;;;;;;;21264:67;27591:16:::1;:14;:16::i;:::-;27618:21;27630:8;27618:11;:21::i;:::-;21357:14:::0;21353:102;;;21404:5;21388:13;;:21;;;;;;;;;;;;;;;;;;21429:14;21441:1;21429:14;;;;;;:::i;:::-;;;;;;;;21353:102;27493:154;;:::o;28100:251::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28227:15:::1;28234:7;28227:6;:15::i;:::-;28226:16;28218:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28283:27;28291:7;28300:9;28283:7;:27::i;:::-;28315:31;28321:3;28326:7;28335:6;28315:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;28100:251:::0;;;;:::o;6384:601::-;6524:25;6592:3;;:10;;6575:6;;:13;;:27;6567:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;6660:6;;:13;;6646:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6635:39;;6850:9;6845:122;6869:6;;:13;;6865:1;:17;6845:122;;;6922:10;:21;6933:6;;6940:1;6933:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6922:21;;;;;;;;;;;;;;;:29;6944:3;;6948:1;6944:6;;;;;;;;;;;;;;;;;;;;;6922:29;;;;;;;;;;;;6908:8;6917:1;6908:11;;;;;;;;;;;;;;;;;;;;;:43;;;;;6884:3;;;;;6845:122;;;;6384:601;;;;;;:::o;12632:124::-;12686:4;12747:1;12716:10;:19;12727:7;12716:19;;;;;;;;;;;12710:33;;;;;:::i;:::-;;;:38;;12703:45;;12632:124;;;:::o;27776:98::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27846:23:::1;27858:10;27846:11;:23::i;:::-;27776:98:::0;:::o;28985:591::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29133:3:::1;:10;29113:9;:16;:30;29105:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29189:7;:14;29175:3;:10;:28;29167:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:9;29227:345;29247:9;:16;29243:1;:20;29227:345;;;29320:1;29290:10;:18;29301:3;29305:1;29301:6;;;;;;;;;;;;;;;;;;;;;;29290:18;;;;;;;;;;;29284:32;;;;;:::i;:::-;;;:37;;29276:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29347:22;29372:31;29382:9;29392:1;29382:12;;;;;;;;;;;;;;;;;;;;;;29396:3;29400:1;29396:6;;;;;;;;;;;;;;;;;;;;;;29372:9;:31::i;:::-;29347:56;;29430:7;29438:1;29430:10;;;;;;;;;;;;;;;;;;;;;;29413:14;:27;29409:158;;;29449:21;29486:14;29473:7;29481:1;29473:10;;;;;;;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;29449:51;;29507:53;29513:9;29523:1;29513:12;;;;;;;;;;;;;;;;;;;;;;29527:3;29531:1;29527:6;;;;;;;;;;;;;;;;;;;;;;29535:13;29550:9;;;;;;;;;;;::::0;29507:5:::1;:53::i;:::-;29409:158;;29227:345;29265:3;;;;;:::i;:::-;;;;29227:345;;;;28985:591:::0;;;:::o;30463:434::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:3:::1;:10;30614:5;:12;:26;30606:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;30686:3;:10;30672:3;:10;:24;30664:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;30742:7;:14;30728:3;:10;:28;30720:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30787:9;30782:111;30802:5;:12;30798:1;:16;30782:111;;;30836:51;30850:5;30856:1;30850:8;;;;;;;;;;;;;;;;;;;;;;30860:3;30864:1;30860:6;;;;;;;;;;;;;;;;;;;;;;30868:3;30872:1;30868:6;;;;;;;;;;;;;;;;;;;;;;30876:7;30884:1;30876:10;;;;;;;;;;;;;;;;;;;;;;30836:13;:51::i;:::-;30816:3;;;;;:::i;:::-;;;;30782:111;;;;30463:434:::0;;;;:::o;28004:91::-;28046:13;28079:8;28072:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28004:91;:::o;26117:103::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26182:30:::1;26209:1;26182:18;:30::i;:::-;26117:103::o:0;25466:87::-;25512:7;25539:6;;;;;;;;;;;25532:13;;25466:87;:::o;27394:39::-;;;;;;;;;;;;;;;;;;;:::o;3671:208::-;3799:8;3757:17;:29;3775:10;3757:29;;;;;;;;;;;;;;;:39;3787:8;3757:39;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;3852:8;3825:46;;3840:10;3825:46;;;3862:8;3825:46;;;;;;:::i;:::-;;;;;;;;3671:208;;:::o;27879:117::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:8:::1;27953:27;;:38;;;;;;;;;;;;;;;;;;27879:117:::0;:::o;27442:42::-;;;;;;;;;;;;;:::o;28516:427::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28660:3:::1;:10;28640:9;:16;:30;28632:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28716:7;:14;28702:3;:10;:28;28694:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28759:9;28754:185;28774:9;:16;28770:1;:20;28754:185;;;28847:1;28817:10;:18;28828:3;28832:1;28828:6;;;;;;;;;;;;;;;;;;;;;;28817:18;;;;;;;;;;;28811:32;;;;;:::i;:::-;;;:37;;28803:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28883:50;28889:9;28899:1;28889:12;;;;;;;;;;;;;;;;;;;;;;28903:3;28907:1;28903:6;;;;;;;;;;;;;;;;;;;;;;28911:7;28919:1;28911:10;;;;;;;;;;;;;;;;;;;;;;28923:9;;;;;;;;;;;::::0;28883:5:::1;:50::i;:::-;28792:3;;;;;:::i;:::-;;;;28754:185;;;;28516:427:::0;;;:::o;29935:523::-;30060:4;30225:27;30269;;;;;;;;;;;30225:72;;30344:8;30312:40;;:13;:21;;;30334:5;30312:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;30308:84;;;30376:4;30369:11;;;;;30308:84;30411:39;30434:5;30441:8;30411:22;:39::i;:::-;30404:46;;;29935:523;;;;;:::o;29585:342::-;29711:3;:10;29697:3;:10;:24;29689:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29767:7;:14;29753:3;:10;:28;29745:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29812:9;29807:116;29827:3;:10;29823:1;:14;29807:116;;;29850:67;29867:10;29879:3;29883:1;29879:6;;;;;;;;;;;;;;;;;;;;;;29887:3;29891:1;29887:6;;;;;;;;;;;;;;;;;;;;;;29895:7;29903:1;29895:10;;;;;;;;;;;;;;;;;;;;;;29907:9;;;;;;;;;;;;29850:16;:67::i;:::-;29839:3;;;;;:::i;:::-;;;;29807:116;;;;29585:342;;;:::o;4053:628::-;4252:4;4238:18;;:10;:18;;;:56;;;;4260:34;4277:4;4283:10;4260:16;:34::i;:::-;4238:56;4230:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;4326:35;4340:4;4346:2;4350;4354:6;4326:13;:35::i;:::-;4422:1;4404:2;:14;;;:19;:225;;4582:47;;;4479:150;;;4500:2;4479:42;;;4522:10;4534:4;4540:2;4544:6;4552:4;4479:78;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:150;;;;4404:225;;;4457:1;4443:16;;:2;:16;;;;4404:225;4382:291;;;;;;;;;;;;:::i;:::-;;;;;;;;;4053:628;;;;;:::o;26375:201::-;25697:12;:10;:12::i;:::-;25686:23;;:7;:5;:7::i;:::-;:23;;;25678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26484:1:::1;26464:22;;:8;:22;;;;26456:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26540:28;26559:8;26540:18;:28::i;:::-;26375:201:::0;:::o;12796:98::-;12849:7;12876:10;12869:17;;12796:98;:::o;7724:563::-;7891:6;7869:10;:14;7880:2;7869:14;;;;;;;;;;;;;;;:18;7884:2;7869:18;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;7954:2;7915:54;;7950:1;7915:54;;7930:10;7915:54;;;7958:2;7962:6;7915:54;;;;;;;:::i;:::-;;;;;;;;8022:1;8004:2;:14;;;:19;:231;;8188:47;;;8079:156;;;8100:2;8079:42;;;8122:10;8142:1;8146:2;8150:6;8158:4;8079:84;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:156;;;;8004:231;;;8057:1;8043:16;;:2;:16;;;;8004:231;7982:297;;;;;;;;;;;;:::i;:::-;;;;;;;;;7724:563;;;;:::o;12458:166::-;12566:8;12544:10;:19;12555:7;12544:19;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;12608:7;12590:26;12594:12;12598:7;12594:3;:12::i;:::-;12590:26;;;;;;:::i;:::-;;;;;;;;12458:166;;:::o;23436:823::-;23500:4;23837:13;;;;;;;;;;;23833:419;;;23904:1;23893:7;:12;;;:61;;;;;23910:44;23948:4;23910:29;:44::i;:::-;23909:45;23893:61;23867:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24058:5;24051:12;;;;23833:419;24119:7;24104:22;;:12;;;;;;;;;;;:22;;;24096:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24207:7;24192:12;;:22;;;;;;;;;;;;;;;;;;24236:4;24229:11;;23436:823;;;;:::o;25167:97::-;22833:13;;;;;;;;;;;22825:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25230:26:::1;:24;:26::i;:::-;25167:97::o:0;12275:98::-;12358:7;12347:8;:18;;;;;;;;;;;;:::i;:::-;;12275:98;:::o;4689:291::-;4861:6;4837:10;:16;4848:4;4837:16;;;;;;;;;;;;;;;:20;4854:2;4837:20;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;4900:6;4878:10;:14;4889:2;4878:14;;;;;;;;;;;;;;;:18;4893:2;4878:18;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;4957:2;4924:48;;4951:4;4924:48;;4939:10;4924:48;;;4961:2;4965:6;4924:48;;;;;;;:::i;:::-;;;;;;;;4689:291;;;;:::o;26736:191::-;26810:16;26829:6;;;;;;;;;;;26810:25;;26855:8;26846:6;;:17;;;;;;;;;;;;;;;;;;26910:8;26879:40;;26900:8;26879:40;;;;;;;;;;;;26736:191;;:::o;3887:158::-;3977:4;4001:17;:26;4019:7;4001:26;;;;;;;;;;;;;;;:36;4028:8;4001:36;;;;;;;;;;;;;;;;;;;;;;;;;3994:43;;3887:158;;;;:::o;14163:326::-;14223:4;14480:1;14458:7;:19;;;:23;14451:30;;14163:326;;;:::o;25272:113::-;22833:13;;;;;;;;;;;22825:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25345:32:::1;25364:12;:10;:12::i;:::-;25345:18;:32::i;:::-;25272:113::o:0;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2208:143::-;2265:5;2296:6;2290:13;2281:22;;2312:33;2339:5;2312:33;:::i;:::-;2271:80;;;;:::o;2374:367::-;2447:8;2457:6;2507:3;2500:4;2492:6;2488:17;2484:27;2474:2;;2525:1;2522;2515:12;2474:2;2561:6;2548:20;2538:30;;2591:18;2583:6;2580:30;2577:2;;;2623:1;2620;2613:12;2577:2;2660:4;2652:6;2648:17;2636:29;;2714:3;2706:4;2698:6;2694:17;2684:8;2680:32;2677:41;2674:2;;;2731:1;2728;2721:12;2674:2;2464:277;;;;;:::o;2764:303::-;2835:5;2884:3;2877:4;2869:6;2865:17;2861:27;2851:2;;2902:1;2899;2892:12;2851:2;2942:6;2929:20;2967:94;3057:3;3049:6;3042:4;3034:6;3030:17;2967:94;:::i;:::-;2958:103;;2841:226;;;;;:::o;3090:367::-;3163:8;3173:6;3223:3;3216:4;3208:6;3204:17;3200:27;3190:2;;3241:1;3238;3231:12;3190:2;3277:6;3264:20;3254:30;;3307:18;3299:6;3296:30;3293:2;;;3339:1;3336;3329:12;3293:2;3376:4;3368:6;3364:17;3352:29;;3430:3;3422:4;3414:6;3410:17;3400:8;3396:32;3393:41;3390:2;;;3447:1;3444;3437:12;3390:2;3180:277;;;;;:::o;3480:303::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:2;;3618:1;3615;3608:12;3567:2;3658:6;3645:20;3683:94;3773:3;3765:6;3758:4;3750:6;3746:17;3683:94;:::i;:::-;3674:103;;3557:226;;;;;:::o;3789:133::-;3832:5;3870:6;3857:20;3848:29;;3886:30;3910:5;3886:30;:::i;:::-;3838:84;;;;:::o;3928:137::-;3973:5;4011:6;3998:20;3989:29;;4027:32;4053:5;4027:32;:::i;:::-;3979:86;;;;:::o;4071:141::-;4127:5;4158:6;4152:13;4143:22;;4174:32;4200:5;4174:32;:::i;:::-;4133:79;;;;:::o;4231:271::-;4286:5;4335:3;4328:4;4320:6;4316:17;4312:27;4302:2;;4353:1;4350;4343:12;4302:2;4393:6;4380:20;4418:78;4492:3;4484:6;4477:4;4469:6;4465:17;4418:78;:::i;:::-;4409:87;;4292:210;;;;;:::o;4522:273::-;4578:5;4627:3;4620:4;4612:6;4608:17;4604:27;4594:2;;4645:1;4642;4635:12;4594:2;4685:6;4672:20;4710:79;4785:3;4777:6;4770:4;4762:6;4758:17;4710:79;:::i;:::-;4701:88;;4584:211;;;;;:::o;4801:139::-;4847:5;4885:6;4872:20;4863:29;;4901:33;4928:5;4901:33;:::i;:::-;4853:87;;;;:::o;4946:262::-;5005:6;5054:2;5042:9;5033:7;5029:23;5025:32;5022:2;;;5070:1;5067;5060:12;5022:2;5113:1;5138:53;5183:7;5174:6;5163:9;5159:22;5138:53;:::i;:::-;5128:63;;5084:117;5012:196;;;;:::o;5214:284::-;5284:6;5333:2;5321:9;5312:7;5308:23;5304:32;5301:2;;;5349:1;5346;5339:12;5301:2;5392:1;5417:64;5473:7;5464:6;5453:9;5449:22;5417:64;:::i;:::-;5407:74;;5363:128;5291:207;;;;:::o;5504:407::-;5572:6;5580;5629:2;5617:9;5608:7;5604:23;5600:32;5597:2;;;5645:1;5642;5635:12;5597:2;5688:1;5713:53;5758:7;5749:6;5738:9;5734:22;5713:53;:::i;:::-;5703:63;;5659:117;5815:2;5841:53;5886:7;5877:6;5866:9;5862:22;5841:53;:::i;:::-;5831:63;;5786:118;5587:324;;;;;:::o;5917:1281::-;6075:6;6083;6091;6099;6107;6115;6123;6172:3;6160:9;6151:7;6147:23;6143:33;6140:2;;;6189:1;6186;6179:12;6140:2;6232:1;6257:53;6302:7;6293:6;6282:9;6278:22;6257:53;:::i;:::-;6247:63;;6203:117;6359:2;6385:53;6430:7;6421:6;6410:9;6406:22;6385:53;:::i;:::-;6375:63;;6330:118;6515:2;6504:9;6500:18;6487:32;6546:18;6538:6;6535:30;6532:2;;;6578:1;6575;6568:12;6532:2;6614:80;6686:7;6677:6;6666:9;6662:22;6614:80;:::i;:::-;6596:98;;;;6458:246;6771:2;6760:9;6756:18;6743:32;6802:18;6794:6;6791:30;6788:2;;;6834:1;6831;6824:12;6788:2;6870:80;6942:7;6933:6;6922:9;6918:22;6870:80;:::i;:::-;6852:98;;;;6714:246;7027:3;7016:9;7012:19;6999:33;7059:18;7051:6;7048:30;7045:2;;;7091:1;7088;7081:12;7045:2;7119:62;7173:7;7164:6;7153:9;7149:22;7119:62;:::i;:::-;7109:72;;6970:221;6130:1068;;;;;;;;;;:::o;7204:955::-;7308:6;7316;7324;7332;7340;7389:3;7377:9;7368:7;7364:23;7360:33;7357:2;;;7406:1;7403;7396:12;7357:2;7449:1;7474:53;7519:7;7510:6;7499:9;7495:22;7474:53;:::i;:::-;7464:63;;7420:117;7576:2;7602:53;7647:7;7638:6;7627:9;7623:22;7602:53;:::i;:::-;7592:63;;7547:118;7704:2;7730:53;7775:7;7766:6;7755:9;7751:22;7730:53;:::i;:::-;7720:63;;7675:118;7832:2;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7803:118;7988:3;7977:9;7973:19;7960:33;8020:18;8012:6;8009:30;8006:2;;;8052:1;8049;8042:12;8006:2;8080:62;8134:7;8125:6;8114:9;8110:22;8080:62;:::i;:::-;8070:72;;7931:221;7347:812;;;;;;;;:::o;8165:401::-;8230:6;8238;8287:2;8275:9;8266:7;8262:23;8258:32;8255:2;;;8303:1;8300;8293:12;8255:2;8346:1;8371:53;8416:7;8407:6;8396:9;8392:22;8371:53;:::i;:::-;8361:63;;8317:117;8473:2;8499:50;8541:7;8532:6;8521:9;8517:22;8499:50;:::i;:::-;8489:60;;8444:115;8245:321;;;;;:::o;8572:407::-;8640:6;8648;8697:2;8685:9;8676:7;8672:23;8668:32;8665:2;;;8713:1;8710;8703:12;8665:2;8756:1;8781:53;8826:7;8817:6;8806:9;8802:22;8781:53;:::i;:::-;8771:63;;8727:117;8883:2;8909:53;8954:7;8945:6;8934:9;8930:22;8909:53;:::i;:::-;8899:63;;8854:118;8655:324;;;;;:::o;8985:552::-;9062:6;9070;9078;9127:2;9115:9;9106:7;9102:23;9098:32;9095:2;;;9143:1;9140;9133:12;9095:2;9186:1;9211:53;9256:7;9247:6;9236:9;9232:22;9211:53;:::i;:::-;9201:63;;9157:117;9313:2;9339:53;9384:7;9375:6;9364:9;9360:22;9339:53;:::i;:::-;9329:63;;9284:118;9441:2;9467:53;9512:7;9503:6;9492:9;9488:22;9467:53;:::i;:::-;9457:63;;9412:118;9085:452;;;;;:::o;9543:811::-;9639:6;9647;9655;9663;9712:3;9700:9;9691:7;9687:23;9683:33;9680:2;;;9729:1;9726;9719:12;9680:2;9772:1;9797:53;9842:7;9833:6;9822:9;9818:22;9797:53;:::i;:::-;9787:63;;9743:117;9899:2;9925:53;9970:7;9961:6;9950:9;9946:22;9925:53;:::i;:::-;9915:63;;9870:118;10027:2;10053:53;10098:7;10089:6;10078:9;10074:22;10053:53;:::i;:::-;10043:63;;9998:118;10183:2;10172:9;10168:18;10155:32;10214:18;10206:6;10203:30;10200:2;;;10246:1;10243;10236:12;10200:2;10274:63;10329:7;10320:6;10309:9;10305:22;10274:63;:::i;:::-;10264:73;;10126:221;9670:684;;;;;;;:::o;10360:733::-;10482:6;10490;10498;10506;10555:2;10543:9;10534:7;10530:23;10526:32;10523:2;;;10571:1;10568;10561:12;10523:2;10642:1;10631:9;10627:17;10614:31;10672:18;10664:6;10661:30;10658:2;;;10704:1;10701;10694:12;10658:2;10740:80;10812:7;10803:6;10792:9;10788:22;10740:80;:::i;:::-;10722:98;;;;10585:245;10897:2;10886:9;10882:18;10869:32;10928:18;10920:6;10917:30;10914:2;;;10960:1;10957;10950:12;10914:2;10996:80;11068:7;11059:6;11048:9;11044:22;10996:80;:::i;:::-;10978:98;;;;10840:246;10513:580;;;;;;;:::o;11099:1270::-;11285:6;11293;11301;11309;11358:3;11346:9;11337:7;11333:23;11329:33;11326:2;;;11375:1;11372;11365:12;11326:2;11446:1;11435:9;11431:17;11418:31;11476:18;11468:6;11465:30;11462:2;;;11508:1;11505;11498:12;11462:2;11536:78;11606:7;11597:6;11586:9;11582:22;11536:78;:::i;:::-;11526:88;;11389:235;11691:2;11680:9;11676:18;11663:32;11722:18;11714:6;11711:30;11708:2;;;11754:1;11751;11744:12;11708:2;11782:78;11852:7;11843:6;11832:9;11828:22;11782:78;:::i;:::-;11772:88;;11634:236;11937:2;11926:9;11922:18;11909:32;11968:18;11960:6;11957:30;11954:2;;;12000:1;11997;11990:12;11954:2;12028:78;12098:7;12089:6;12078:9;12074:22;12028:78;:::i;:::-;12018:88;;11880:236;12183:2;12172:9;12168:18;12155:32;12214:18;12206:6;12203:30;12200:2;;;12246:1;12243;12236:12;12200:2;12274:78;12344:7;12335:6;12324:9;12320:22;12274:78;:::i;:::-;12264:88;;12126:236;11316:1053;;;;;;;:::o;12375:981::-;12527:6;12535;12543;12592:2;12580:9;12571:7;12567:23;12563:32;12560:2;;;12608:1;12605;12598:12;12560:2;12679:1;12668:9;12664:17;12651:31;12709:18;12701:6;12698:30;12695:2;;;12741:1;12738;12731:12;12695:2;12769:78;12839:7;12830:6;12819:9;12815:22;12769:78;:::i;:::-;12759:88;;12622:235;12924:2;12913:9;12909:18;12896:32;12955:18;12947:6;12944:30;12941:2;;;12987:1;12984;12977:12;12941:2;13015:78;13085:7;13076:6;13065:9;13061:22;13015:78;:::i;:::-;13005:88;;12867:236;13170:2;13159:9;13155:18;13142:32;13201:18;13193:6;13190:30;13187:2;;;13233:1;13230;13223:12;13187:2;13261:78;13331:7;13322:6;13311:9;13307:22;13261:78;:::i;:::-;13251:88;;13113:236;12550:806;;;;;:::o;13362:260::-;13420:6;13469:2;13457:9;13448:7;13444:23;13440:32;13437:2;;;13485:1;13482;13475:12;13437:2;13528:1;13553:52;13597:7;13588:6;13577:9;13573:22;13553:52;:::i;:::-;13543:62;;13499:116;13427:195;;;;:::o;13628:282::-;13697:6;13746:2;13734:9;13725:7;13721:23;13717:32;13714:2;;;13762:1;13759;13752:12;13714:2;13805:1;13830:63;13885:7;13876:6;13865:9;13861:22;13830:63;:::i;:::-;13820:73;;13776:127;13704:206;;;;:::o;13916:375::-;13985:6;14034:2;14022:9;14013:7;14009:23;14005:32;14002:2;;;14050:1;14047;14040:12;14002:2;14121:1;14110:9;14106:17;14093:31;14151:18;14143:6;14140:30;14137:2;;;14183:1;14180;14173:12;14137:2;14211:63;14266:7;14257:6;14246:9;14242:22;14211:63;:::i;:::-;14201:73;;14064:220;13992:299;;;;:::o;14297:262::-;14356:6;14405:2;14393:9;14384:7;14380:23;14376:32;14373:2;;;14421:1;14418;14411:12;14373:2;14464:1;14489:53;14534:7;14525:6;14514:9;14510:22;14489:53;:::i;:::-;14479:63;;14435:117;14363:196;;;;:::o;14565:520::-;14643:6;14651;14700:2;14688:9;14679:7;14675:23;14671:32;14668:2;;;14716:1;14713;14706:12;14668:2;14759:1;14784:53;14829:7;14820:6;14809:9;14805:22;14784:53;:::i;:::-;14774:63;;14730:117;14914:2;14903:9;14899:18;14886:32;14945:18;14937:6;14934:30;14931:2;;;14977:1;14974;14967:12;14931:2;15005:63;15060:7;15051:6;15040:9;15036:22;15005:63;:::i;:::-;14995:73;;14857:221;14658:427;;;;;:::o;15091:179::-;15160:10;15181:46;15223:3;15215:6;15181:46;:::i;:::-;15259:4;15254:3;15250:14;15236:28;;15171:99;;;;:::o;15276:118::-;15363:24;15381:5;15363:24;:::i;:::-;15358:3;15351:37;15341:53;;:::o;15430:470::-;15558:3;15579:86;15658:6;15653:3;15579:86;:::i;:::-;15572:93;;15689:66;15681:6;15678:78;15675:2;;;15769:1;15766;15759:12;15675:2;15804:4;15796:6;15792:17;15782:27;;15819:43;15855:6;15850:3;15843:5;15819:43;:::i;:::-;15887:6;15882:3;15878:16;15871:23;;15562:338;;;;;:::o;15936:732::-;16055:3;16084:54;16132:5;16084:54;:::i;:::-;16154:86;16233:6;16228:3;16154:86;:::i;:::-;16147:93;;16264:56;16314:5;16264:56;:::i;:::-;16343:7;16374:1;16359:284;16384:6;16381:1;16378:13;16359:284;;;16460:6;16454:13;16487:63;16546:3;16531:13;16487:63;:::i;:::-;16480:70;;16573:60;16626:6;16573:60;:::i;:::-;16563:70;;16419:224;16406:1;16403;16399:9;16394:14;;16359:284;;;16363:14;16659:3;16652:10;;16060:608;;;;;;;:::o;16674:109::-;16755:21;16770:5;16755:21;:::i;:::-;16750:3;16743:34;16733:50;;:::o;16789:360::-;16875:3;16903:38;16935:5;16903:38;:::i;:::-;16957:70;17020:6;17015:3;16957:70;:::i;:::-;16950:77;;17036:52;17081:6;17076:3;17069:4;17062:5;17058:16;17036:52;:::i;:::-;17113:29;17135:6;17113:29;:::i;:::-;17108:3;17104:39;17097:46;;16879:270;;;;;:::o;17155:143::-;17248:43;17285:5;17248:43;:::i;:::-;17243:3;17236:56;17226:72;;:::o;17304:364::-;17392:3;17420:39;17453:5;17420:39;:::i;:::-;17475:71;17539:6;17534:3;17475:71;:::i;:::-;17468:78;;17555:52;17600:6;17595:3;17588:4;17581:5;17577:16;17555:52;:::i;:::-;17632:29;17654:6;17632:29;:::i;:::-;17627:3;17623:39;17616:46;;17396:272;;;;;:::o;17674:377::-;17780:3;17808:39;17841:5;17808:39;:::i;:::-;17863:89;17945:6;17940:3;17863:89;:::i;:::-;17856:96;;17961:52;18006:6;18001:3;17994:4;17987:5;17983:16;17961:52;:::i;:::-;18038:6;18033:3;18029:16;18022:23;;17784:267;;;;;:::o;18081:845::-;18184:3;18221:5;18215:12;18250:36;18276:9;18250:36;:::i;:::-;18302:89;18384:6;18379:3;18302:89;:::i;:::-;18295:96;;18422:1;18411:9;18407:17;18438:1;18433:137;;;;18584:1;18579:341;;;;18400:520;;18433:137;18517:4;18513:9;18502;18498:25;18493:3;18486:38;18553:6;18548:3;18544:16;18537:23;;18433:137;;18579:341;18646:38;18678:5;18646:38;:::i;:::-;18706:1;18720:154;18734:6;18731:1;18728:13;18720:154;;;18808:7;18802:14;18798:1;18793:3;18789:11;18782:35;18858:1;18849:7;18845:15;18834:26;;18756:4;18753:1;18749:12;18744:17;;18720:154;;;18903:6;18898:3;18894:16;18887:23;;18586:334;;18400:520;;18188:738;;;;;;:::o;18932:366::-;19074:3;19095:67;19159:2;19154:3;19095:67;:::i;:::-;19088:74;;19171:93;19260:3;19171:93;:::i;:::-;19289:2;19284:3;19280:12;19273:19;;19078:220;;;:::o;19304:366::-;19446:3;19467:67;19531:2;19526:3;19467:67;:::i;:::-;19460:74;;19543:93;19632:3;19543:93;:::i;:::-;19661:2;19656:3;19652:12;19645:19;;19450:220;;;:::o;19676:366::-;19818:3;19839:67;19903:2;19898:3;19839:67;:::i;:::-;19832:74;;19915:93;20004:3;19915:93;:::i;:::-;20033:2;20028:3;20024:12;20017:19;;19822:220;;;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20194:220;;;:::o;20420:366::-;20562:3;20583:67;20647:2;20642:3;20583:67;:::i;:::-;20576:74;;20659:93;20748:3;20659:93;:::i;:::-;20777:2;20772:3;20768:12;20761:19;;20566:220;;;:::o;20792:366::-;20934:3;20955:67;21019:2;21014:3;20955:67;:::i;:::-;20948:74;;21031:93;21120:3;21031:93;:::i;:::-;21149:2;21144:3;21140:12;21133:19;;20938:220;;;:::o;21164:366::-;21306:3;21327:67;21391:2;21386:3;21327:67;:::i;:::-;21320:74;;21403:93;21492:3;21403:93;:::i;:::-;21521:2;21516:3;21512:12;21505:19;;21310:220;;;:::o;21536:366::-;21678:3;21699:67;21763:2;21758:3;21699:67;:::i;:::-;21692:74;;21775:93;21864:3;21775:93;:::i;:::-;21893:2;21888:3;21884:12;21877:19;;21682:220;;;:::o;21908:366::-;22050:3;22071:67;22135:2;22130:3;22071:67;:::i;:::-;22064:74;;22147:93;22236:3;22147:93;:::i;:::-;22265:2;22260:3;22256:12;22249:19;;22054:220;;;:::o;22280:366::-;22422:3;22443:67;22507:2;22502:3;22443:67;:::i;:::-;22436:74;;22519:93;22608:3;22519:93;:::i;:::-;22637:2;22632:3;22628:12;22621:19;;22426:220;;;:::o;22652:366::-;22794:3;22815:67;22879:2;22874:3;22815:67;:::i;:::-;22808:74;;22891:93;22980:3;22891:93;:::i;:::-;23009:2;23004:3;23000:12;22993:19;;22798:220;;;:::o;23024:366::-;23166:3;23187:67;23251:2;23246:3;23187:67;:::i;:::-;23180:74;;23263:93;23352:3;23263:93;:::i;:::-;23381:2;23376:3;23372:12;23365:19;;23170:220;;;:::o;23396:108::-;23473:24;23491:5;23473:24;:::i;:::-;23468:3;23461:37;23451:53;;:::o;23510:118::-;23597:24;23615:5;23597:24;:::i;:::-;23592:3;23585:37;23575:53;;:::o;23634:429::-;23811:3;23833:92;23921:3;23912:6;23833:92;:::i;:::-;23826:99;;23942:95;24033:3;24024:6;23942:95;:::i;:::-;23935:102;;24054:3;24047:10;;23815:248;;;;;:::o;24069:222::-;24162:4;24200:2;24189:9;24185:18;24177:26;;24213:71;24281:1;24270:9;24266:17;24257:6;24213:71;:::i;:::-;24167:124;;;;:::o;24297:1093::-;24640:4;24678:3;24667:9;24663:19;24655:27;;24692:71;24760:1;24749:9;24745:17;24736:6;24692:71;:::i;:::-;24773:72;24841:2;24830:9;24826:18;24817:6;24773:72;:::i;:::-;24892:9;24886:4;24882:20;24877:2;24866:9;24862:18;24855:48;24920:118;25033:4;25024:6;25016;24920:118;:::i;:::-;24912:126;;25085:9;25079:4;25075:20;25070:2;25059:9;25055:18;25048:48;25113:118;25226:4;25217:6;25209;25113:118;:::i;:::-;25105:126;;25279:9;25273:4;25269:20;25263:3;25252:9;25248:19;25241:49;25307:76;25378:4;25369:6;25307:76;:::i;:::-;25299:84;;24645:745;;;;;;;;;;:::o;25396:751::-;25619:4;25657:3;25646:9;25642:19;25634:27;;25671:71;25739:1;25728:9;25724:17;25715:6;25671:71;:::i;:::-;25752:72;25820:2;25809:9;25805:18;25796:6;25752:72;:::i;:::-;25834;25902:2;25891:9;25887:18;25878:6;25834:72;:::i;:::-;25916;25984:2;25973:9;25969:18;25960:6;25916:72;:::i;:::-;26036:9;26030:4;26026:20;26020:3;26009:9;26005:19;25998:49;26064:76;26135:4;26126:6;26064:76;:::i;:::-;26056:84;;25624:523;;;;;;;;:::o;26153:674::-;26394:4;26432:2;26421:9;26417:18;26409:26;;26481:9;26475:4;26471:20;26467:1;26456:9;26452:17;26445:47;26509:118;26622:4;26613:6;26605;26509:118;:::i;:::-;26501:126;;26674:9;26668:4;26664:20;26659:2;26648:9;26644:18;26637:48;26702:118;26815:4;26806:6;26798;26702:118;:::i;:::-;26694:126;;26399:428;;;;;;;:::o;26833:373::-;26976:4;27014:2;27003:9;26999:18;26991:26;;27063:9;27057:4;27053:20;27049:1;27038:9;27034:17;27027:47;27091:108;27194:4;27185:6;27091:108;:::i;:::-;27083:116;;26981:225;;;;:::o;27212:210::-;27299:4;27337:2;27326:9;27322:18;27314:26;;27350:65;27412:1;27401:9;27397:17;27388:6;27350:65;:::i;:::-;27304:118;;;;:::o;27428:234::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27578:77;27652:1;27641:9;27637:17;27628:6;27578:77;:::i;:::-;27532:130;;;;:::o;27668:313::-;27781:4;27819:2;27808:9;27804:18;27796:26;;27868:9;27862:4;27858:20;27854:1;27843:9;27839:17;27832:47;27896:78;27969:4;27960:6;27896:78;:::i;:::-;27888:86;;27786:195;;;;:::o;27987:419::-;28153:4;28191:2;28180:9;28176:18;28168:26;;28240:9;28234:4;28230:20;28226:1;28215:9;28211:17;28204:47;28268:131;28394:4;28268:131;:::i;:::-;28260:139;;28158:248;;;:::o;28412:419::-;28578:4;28616:2;28605:9;28601:18;28593:26;;28665:9;28659:4;28655:20;28651:1;28640:9;28636:17;28629:47;28693:131;28819:4;28693:131;:::i;:::-;28685:139;;28583:248;;;:::o;28837:419::-;29003:4;29041:2;29030:9;29026:18;29018:26;;29090:9;29084:4;29080:20;29076:1;29065:9;29061:17;29054:47;29118:131;29244:4;29118:131;:::i;:::-;29110:139;;29008:248;;;:::o;29262:419::-;29428:4;29466:2;29455:9;29451:18;29443:26;;29515:9;29509:4;29505:20;29501:1;29490:9;29486:17;29479:47;29543:131;29669:4;29543:131;:::i;:::-;29535:139;;29433:248;;;:::o;29687:419::-;29853:4;29891:2;29880:9;29876:18;29868:26;;29940:9;29934:4;29930:20;29926:1;29915:9;29911:17;29904:47;29968:131;30094:4;29968:131;:::i;:::-;29960:139;;29858:248;;;:::o;30112:419::-;30278:4;30316:2;30305:9;30301:18;30293:26;;30365:9;30359:4;30355:20;30351:1;30340:9;30336:17;30329:47;30393:131;30519:4;30393:131;:::i;:::-;30385:139;;30283:248;;;:::o;30537:419::-;30703:4;30741:2;30730:9;30726:18;30718:26;;30790:9;30784:4;30780:20;30776:1;30765:9;30761:17;30754:47;30818:131;30944:4;30818:131;:::i;:::-;30810:139;;30708:248;;;:::o;30962:419::-;31128:4;31166:2;31155:9;31151:18;31143:26;;31215:9;31209:4;31205:20;31201:1;31190:9;31186:17;31179:47;31243:131;31369:4;31243:131;:::i;:::-;31235:139;;31133:248;;;:::o;31387:419::-;31553:4;31591:2;31580:9;31576:18;31568:26;;31640:9;31634:4;31630:20;31626:1;31615:9;31611:17;31604:47;31668:131;31794:4;31668:131;:::i;:::-;31660:139;;31558:248;;;:::o;31812:419::-;31978:4;32016:2;32005:9;32001:18;31993:26;;32065:9;32059:4;32055:20;32051:1;32040:9;32036:17;32029:47;32093:131;32219:4;32093:131;:::i;:::-;32085:139;;31983:248;;;:::o;32237:419::-;32403:4;32441:2;32430:9;32426:18;32418:26;;32490:9;32484:4;32480:20;32476:1;32465:9;32461:17;32454:47;32518:131;32644:4;32518:131;:::i;:::-;32510:139;;32408:248;;;:::o;32662:419::-;32828:4;32866:2;32855:9;32851:18;32843:26;;32915:9;32909:4;32905:20;32901:1;32890:9;32886:17;32879:47;32943:131;33069:4;32943:131;:::i;:::-;32935:139;;32833:248;;;:::o;33087:222::-;33180:4;33218:2;33207:9;33203:18;33195:26;;33231:71;33299:1;33288:9;33284:17;33275:6;33231:71;:::i;:::-;33185:124;;;;:::o;33315:332::-;33436:4;33474:2;33463:9;33459:18;33451:26;;33487:71;33555:1;33544:9;33540:17;33531:6;33487:71;:::i;:::-;33568:72;33636:2;33625:9;33621:18;33612:6;33568:72;:::i;:::-;33441:206;;;;;:::o;33653:129::-;33687:6;33714:20;;:::i;:::-;33704:30;;33743:33;33771:4;33763:6;33743:33;:::i;:::-;33694:88;;;:::o;33788:75::-;33821:6;33854:2;33848:9;33838:19;;33828:35;:::o;33869:311::-;33946:4;34036:18;34028:6;34025:30;34022:2;;;34058:18;;:::i;:::-;34022:2;34108:4;34100:6;34096:17;34088:25;;34168:4;34162;34158:15;34150:23;;33951:229;;;:::o;34186:311::-;34263:4;34353:18;34345:6;34342:30;34339:2;;;34375:18;;:::i;:::-;34339:2;34425:4;34417:6;34413:17;34405:25;;34485:4;34479;34475:15;34467:23;;34268:229;;;:::o;34503:307::-;34564:4;34654:18;34646:6;34643:30;34640:2;;;34676:18;;:::i;:::-;34640:2;34714:29;34736:6;34714:29;:::i;:::-;34706:37;;34798:4;34792;34788:15;34780:23;;34569:241;;;:::o;34816:308::-;34878:4;34968:18;34960:6;34957:30;34954:2;;;34990:18;;:::i;:::-;34954:2;35028:29;35050:6;35028:29;:::i;:::-;35020:37;;35112:4;35106;35102:15;35094:23;;34883:241;;;:::o;35130:132::-;35197:4;35220:3;35212:11;;35250:4;35245:3;35241:14;35233:22;;35202:60;;;:::o;35268:141::-;35317:4;35340:3;35332:11;;35363:3;35360:1;35353:14;35397:4;35394:1;35384:18;35376:26;;35322:87;;;:::o;35415:114::-;35482:6;35516:5;35510:12;35500:22;;35489:40;;;:::o;35535:98::-;35586:6;35620:5;35614:12;35604:22;;35593:40;;;:::o;35639:99::-;35691:6;35725:5;35719:12;35709:22;;35698:40;;;:::o;35744:113::-;35814:4;35846;35841:3;35837:14;35829:22;;35819:38;;;:::o;35863:184::-;35962:11;35996:6;35991:3;35984:19;36036:4;36031:3;36027:14;36012:29;;35974:73;;;;:::o;36053:168::-;36136:11;36170:6;36165:3;36158:19;36210:4;36205:3;36201:14;36186:29;;36148:73;;;;:::o;36227:169::-;36311:11;36345:6;36340:3;36333:19;36385:4;36380:3;36376:14;36361:29;;36323:73;;;;:::o;36402:148::-;36504:11;36541:3;36526:18;;36516:34;;;;:::o;36556:305::-;36596:3;36615:20;36633:1;36615:20;:::i;:::-;36610:25;;36649:20;36667:1;36649:20;:::i;:::-;36644:25;;36803:1;36735:66;36731:74;36728:1;36725:81;36722:2;;;36809:18;;:::i;:::-;36722:2;36853:1;36850;36846:9;36839:16;;36600:261;;;;:::o;36867:191::-;36907:4;36927:20;36945:1;36927:20;:::i;:::-;36922:25;;36961:20;36979:1;36961:20;:::i;:::-;36956:25;;37000:1;36997;36994:8;36991:2;;;37005:18;;:::i;:::-;36991:2;37050:1;37047;37043:9;37035:17;;36912:146;;;;:::o;37064:96::-;37101:7;37130:24;37148:5;37130:24;:::i;:::-;37119:35;;37109:51;;;:::o;37166:90::-;37200:7;37243:5;37236:13;37229:21;37218:32;;37208:48;;;:::o;37262:149::-;37298:7;37338:66;37331:5;37327:78;37316:89;;37306:105;;;:::o;37417:126::-;37454:7;37494:42;37487:5;37483:54;37472:65;;37462:81;;;:::o;37549:77::-;37586:7;37615:5;37604:16;;37594:32;;;:::o;37632:86::-;37667:7;37707:4;37700:5;37696:16;37685:27;;37675:43;;;:::o;37724:117::-;37780:9;37813:22;37829:5;37813:22;:::i;:::-;37800:35;;37790:51;;;:::o;37847:154::-;37931:6;37926:3;37921;37908:30;37993:1;37984:6;37979:3;37975:16;37968:27;37898:103;;;:::o;38007:307::-;38075:1;38085:113;38099:6;38096:1;38093:13;38085:113;;;38184:1;38179:3;38175:11;38169:18;38165:1;38160:3;38156:11;38149:39;38121:2;38118:1;38114:10;38109:15;;38085:113;;;38216:6;38213:1;38210:13;38207:2;;;38296:1;38287:6;38282:3;38278:16;38271:27;38207:2;38056:258;;;;:::o;38320:320::-;38364:6;38401:1;38395:4;38391:12;38381:22;;38448:1;38442:4;38438:12;38469:18;38459:2;;38525:4;38517:6;38513:17;38503:27;;38459:2;38587;38579:6;38576:14;38556:18;38553:38;38550:2;;;38606:18;;:::i;:::-;38550:2;38371:269;;;;:::o;38646:281::-;38729:27;38751:4;38729:27;:::i;:::-;38721:6;38717:40;38859:6;38847:10;38844:22;38823:18;38811:10;38808:34;38805:62;38802:2;;;38870:18;;:::i;:::-;38802:2;38910:10;38906:2;38899:22;38689:238;;;:::o;38933:233::-;38972:3;38995:24;39013:5;38995:24;:::i;:::-;38986:33;;39041:66;39034:5;39031:77;39028:2;;;39111:18;;:::i;:::-;39028:2;39158:1;39151:5;39147:13;39140:20;;38976:190;;;:::o;39172:180::-;39220:77;39217:1;39210:88;39317:4;39314:1;39307:15;39341:4;39338:1;39331:15;39358:180;39406:77;39403:1;39396:88;39503:4;39500:1;39493:15;39527:4;39524:1;39517:15;39544:180;39592:77;39589:1;39582:88;39689:4;39686:1;39679:15;39713:4;39710:1;39703:15;39730:102;39771:6;39822:2;39818:7;39813:2;39806:5;39802:14;39798:28;39788:38;;39778:54;;;:::o;39838:225::-;39978:34;39974:1;39966:6;39962:14;39955:58;40047:8;40042:2;40034:6;40030:15;40023:33;39944:119;:::o;40069:163::-;40209:15;40205:1;40197:6;40193:14;40186:39;40175:57;:::o;40238:165::-;40378:17;40374:1;40366:6;40362:14;40355:41;40344:59;:::o;40409:181::-;40549:33;40545:1;40537:6;40533:14;40526:57;40515:75;:::o;40596:233::-;40736:34;40732:1;40724:6;40720:14;40713:58;40805:16;40800:2;40792:6;40788:15;40781:41;40702:127;:::o;40835:166::-;40975:18;40971:1;40963:6;40959:14;40952:42;40941:60;:::o;41007:182::-;41147:34;41143:1;41135:6;41131:14;41124:58;41113:76;:::o;41195:164::-;41335:16;41331:1;41323:6;41319:14;41312:40;41301:58;:::o;41365:165::-;41505:17;41501:1;41493:6;41489:14;41482:41;41471:59;:::o;41536:230::-;41676:34;41672:1;41664:6;41660:14;41653:58;41745:13;41740:2;41732:6;41728:15;41721:38;41642:124;:::o;41772:164::-;41912:16;41908:1;41900:6;41896:14;41889:40;41878:58;:::o;41942:164::-;42082:16;42078:1;42070:6;42066:14;42059:40;42048:58;:::o;42112:122::-;42185:24;42203:5;42185:24;:::i;:::-;42178:5;42175:35;42165:2;;42224:1;42221;42214:12;42165:2;42155:79;:::o;42240:116::-;42310:21;42325:5;42310:21;:::i;:::-;42303:5;42300:32;42290:2;;42346:1;42343;42336:12;42290:2;42280:76;:::o;42362:120::-;42434:23;42451:5;42434:23;:::i;:::-;42427:5;42424:34;42414:2;;42472:1;42469;42462:12;42414:2;42404:78;:::o;42488:122::-;42561:24;42579:5;42561:24;:::i;:::-;42554:5;42551:35;42541:2;;42600:1;42597;42590:12;42541:2;42531:79;:::o
Swarm Source
ipfs://1968054571a713e1ca698c4797725073693d4db77180967a2d4ddf5451504da0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.