Token Gladiators of the Galaxy
Overview [ERC-721]
Max Total Supply:
265 Gladiaxy
Holders:
35
Transfers:
-
Contract:
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
Gladiaxy is a 10,000 2D animated NFT avatars DAO project on Optimism Ethereum aiming to build a community to free society from prejudice, injustice, and inequality with the help of Web3, anonymous virtual social status, AI-game, and mindfulness.# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Gladiaxy
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at optimistic.etherscan.io on 2021-12-13 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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 Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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 Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @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); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: Gladiaxy.sol pragma solidity 0.8.7; contract Gladiaxy is ERC721Enumerable, Ownable { using Strings for uint256; string _baseTokenURI; uint256 public _maxperWalletWhiteList = 2; uint256 public _maxperTX = 2; uint256 public _limit = 10000; uint256 public _reserved = 50; uint256 public _price = 0.08 ether; uint256 public whitelist_count = 0; address founder1; address founder2; address founder3; address founder4; address founder5; bool public _paused = true; mapping(address => uint256) public perWallet; mapping(address => bool) public whitelist; constructor( string memory baseURI, address _founder1, address _founder2, address _founder3, address _founder4, address _founder5 ) ERC721("Gladiators of the Galaxy", "Gladiaxy") { require(_founder1 != address(0), "Zero address 1 error"); require(_founder2 != address(0), "Zero address 2 error"); require(_founder3 != address(0), "Zero address 3 error"); require(_founder4 != address(0), "Zero address 4 error"); require(_founder5 != address(0), "Zero address 5 error"); setBaseURI(baseURI); founder1 = _founder1; founder2 = _founder2; founder3 = _founder3; founder4 = _founder4; founder5 = _founder5; } function founderWalletChange(address newAddress) public { require(msg.sender == founder1 || msg.sender == founder2 || msg.sender == founder3 || msg.sender == founder4 || msg.sender == founder5, "founder only"); if(msg.sender == founder1){ founder1 = newAddress; } if(msg.sender == founder2){ founder2 = newAddress; } if(msg.sender == founder3){ founder3 = newAddress; } if(msg.sender == founder4){ founder4 = newAddress; } if(msg.sender == founder5){ founder5 = newAddress; } } function Mint(uint256 num) public payable { uint256 supply = totalSupply(); require( !_paused, "Sale paused, please check official announcement for more detail" ); require( num <= _maxperTX, "You are exceeding limit of per transaction " ); require( supply + num <= _limit - _reserved, "All of the Gladiaxy have been minted" ); require(msg.value >= _price * num, "amount of sent ETH is not correct"); for (uint256 i=1; i <= num; i++) { _safeMint(msg.sender, supply + i); } } function giveAwayMint(address _to, uint256 _amount) external onlyOwner { require(_to != address(0), "Zero address error"); require(_amount <= _reserved, "Exceeds reserved Gladiaxy supply"); uint256 supply = totalSupply(); for (uint256 i=1; i <= _amount; i++) { _safeMint(_to, supply + i); } _reserved -= _amount; } function tokenInOwnerWallet(address _owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function whitelistMint(uint256 num) public payable { require(msg.sender != address(0), "Zero address error"); uint256 supply = totalSupply(); require(whitelist[msg.sender] == true, "Only WHITELIST can mint"); require( perWallet[msg.sender] + num <= _maxperWalletWhiteList, "You are exceeding limit of per wallet Gladiaxy" ); require( supply + num <= _limit - _reserved, "Exceeds maximum Gladiaxy supply" ); require(msg.value >= _price * num, "Ether sent is not correct"); for (uint256 i=1; i <= num; i++) { _safeMint(msg.sender, supply + i); } perWallet[msg.sender] += num; } function addWhitelist(address[] memory addresses) public onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { address tempAddress = addresses[i]; if (whitelist[tempAddress] != true && tempAddress != address(0)) { whitelist[tempAddress] = true; whitelist_count++; } } } function removeWhitelist(address _address) public onlyOwner { require(_address != address(0), "Zero address error"); whitelist[_address] = false; whitelist_count--; } function setPrice(uint256 _newPrice) public onlyOwner { _price = _newPrice; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setLimit(uint256 limit) public onlyOwner { _limit = limit; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function pause() public onlyOwner { _paused = !_paused; } function withdrawAll() public payable { require(msg.sender == founder1 || msg.sender == founder2 || msg.sender == founder3 || msg.sender == founder4 || msg.sender == founder5, "founder only"); uint256 balance = address(this).balance; require(balance > 0); require(payable(founder1).send(balance / 5)); require(payable(founder2).send(balance / 5)); require(payable(founder3).send(balance / 5)); require(payable(founder4).send(balance / 5)); require(payable(founder5).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address","name":"_founder1","type":"address"},{"internalType":"address","name":"_founder2","type":"address"},{"internalType":"address","name":"_founder3","type":"address"},{"internalType":"address","name":"_founder4","type":"address"},{"internalType":"address","name":"_founder5","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxperWalletWhiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"founderWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAwayMint","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"perWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokenInOwnerWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelist_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526002600c556002600d55612710600e556032600f5567011c37937e08000060105560006011556001601660146101000a81548160ff0219169083151502179055503480156200005257600080fd5b5060405162006467380380620064678339818101604052810190620000789190620007c1565b6040518060400160405280601881526020017f476c61646961746f7273206f66207468652047616c61787900000000000000008152506040518060400160405280600881526020017f476c6164696178790000000000000000000000000000000000000000000000008152508160009080519060200190620000fc9291906200067c565b508060019080519060200190620001159291906200067c565b505050620001386200012c620004d960201b60201c565b620004e160201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620001ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a29062000a10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200021e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021590620009aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028890620009cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000304576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fb9062000988565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036e9062000966565b60405180910390fd5b6200038886620005a760201b60201c565b84601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000d0b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005b7620004d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005dd6200065260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062d90620009ee565b60405180910390fd5b80600b90805190602001906200064e9291906200067c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200068a9062000b0c565b90600052602060002090601f016020900481019282620006ae5760008555620006fa565b82601f10620006c957805160ff1916838001178555620006fa565b82800160010185558215620006fa579182015b82811115620006f9578251825591602001919060010190620006dc565b5b5090506200070991906200070d565b5090565b5b80821115620007285760008160009055506001016200070e565b5090565b6000620007436200073d8462000a5b565b62000a32565b90508281526020810184848401111562000762576200076162000bdb565b5b6200076f84828562000ad6565b509392505050565b600081519050620007888162000cf1565b92915050565b600082601f830112620007a657620007a562000bd6565b5b8151620007b88482602086016200072c565b91505092915050565b60008060008060008060c08789031215620007e157620007e062000be5565b5b600087015167ffffffffffffffff81111562000802576200080162000be0565b5b6200081089828a016200078e565b96505060206200082389828a0162000777565b95505060406200083689828a0162000777565b94505060606200084989828a0162000777565b93505060806200085c89828a0162000777565b92505060a06200086f89828a0162000777565b9150509295509295509295565b60006200088b60148362000a91565b9150620008988262000bfb565b602082019050919050565b6000620008b260148362000a91565b9150620008bf8262000c24565b602082019050919050565b6000620008d960148362000a91565b9150620008e68262000c4d565b602082019050919050565b60006200090060148362000a91565b91506200090d8262000c76565b602082019050919050565b60006200092760208362000a91565b9150620009348262000c9f565b602082019050919050565b60006200094e60148362000a91565b91506200095b8262000cc8565b602082019050919050565b6000602082019050818103600083015262000981816200087c565b9050919050565b60006020820190508181036000830152620009a381620008a3565b9050919050565b60006020820190508181036000830152620009c581620008ca565b9050919050565b60006020820190508181036000830152620009e781620008f1565b9050919050565b6000602082019050818103600083015262000a098162000918565b9050919050565b6000602082019050818103600083015262000a2b816200093f565b9050919050565b600062000a3e62000a51565b905062000a4c828262000b42565b919050565b6000604051905090565b600067ffffffffffffffff82111562000a795762000a7862000ba7565b5b62000a848262000bea565b9050602081019050919050565b600082825260208201905092915050565b600062000aaf8262000ab6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101562000af657808201518184015260208101905062000ad9565b8381111562000b06576000848401525b50505050565b6000600282049050600182168062000b2557607f821691505b6020821081141562000b3c5762000b3b62000b78565b5b50919050565b62000b4d8262000bea565b810181811067ffffffffffffffff8211171562000b6f5762000b6e62000ba7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5a65726f20616464726573732035206572726f72000000000000000000000000600082015250565b7f5a65726f20616464726573732034206572726f72000000000000000000000000600082015250565b7f5a65726f20616464726573732032206572726f72000000000000000000000000600082015250565b7f5a65726f20616464726573732033206572726f72000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5a65726f20616464726573732031206572726f72000000000000000000000000600082015250565b62000cfc8162000aa2565b811462000d0857600080fd5b50565b61574c8062000d1b6000396000f3fe60806040526004361061023b5760003560e01c806370a082311161012e5780639b19251a116100ab578063df2fb92c1161006f578063df2fb92c14610858578063e356912314610883578063e985e9c5146108ae578063edac985b146108eb578063f2fde38b146109145761023b565b80639b19251a14610763578063a22cb465146107a0578063b16c5c4c146107c9578063b88d4fde146107f2578063c87b56dd1461081b5761023b565b8063853828b6116100f2578063853828b6146106be578063868ff4a2146106c85780638da5cb5b146106e457806391b7f5ed1461070f57806395d89b41146107385761023b565b806370a08231146105ff578063715018a61461063c57806378c8cda714610653578063808bdf711461067c5780638456cb59146106a75761023b565b80632d47d29a116101bc5780634f6ccce7116101805780634f6ccce7146104f457806355f804b3146105315780636352211e1461055a5780636aaa571d146105975780636fe72c40146105c25761023b565b80632d47d29a146103fd5780632ed4907f1461043a5780632f745c591461046357806342842e0e146104a05780634d644f6b146104c95761023b565b806316c61ccc1161020357806316c61ccc1461032a57806318160ddd14610355578063235b6ea11461038057806323b872dd146103ab57806327ea6f2b146103d45761023b565b806301ffc9a71461024057806306fdde031461027d57806307883703146102a8578063081812fc146102c4578063095ea7b314610301575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613f3d565b61093d565b6040516102749190614606565b60405180910390f35b34801561028957600080fd5b506102926109b7565b60405161029f9190614621565b60405180910390f35b6102c260048036038101906102bd9190613fe0565b610a49565b005b3480156102d057600080fd5b506102eb60048036038101906102e69190613fe0565b610bd2565b6040516102f8919061457d565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190613eb4565b610c57565b005b34801561033657600080fd5b5061033f610d6f565b60405161034c9190614606565b60405180910390f35b34801561036157600080fd5b5061036a610d82565b60405161037791906149e3565b60405180910390f35b34801561038c57600080fd5b50610395610d8f565b6040516103a291906149e3565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613d9e565b610d95565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613fe0565b610df5565b005b34801561040957600080fd5b50610424600480360381019061041f9190613d31565b610e7b565b60405161043191906149e3565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613d31565b610e93565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613eb4565b61137e565b60405161049791906149e3565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190613d9e565b611423565b005b3480156104d557600080fd5b506104de611443565b6040516104eb91906149e3565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613fe0565b611449565b60405161052891906149e3565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613f97565b6114ba565b005b34801561056657600080fd5b50610581600480360381019061057c9190613fe0565b611550565b60405161058e919061457d565b60405180910390f35b3480156105a357600080fd5b506105ac611602565b6040516105b991906149e3565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613d31565b611608565b6040516105f691906145e4565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613d31565b6116b6565b60405161063391906149e3565b60405180910390f35b34801561064857600080fd5b5061065161176e565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613d31565b6117f6565b005b34801561068857600080fd5b50610691611955565b60405161069e91906149e3565b60405180910390f35b3480156106b357600080fd5b506106bc61195b565b005b6106c6611a03565b005b6106e260048036038101906106dd9190613fe0565b611e18565b005b3480156106f057600080fd5b506106f96120f4565b604051610706919061457d565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190613fe0565b61211e565b005b34801561074457600080fd5b5061074d6121a4565b60405161075a9190614621565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613d31565b612236565b6040516107979190614606565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613e74565b612256565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190613eb4565b61226c565b005b3480156107fe57600080fd5b5061081960048036038101906108149190613df1565b6123fe565b005b34801561082757600080fd5b50610842600480360381019061083d9190613fe0565b612460565b60405161084f9190614621565b60405180910390f35b34801561086457600080fd5b5061086d612507565b60405161087a91906149e3565b60405180910390f35b34801561088f57600080fd5b5061089861250d565b6040516108a591906149e3565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d09190613d5e565b612513565b6040516108e29190614606565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d9190613ef4565b6125a7565b005b34801561092057600080fd5b5061093b60048036038101906109369190613d31565b61276a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b057506109af82612862565b5b9050919050565b6060600080546109c690614d22565b80601f01602080910402602001604051908101604052809291908181526020018280546109f290614d22565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b5050505050905090565b6000610a53610d82565b9050601660149054906101000a900460ff1615610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90614743565b60405180910390fd5b600d54821115610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190614943565b60405180910390fd5b600f54600e54610afa9190614c0e565b8282610b069190614b2d565b1115610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90614763565b60405180910390fd5b81601054610b559190614bb4565b341015610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906146e3565b60405180910390fd5b6000600190505b828111610bcd57610bba338284610bb59190614b2d565b612944565b8080610bc590614d85565b915050610b9e565b505050565b6000610bdd82612962565b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c13906148c3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6282611550565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90614963565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf26129ce565b73ffffffffffffffffffffffffffffffffffffffff161480610d215750610d2081610d1b6129ce565b612513565b5b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790614843565b60405180910390fd5b610d6a83836129d6565b505050565b601660149054906101000a900460ff1681565b6000600880549050905090565b60105481565b610da6610da06129ce565b82612a8f565b610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc906149a3565b60405180910390fd5b610df0838383612b6d565b505050565b610dfd6129ce565b73ffffffffffffffffffffffffffffffffffffffff16610e1b6120f4565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e68906148e3565b60405180910390fd5b80600e8190555050565b60176020528060005260406000206000915090505481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f3c5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610f945750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610fec5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806110445750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90614783565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561111b5780601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156111b35780601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561124b5780601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156112e35780601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561137b5780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000611389836116b6565b82106113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c1906146a3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61143e838383604051806020016040528060008152506123fe565b505050565b600c5481565b6000611453610d82565b8210611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b906149c3565b60405180910390fd5b600882815481106114a8576114a7614ebb565b5b90600052602060002001549050919050565b6114c26129ce565b73ffffffffffffffffffffffffffffffffffffffff166114e06120f4565b73ffffffffffffffffffffffffffffffffffffffff1614611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906148e3565b60405180910390fd5b80600b908051906020019061154c929190613aa7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090614883565b60405180910390fd5b80915050919050565b600f5481565b60606000611615836116b6565b905060008167ffffffffffffffff81111561163357611632614eea565b5b6040519080825280602002602001820160405280156116615781602001602082028036833780820191505090505b50905060005b828110156116ab57611679858261137e565b82828151811061168c5761168b614ebb565b5b60200260200101818152505080806116a390614d85565b915050611667565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614863565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117766129ce565b73ffffffffffffffffffffffffffffffffffffffff166117946120f4565b73ffffffffffffffffffffffffffffffffffffffff16146117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906148e3565b60405180910390fd5b6117f46000612dc9565b565b6117fe6129ce565b73ffffffffffffffffffffffffffffffffffffffff1661181c6120f4565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611869906148e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d9906147a3565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011600081548092919061194d90614cf8565b919050555050565b600d5481565b6119636129ce565b73ffffffffffffffffffffffffffffffffffffffff166119816120f4565b73ffffffffffffffffffffffffffffffffffffffff16146119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906148e3565b60405180910390fd5b601660149054906101000a900460ff1615601660146101000a81548160ff021916908315150217905550565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611aac5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611b045750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611b5c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611bb45750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90614783565b60405180910390fd5b600047905060008111611c0557600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600583611c4e9190614b83565b9081150290604051600060405180830381858888f19350505050611c7157600080fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600583611cba9190614b83565b9081150290604051600060405180830381858888f19350505050611cdd57600080fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600583611d269190614b83565b9081150290604051600060405180830381858888f19350505050611d4957600080fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600583611d929190614b83565b9081150290604051600060405180830381858888f19350505050611db557600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611e1557600080fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906147a3565b60405180910390fd5b6000611e92610d82565b905060011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614663565b60405180910390fd5b600c5482601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f759190614b2d565b1115611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614683565b60405180910390fd5b600f54600e54611fc69190614c0e565b8282611fd29190614b2d565b1115612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90614643565b60405180910390fd5b816010546120219190614bb4565b341015612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614983565b60405180910390fd5b6000600190505b828111612099576120863382846120819190614b2d565b612944565b808061209190614d85565b91505061206a565b5081601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e99190614b2d565b925050819055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121266129ce565b73ffffffffffffffffffffffffffffffffffffffff166121446120f4565b73ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612191906148e3565b60405180910390fd5b8060108190555050565b6060600180546121b390614d22565b80601f01602080910402602001604051908101604052809291908181526020018280546121df90614d22565b801561222c5780601f106122015761010080835404028352916020019161222c565b820191906000526020600020905b81548152906001019060200180831161220f57829003601f168201915b5050505050905090565b60186020528060005260406000206000915054906101000a900460ff1681565b6122686122616129ce565b8383612e8f565b5050565b6122746129ce565b73ffffffffffffffffffffffffffffffffffffffff166122926120f4565b73ffffffffffffffffffffffffffffffffffffffff16146122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df906148e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f906147a3565b60405180910390fd5b600f5481111561239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239490614823565b60405180910390fd5b60006123a7610d82565b90506000600190505b8281116123df576123cc8482846123c79190614b2d565b612944565b80806123d790614d85565b9150506123b0565b5081600f60008282546123f29190614c0e565b92505081905550505050565b61240f6124096129ce565b83612a8f565b61244e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612445906149a3565b60405180910390fd5b61245a84848484612ffc565b50505050565b606061246b82612962565b6124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a190614923565b60405180910390fd5b60006124b4613058565b905060008151116124d457604051806020016040528060008152506124ff565b806124de846130ea565b6040516020016124ef929190614559565b6040516020818303038152906040525b915050919050565b600e5481565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125af6129ce565b73ffffffffffffffffffffffffffffffffffffffff166125cd6120f4565b73ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a906148e3565b60405180910390fd5b60005b815181101561276657600082828151811061264457612643614ebb565b5b6020026020010151905060011515601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141580156126dc5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612752576001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011600081548092919061274c90614d85565b91905055505b50808061275e90614d85565b915050612626565b5050565b6127726129ce565b73ffffffffffffffffffffffffffffffffffffffff166127906120f4565b73ffffffffffffffffffffffffffffffffffffffff16146127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd906148e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d90614703565b60405180910390fd5b61285f81612dc9565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061292d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061293d575061293c8261324b565b5b9050919050565b61295e8282604051806020016040528060008152506132b5565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a4983611550565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a9a82612962565b612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090614803565b60405180910390fd5b6000612ae483611550565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b5357508373ffffffffffffffffffffffffffffffffffffffff16612b3b84610bd2565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b645750612b638185612513565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b8d82611550565b73ffffffffffffffffffffffffffffffffffffffff1614612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90614903565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a906147c3565b60405180910390fd5b612c5e838383613310565b612c696000826129d6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb99190614c0e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d109190614b2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef5906147e3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612fef9190614606565b60405180910390a3505050565b613007848484612b6d565b61301384848484613424565b613052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613049906146c3565b60405180910390fd5b50505050565b6060600b805461306790614d22565b80601f016020809104026020016040519081016040528092919081815260200182805461309390614d22565b80156130e05780601f106130b5576101008083540402835291602001916130e0565b820191906000526020600020905b8154815290600101906020018083116130c357829003601f168201915b5050505050905090565b60606000821415613132576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613246565b600082905060005b6000821461316457808061314d90614d85565b915050600a8261315d9190614b83565b915061313a565b60008167ffffffffffffffff8111156131805761317f614eea565b5b6040519080825280601f01601f1916602001820160405280156131b25781602001600182028036833780820191505090505b5090505b6000851461323f576001826131cb9190614c0e565b9150600a856131da9190614dce565b60306131e69190614b2d565b60f81b8183815181106131fc576131fb614ebb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132389190614b83565b94506131b6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132bf83836135bb565b6132cc6000848484613424565b61330b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613302906146c3565b60405180910390fd5b505050565b61331b838383613789565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561335e576133598161378e565b61339d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461339c5761339b83826137d7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e0576133db81613944565b61341f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461341e5761341d8282613a15565b5b5b505050565b60006134458473ffffffffffffffffffffffffffffffffffffffff16613a94565b156135ae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261346e6129ce565b8786866040518563ffffffff1660e01b81526004016134909493929190614598565b602060405180830381600087803b1580156134aa57600080fd5b505af19250505080156134db57506040513d601f19601f820116820180604052508101906134d89190613f6a565b60015b61355e573d806000811461350b576040519150601f19603f3d011682016040523d82523d6000602084013e613510565b606091505b50600081511415613556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354d906146c3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135b3565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561362b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613622906148a3565b60405180910390fd5b61363481612962565b15613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366b90614723565b60405180910390fd5b61368060008383613310565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136d09190614b2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137e4846116b6565b6137ee9190614c0e565b90506000600760008481526020019081526020016000205490508181146138d3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506139589190614c0e565b905060006009600084815260200190815260200160002054905060006008838154811061398857613987614ebb565b5b9060005260206000200154905080600883815481106139aa576139a9614ebb565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139f9576139f8614e8c565b5b6001900381819060005260206000200160009055905550505050565b6000613a20836116b6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613ab390614d22565b90600052602060002090601f016020900481019282613ad55760008555613b1c565b82601f10613aee57805160ff1916838001178555613b1c565b82800160010185558215613b1c579182015b82811115613b1b578251825591602001919060010190613b00565b5b509050613b299190613b2d565b5090565b5b80821115613b46576000816000905550600101613b2e565b5090565b6000613b5d613b5884614a23565b6149fe565b90508083825260208201905082856020860282011115613b8057613b7f614f1e565b5b60005b85811015613bb05781613b968882613c3e565b845260208401935060208301925050600181019050613b83565b5050509392505050565b6000613bcd613bc884614a4f565b6149fe565b905082815260208101848484011115613be957613be8614f23565b5b613bf4848285614cb6565b509392505050565b6000613c0f613c0a84614a80565b6149fe565b905082815260208101848484011115613c2b57613c2a614f23565b5b613c36848285614cb6565b509392505050565b600081359050613c4d816156ba565b92915050565b600082601f830112613c6857613c67614f19565b5b8135613c78848260208601613b4a565b91505092915050565b600081359050613c90816156d1565b92915050565b600081359050613ca5816156e8565b92915050565b600081519050613cba816156e8565b92915050565b600082601f830112613cd557613cd4614f19565b5b8135613ce5848260208601613bba565b91505092915050565b600082601f830112613d0357613d02614f19565b5b8135613d13848260208601613bfc565b91505092915050565b600081359050613d2b816156ff565b92915050565b600060208284031215613d4757613d46614f2d565b5b6000613d5584828501613c3e565b91505092915050565b60008060408385031215613d7557613d74614f2d565b5b6000613d8385828601613c3e565b9250506020613d9485828601613c3e565b9150509250929050565b600080600060608486031215613db757613db6614f2d565b5b6000613dc586828701613c3e565b9350506020613dd686828701613c3e565b9250506040613de786828701613d1c565b9150509250925092565b60008060008060808587031215613e0b57613e0a614f2d565b5b6000613e1987828801613c3e565b9450506020613e2a87828801613c3e565b9350506040613e3b87828801613d1c565b925050606085013567ffffffffffffffff811115613e5c57613e5b614f28565b5b613e6887828801613cc0565b91505092959194509250565b60008060408385031215613e8b57613e8a614f2d565b5b6000613e9985828601613c3e565b9250506020613eaa85828601613c81565b9150509250929050565b60008060408385031215613ecb57613eca614f2d565b5b6000613ed985828601613c3e565b9250506020613eea85828601613d1c565b9150509250929050565b600060208284031215613f0a57613f09614f2d565b5b600082013567ffffffffffffffff811115613f2857613f27614f28565b5b613f3484828501613c53565b91505092915050565b600060208284031215613f5357613f52614f2d565b5b6000613f6184828501613c96565b91505092915050565b600060208284031215613f8057613f7f614f2d565b5b6000613f8e84828501613cab565b91505092915050565b600060208284031215613fad57613fac614f2d565b5b600082013567ffffffffffffffff811115613fcb57613fca614f28565b5b613fd784828501613cee565b91505092915050565b600060208284031215613ff657613ff5614f2d565b5b600061400484828501613d1c565b91505092915050565b6000614019838361453b565b60208301905092915050565b61402e81614c42565b82525050565b600061403f82614ac1565b6140498185614aef565b935061405483614ab1565b8060005b8381101561408557815161406c888261400d565b975061407783614ae2565b925050600181019050614058565b5085935050505092915050565b61409b81614c54565b82525050565b60006140ac82614acc565b6140b68185614b00565b93506140c6818560208601614cc5565b6140cf81614f32565b840191505092915050565b60006140e582614ad7565b6140ef8185614b11565b93506140ff818560208601614cc5565b61410881614f32565b840191505092915050565b600061411e82614ad7565b6141288185614b22565b9350614138818560208601614cc5565b80840191505092915050565b6000614151601f83614b11565b915061415c82614f43565b602082019050919050565b6000614174601783614b11565b915061417f82614f6c565b602082019050919050565b6000614197602e83614b11565b91506141a282614f95565b604082019050919050565b60006141ba602b83614b11565b91506141c582614fe4565b604082019050919050565b60006141dd603283614b11565b91506141e882615033565b604082019050919050565b6000614200602183614b11565b915061420b82615082565b604082019050919050565b6000614223602683614b11565b915061422e826150d1565b604082019050919050565b6000614246601c83614b11565b915061425182615120565b602082019050919050565b6000614269603f83614b11565b915061427482615149565b604082019050919050565b600061428c602483614b11565b915061429782615198565b604082019050919050565b60006142af600c83614b11565b91506142ba826151e7565b602082019050919050565b60006142d2601283614b11565b91506142dd82615210565b602082019050919050565b60006142f5602483614b11565b915061430082615239565b604082019050919050565b6000614318601983614b11565b915061432382615288565b602082019050919050565b600061433b602c83614b11565b9150614346826152b1565b604082019050919050565b600061435e602083614b11565b915061436982615300565b602082019050919050565b6000614381603883614b11565b915061438c82615329565b604082019050919050565b60006143a4602a83614b11565b91506143af82615378565b604082019050919050565b60006143c7602983614b11565b91506143d2826153c7565b604082019050919050565b60006143ea602083614b11565b91506143f582615416565b602082019050919050565b600061440d602c83614b11565b91506144188261543f565b604082019050919050565b6000614430602083614b11565b915061443b8261548e565b602082019050919050565b6000614453602983614b11565b915061445e826154b7565b604082019050919050565b6000614476602f83614b11565b915061448182615506565b604082019050919050565b6000614499602b83614b11565b91506144a482615555565b604082019050919050565b60006144bc602183614b11565b91506144c7826155a4565b604082019050919050565b60006144df601983614b11565b91506144ea826155f3565b602082019050919050565b6000614502603183614b11565b915061450d8261561c565b604082019050919050565b6000614525602c83614b11565b91506145308261566b565b604082019050919050565b61454481614cac565b82525050565b61455381614cac565b82525050565b60006145658285614113565b91506145718284614113565b91508190509392505050565b60006020820190506145926000830184614025565b92915050565b60006080820190506145ad6000830187614025565b6145ba6020830186614025565b6145c7604083018561454a565b81810360608301526145d981846140a1565b905095945050505050565b600060208201905081810360008301526145fe8184614034565b905092915050565b600060208201905061461b6000830184614092565b92915050565b6000602082019050818103600083015261463b81846140da565b905092915050565b6000602082019050818103600083015261465c81614144565b9050919050565b6000602082019050818103600083015261467c81614167565b9050919050565b6000602082019050818103600083015261469c8161418a565b9050919050565b600060208201905081810360008301526146bc816141ad565b9050919050565b600060208201905081810360008301526146dc816141d0565b9050919050565b600060208201905081810360008301526146fc816141f3565b9050919050565b6000602082019050818103600083015261471c81614216565b9050919050565b6000602082019050818103600083015261473c81614239565b9050919050565b6000602082019050818103600083015261475c8161425c565b9050919050565b6000602082019050818103600083015261477c8161427f565b9050919050565b6000602082019050818103600083015261479c816142a2565b9050919050565b600060208201905081810360008301526147bc816142c5565b9050919050565b600060208201905081810360008301526147dc816142e8565b9050919050565b600060208201905081810360008301526147fc8161430b565b9050919050565b6000602082019050818103600083015261481c8161432e565b9050919050565b6000602082019050818103600083015261483c81614351565b9050919050565b6000602082019050818103600083015261485c81614374565b9050919050565b6000602082019050818103600083015261487c81614397565b9050919050565b6000602082019050818103600083015261489c816143ba565b9050919050565b600060208201905081810360008301526148bc816143dd565b9050919050565b600060208201905081810360008301526148dc81614400565b9050919050565b600060208201905081810360008301526148fc81614423565b9050919050565b6000602082019050818103600083015261491c81614446565b9050919050565b6000602082019050818103600083015261493c81614469565b9050919050565b6000602082019050818103600083015261495c8161448c565b9050919050565b6000602082019050818103600083015261497c816144af565b9050919050565b6000602082019050818103600083015261499c816144d2565b9050919050565b600060208201905081810360008301526149bc816144f5565b9050919050565b600060208201905081810360008301526149dc81614518565b9050919050565b60006020820190506149f8600083018461454a565b92915050565b6000614a08614a19565b9050614a148282614d54565b919050565b6000604051905090565b600067ffffffffffffffff821115614a3e57614a3d614eea565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a6a57614a69614eea565b5b614a7382614f32565b9050602081019050919050565b600067ffffffffffffffff821115614a9b57614a9a614eea565b5b614aa482614f32565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b3882614cac565b9150614b4383614cac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b7857614b77614dff565b5b828201905092915050565b6000614b8e82614cac565b9150614b9983614cac565b925082614ba957614ba8614e2e565b5b828204905092915050565b6000614bbf82614cac565b9150614bca83614cac565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0357614c02614dff565b5b828202905092915050565b6000614c1982614cac565b9150614c2483614cac565b925082821015614c3757614c36614dff565b5b828203905092915050565b6000614c4d82614c8c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ce3578082015181840152602081019050614cc8565b83811115614cf2576000848401525b50505050565b6000614d0382614cac565b91506000821415614d1757614d16614dff565b5b600182039050919050565b60006002820490506001821680614d3a57607f821691505b60208210811415614d4e57614d4d614e5d565b5b50919050565b614d5d82614f32565b810181811067ffffffffffffffff82111715614d7c57614d7b614eea565b5b80604052505050565b6000614d9082614cac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dc357614dc2614dff565b5b600182019050919050565b6000614dd982614cac565b9150614de483614cac565b925082614df457614df3614e2e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365656473206d6178696d756d20476c61646961787920737570706c7900600082015250565b7f4f6e6c792057484954454c4953542063616e206d696e74000000000000000000600082015250565b7f596f752061726520657863656564696e67206c696d6974206f6620706572207760008201527f616c6c657420476c616469617879000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f616d6f756e74206f662073656e7420455448206973206e6f7420636f7272656360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65207061757365642c20706c6561736520636865636b206f666669636960008201527f616c20616e6e6f756e63656d656e7420666f72206d6f72652064657461696c00602082015250565b7f416c6c206f662074686520476c6164696178792068617665206265656e206d6960008201527f6e74656400000000000000000000000000000000000000000000000000000000602082015250565b7f666f756e646572206f6e6c790000000000000000000000000000000000000000600082015250565b7f5a65726f2061646472657373206572726f720000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420476c61646961787920737570706c79600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f752061726520657863656564696e67206c696d6974206f6620706572207460008201527f72616e73616374696f6e20000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6156c381614c42565b81146156ce57600080fd5b50565b6156da81614c54565b81146156e557600080fd5b50565b6156f181614c60565b81146156fc57600080fd5b50565b61570881614cac565b811461571357600080fd5b5056fea2646970667358221220ba6bd3ec495375d70dd412a48ebf7c9ad84aa2be67eff47f58ecc441f9f4650264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000081a885afdfe26ec6cb1f349644a4c0c1818bcef30000000000000000000000008b2955a4b4ef60faa023d69394bbf0a6a6d33cde0000000000000000000000000e970619d141e9424a395a31a28c9383cf59f9c70000000000000000000000001fd559b04f950c44da350fae707f3d51aeeb0bb40000000000000000000000008ad297982b2a787d9ea4d8af82403ba0e7e957f8000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676c6164696178792e636f6d2f6170692f676c6164696178792f000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000081a885afdfe26ec6cb1f349644a4c0c1818bcef30000000000000000000000008b2955a4b4ef60faa023d69394bbf0a6a6d33cde0000000000000000000000000e970619d141e9424a395a31a28c9383cf59f9c70000000000000000000000001fd559b04f950c44da350fae707f3d51aeeb0bb40000000000000000000000008ad297982b2a787d9ea4d8af82403ba0e7e957f8000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676c6164696178792e636f6d2f6170692f676c6164696178792f000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://gladiaxy.com/api/gladiaxy/
Arg [1] : _founder1 (address): 0x81a885AfdFe26EC6cb1F349644a4C0C1818bceF3
Arg [2] : _founder2 (address): 0x8B2955a4b4ef60fAa023D69394bBF0a6A6D33CdE
Arg [3] : _founder3 (address): 0x0E970619d141E9424A395A31a28C9383cf59F9C7
Arg [4] : _founder4 (address): 0x1Fd559b04F950C44DA350fAE707f3d51aEeb0BB4
Arg [5] : _founder5 (address): 0x8AD297982b2a787d9eA4d8af82403BA0E7e957f8
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 00000000000000000000000081a885afdfe26ec6cb1f349644a4c0c1818bcef3
Arg [2] : 0000000000000000000000008b2955a4b4ef60faa023d69394bbf0a6a6d33cde
Arg [3] : 0000000000000000000000000e970619d141e9424a395a31a28c9383cf59f9c7
Arg [4] : 0000000000000000000000001fd559b04f950c44da350fae707f3d51aeeb0bb4
Arg [5] : 0000000000000000000000008ad297982b2a787d9ea4d8af82403ba0e7e957f8
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [7] : 68747470733a2f2f676c6164696178792e636f6d2f6170692f676c6164696178
Arg [8] : 792f000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
44469:5923:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46497:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44935:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38906:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44738:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49535:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44968:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45843:646;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44583:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49626:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44702:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47584:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;49108:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44631:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49736:71;;;;;;;;;;;;;:::i;:::-;;49815:574;;;:::i;:::-;;47974:746;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49314:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45019:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47188:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26104:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44666:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44779:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48728:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;46497:679::-;46550:14;46567:13;:11;:13::i;:::-;46550:30;;46614:7;;;;;;;;;;;46613:8;46591:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;46752:9;;46745:3;:16;;46723:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;46890:9;;46881:6;;:18;;;;:::i;:::-;46874:3;46865:6;:12;;;;:::i;:::-;:34;;46843:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;47004:3;46995:6;;:12;;;;:::i;:::-;46982:9;:25;;46974:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;47063:9;47073:1;47063:11;;47058:111;47081:3;47076:1;:8;47058:111;;47124:33;47134:10;47155:1;47146:6;:10;;;;:::i;:::-;47124:9;:33::i;:::-;47086:3;;;;;:::i;:::-;;;;47058:111;;;;46539:637;46497:679;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;44935:26::-;;;;;;;;;;;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;44738:34::-;;;;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;49535:83::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49605:5:::1;49596:6;:14;;;;49535:83:::0;:::o;44968:44::-;;;;;;;;;;;;;;;;;:::o;45843:646::-;45932:8;;;;;;;;;;;45918:22;;:10;:22;;;:48;;;;45958:8;;;;;;;;;;;45944:22;;:10;:22;;;45918:48;:74;;;;45984:8;;;;;;;;;;;45970:22;;:10;:22;;;45918:74;:100;;;;46010:8;;;;;;;;;;;45996:22;;:10;:22;;;45918:100;:126;;;;46036:8;;;;;;;;;;;46022:22;;:10;:22;;;45918:126;45910:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;46089:8;;;;;;;;;;;46075:22;;:10;:22;;;46072:74;;;46124:10;46113:8;;:21;;;;;;;;;;;;;;;;;;46072:74;46173:8;;;;;;;;;;;46159:22;;:10;:22;;;46156:74;;;46208:10;46197:8;;:21;;;;;;;;;;;;;;;;;;46156:74;46257:8;;;;;;;;;;;46243:22;;:10;:22;;;46240:74;;;46292:10;46281:8;;:21;;;;;;;;;;;;;;;;;;46240:74;46341:8;;;;;;;;;;;46327:22;;:10;:22;;;46324:74;;;46376:10;46365:8;;:21;;;;;;;;;;;;;;;;;;46324:74;46425:8;;;;;;;;;;;46411:22;;:10;:22;;;46408:74;;;46460:10;46449:8;;:21;;;;;;;;;;;;;;;;;;46408:74;45843:646;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;44583:41::-;;;;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;;39297:24;;39096:233;;;:::o;49626:102::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49713:7:::1;49697:13;:23;;;;;;;;;;;;:::i;:::-;;49626:102:::0;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;44702:29::-;;;;:::o;47584:382::-;47676:16;47710:18;47731:17;47741:6;47731:9;:17::i;:::-;47710:38;;47761:25;47803:10;47789:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47761:53;;47830:9;47825:108;47845:10;47841:1;:14;47825:108;;;47891:30;47911:6;47919:1;47891:19;:30::i;:::-;47877:8;47886:1;47877:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47857:3;;;;;:::i;:::-;;;;47825:108;;;;47950:8;47943:15;;;;47584:382;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;49108:198::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49207:1:::1;49187:22;;:8;:22;;;;49179:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;49265:5;49243:9;:19;49253:8;49243:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;49281:15;;:17;;;;;;;;;:::i;:::-;;;;;;49108:198:::0;:::o;44631:28::-;;;;:::o;49736:71::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49792:7:::1;;;;;;;;;;;49791:8;49781:7;;:18;;;;;;;;;;;;;;;;;;49736:71::o:0;49815:574::-;49886:8;;;;;;;;;;;49872:22;;:10;:22;;;:48;;;;49912:8;;;;;;;;;;;49898:22;;:10;:22;;;49872:48;:74;;;;49938:8;;;;;;;;;;;49924:22;;:10;:22;;;49872:74;:100;;;;49964:8;;;;;;;;;;;49950:22;;:10;:22;;;49872:100;:126;;;;49990:8;;;;;;;;;;;49976:22;;:10;:22;;;49872:126;49864:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;50026:15;50044:21;50026:39;;50094:1;50084:7;:11;50076:20;;;;;;50123:8;;;;;;;;;;;50115:22;;:35;50148:1;50138:7;:11;;;;:::i;:::-;50115:35;;;;;;;;;;;;;;;;;;;;;;;50107:44;;;;;;50178:8;;;;;;;;;;;50170:22;;:35;50203:1;50193:7;:11;;;;:::i;:::-;50170:35;;;;;;;;;;;;;;;;;;;;;;;50162:44;;;;;;50233:8;;;;;;;;;;;50225:22;;:35;50258:1;50248:7;:11;;;;:::i;:::-;50225:35;;;;;;;;;;;;;;;;;;;;;;;50217:44;;;;;;50288:8;;;;;;;;;;;50280:22;;:35;50313:1;50303:7;:11;;;;:::i;:::-;50280:35;;;;;;;;;;;;;;;;;;;;;;;50272:44;;;;;;50343:8;;;;;;;;;;;50335:22;;:45;50358:21;50335:45;;;;;;;;;;;;;;;;;;;;;;;50327:54;;;;;;49853:536;49815:574::o;47974:746::-;48066:1;48044:24;;:10;:24;;;;48036:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48102:14;48119:13;:11;:13::i;:::-;48102:30;;48176:4;48151:29;;:9;:21;48161:10;48151:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;48143:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48272:22;;48265:3;48241:9;:21;48251:10;48241:21;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:53;;48219:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;48426:9;;48417:6;;:18;;;;:::i;:::-;48410:3;48401:6;:12;;;;:::i;:::-;:34;;48379:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;48535:3;48526:6;;:12;;;;:::i;:::-;48513:9;:25;;48505:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;48586:9;48596:1;48586:11;;48581:93;48604:3;48599:1;:8;48581:93;;48629:33;48639:10;48660:1;48651:6;:10;;;;:::i;:::-;48629:9;:33::i;:::-;48609:3;;;;;:::i;:::-;;;;48581:93;;;;48709:3;48684:9;:21;48694:10;48684:21;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;48025:695;47974:746;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;49314:91::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49388:9:::1;49379:6;:18;;;;49314:91:::0;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;45019:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;47188:388::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47293:1:::1;47278:17;;:3;:17;;;;47270:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;47348:9;;47337:7;:20;;47329:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47407:14;47424:13;:11;:13::i;:::-;47407:30;;47453:9;47463:1;47453:11;;47448:90;47471:7;47466:1;:12;47448:90;;47500:26;47510:3;47524:1;47515:6;:10;;;;:::i;:::-;47500:9;:26::i;:::-;47480:3;;;;;:::i;:::-;;;;47448:90;;;;47561:7;47548:9;;:20;;;;;;;:::i;:::-;;;;;;;;47259:317;47188:388:::0;;:::o;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;26104:334::-;26177:13;26211:16;26219:7;26211;:16::i;:::-;26203:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26292:21;26316:10;:8;:10::i;:::-;26292:34;;26368:1;26350:7;26344:21;:25;:86;;;;;;;;;;;;;;;;;26396:7;26405:18;:7;:16;:18::i;:::-;26379:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26344:86;26337:93;;;26104:334;;;:::o;44666:29::-;;;;:::o;44779:34::-;;;;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;48728:372::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48811:9:::1;48806:287;48830:9;:16;48826:1;:20;48806:287;;;48868:19;48890:9;48900:1;48890:12;;;;;;;;:::i;:::-;;;;;;;;48868:34;;48947:4;48921:30;;:9;:22;48931:11;48921:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;:59;;;;;48978:1;48955:25;;:11;:25;;;;48921:59;48917:165;;;49026:4;49001:9;:22;49011:11;49001:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;49049:15;;:17;;;;;;;;;:::i;:::-;;;;;;48917:165;48853:240;48848:3;;;;;:::i;:::-;;;;48806:287;;;;48728:372:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;49413:114::-;49473:13;49506;49499:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49413:114;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;37122:126::-;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42557:294;42523:328;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42126:907;;42045:988;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;:::i;:::-;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40906:147;40832:221;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:179::-;8910:10;8931:46;8973:3;8965:6;8931:46;:::i;:::-;9009:4;9004:3;9000:14;8986:28;;8841:179;;;;:::o;9026:118::-;9113:24;9131:5;9113:24;:::i;:::-;9108:3;9101:37;9026:118;;:::o;9180:732::-;9299:3;9328:54;9376:5;9328:54;:::i;:::-;9398:86;9477:6;9472:3;9398:86;:::i;:::-;9391:93;;9508:56;9558:5;9508:56;:::i;:::-;9587:7;9618:1;9603:284;9628:6;9625:1;9622:13;9603:284;;;9704:6;9698:13;9731:63;9790:3;9775:13;9731:63;:::i;:::-;9724:70;;9817:60;9870:6;9817:60;:::i;:::-;9807:70;;9663:224;9650:1;9647;9643:9;9638:14;;9603:284;;;9607:14;9903:3;9896:10;;9304:608;;;9180:732;;;;:::o;9918:109::-;9999:21;10014:5;9999:21;:::i;:::-;9994:3;9987:34;9918:109;;:::o;10033:360::-;10119:3;10147:38;10179:5;10147:38;:::i;:::-;10201:70;10264:6;10259:3;10201:70;:::i;:::-;10194:77;;10280:52;10325:6;10320:3;10313:4;10306:5;10302:16;10280:52;:::i;:::-;10357:29;10379:6;10357:29;:::i;:::-;10352:3;10348:39;10341:46;;10123:270;10033:360;;;;:::o;10399:364::-;10487:3;10515:39;10548:5;10515:39;:::i;:::-;10570:71;10634:6;10629:3;10570:71;:::i;:::-;10563:78;;10650:52;10695:6;10690:3;10683:4;10676:5;10672:16;10650:52;:::i;:::-;10727:29;10749:6;10727:29;:::i;:::-;10722:3;10718:39;10711:46;;10491:272;10399:364;;;;:::o;10769:377::-;10875:3;10903:39;10936:5;10903:39;:::i;:::-;10958:89;11040:6;11035:3;10958:89;:::i;:::-;10951:96;;11056:52;11101:6;11096:3;11089:4;11082:5;11078:16;11056:52;:::i;:::-;11133:6;11128:3;11124:16;11117:23;;10879:267;10769:377;;;;:::o;11152:366::-;11294:3;11315:67;11379:2;11374:3;11315:67;:::i;:::-;11308:74;;11391:93;11480:3;11391:93;:::i;:::-;11509:2;11504:3;11500:12;11493:19;;11152:366;;;:::o;11524:::-;11666:3;11687:67;11751:2;11746:3;11687:67;:::i;:::-;11680:74;;11763:93;11852:3;11763:93;:::i;:::-;11881:2;11876:3;11872:12;11865:19;;11524:366;;;:::o;11896:::-;12038:3;12059:67;12123:2;12118:3;12059:67;:::i;:::-;12052:74;;12135:93;12224:3;12135:93;:::i;:::-;12253:2;12248:3;12244:12;12237:19;;11896:366;;;:::o;12268:::-;12410:3;12431:67;12495:2;12490:3;12431:67;:::i;:::-;12424:74;;12507:93;12596:3;12507:93;:::i;:::-;12625:2;12620:3;12616:12;12609:19;;12268:366;;;:::o;12640:::-;12782:3;12803:67;12867:2;12862:3;12803:67;:::i;:::-;12796:74;;12879:93;12968:3;12879:93;:::i;:::-;12997:2;12992:3;12988:12;12981:19;;12640:366;;;:::o;13012:::-;13154:3;13175:67;13239:2;13234:3;13175:67;:::i;:::-;13168:74;;13251:93;13340:3;13251:93;:::i;:::-;13369:2;13364:3;13360:12;13353:19;;13012:366;;;:::o;13384:::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:::-;13898:3;13919:67;13983:2;13978:3;13919:67;:::i;:::-;13912:74;;13995:93;14084:3;13995:93;:::i;:::-;14113:2;14108:3;14104:12;14097:19;;13756:366;;;:::o;14128:::-;14270:3;14291:67;14355:2;14350:3;14291:67;:::i;:::-;14284:74;;14367:93;14456:3;14367:93;:::i;:::-;14485:2;14480:3;14476:12;14469:19;;14128:366;;;:::o;14500:::-;14642:3;14663:67;14727:2;14722:3;14663:67;:::i;:::-;14656:74;;14739:93;14828:3;14739:93;:::i;:::-;14857:2;14852:3;14848:12;14841:19;;14500:366;;;:::o;14872:::-;15014:3;15035:67;15099:2;15094:3;15035:67;:::i;:::-;15028:74;;15111:93;15200:3;15111:93;:::i;:::-;15229:2;15224:3;15220:12;15213:19;;14872:366;;;:::o;15244:::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:::-;15758:3;15779:67;15843:2;15838:3;15779:67;:::i;:::-;15772:74;;15855:93;15944:3;15855:93;:::i;:::-;15973:2;15968:3;15964:12;15957:19;;15616:366;;;:::o;15988:::-;16130:3;16151:67;16215:2;16210:3;16151:67;:::i;:::-;16144:74;;16227:93;16316:3;16227:93;:::i;:::-;16345:2;16340:3;16336:12;16329:19;;15988:366;;;:::o;16360:::-;16502:3;16523:67;16587:2;16582:3;16523:67;:::i;:::-;16516:74;;16599:93;16688:3;16599:93;:::i;:::-;16717:2;16712:3;16708:12;16701:19;;16360:366;;;:::o;16732:::-;16874:3;16895:67;16959:2;16954:3;16895:67;:::i;:::-;16888:74;;16971:93;17060:3;16971:93;:::i;:::-;17089:2;17084:3;17080:12;17073:19;;16732:366;;;:::o;17104:::-;17246:3;17267:67;17331:2;17326:3;17267:67;:::i;:::-;17260:74;;17343:93;17432:3;17343:93;:::i;:::-;17461:2;17456:3;17452:12;17445:19;;17104:366;;;:::o;17476:::-;17618:3;17639:67;17703:2;17698:3;17639:67;:::i;:::-;17632:74;;17715:93;17804:3;17715:93;:::i;:::-;17833:2;17828:3;17824:12;17817:19;;17476:366;;;:::o;17848:::-;17990:3;18011:67;18075:2;18070:3;18011:67;:::i;:::-;18004:74;;18087:93;18176:3;18087:93;:::i;:::-;18205:2;18200:3;18196:12;18189:19;;17848:366;;;:::o;18220:::-;18362:3;18383:67;18447:2;18442:3;18383:67;:::i;:::-;18376:74;;18459:93;18548:3;18459:93;:::i;:::-;18577:2;18572:3;18568:12;18561:19;;18220:366;;;:::o;18592:::-;18734:3;18755:67;18819:2;18814:3;18755:67;:::i;:::-;18748:74;;18831:93;18920:3;18831:93;:::i;:::-;18949:2;18944:3;18940:12;18933:19;;18592:366;;;:::o;18964:::-;19106:3;19127:67;19191:2;19186:3;19127:67;:::i;:::-;19120:74;;19203:93;19292:3;19203:93;:::i;:::-;19321:2;19316:3;19312:12;19305:19;;18964:366;;;:::o;19336:::-;19478:3;19499:67;19563:2;19558:3;19499:67;:::i;:::-;19492:74;;19575:93;19664:3;19575:93;:::i;:::-;19693:2;19688:3;19684:12;19677:19;;19336:366;;;:::o;19708:::-;19850:3;19871:67;19935:2;19930:3;19871:67;:::i;:::-;19864:74;;19947:93;20036:3;19947:93;:::i;:::-;20065:2;20060:3;20056:12;20049:19;;19708:366;;;:::o;20080:::-;20222:3;20243:67;20307:2;20302:3;20243:67;:::i;:::-;20236:74;;20319:93;20408:3;20319:93;:::i;:::-;20437:2;20432:3;20428:12;20421:19;;20080:366;;;:::o;20452:::-;20594:3;20615:67;20679:2;20674:3;20615:67;:::i;:::-;20608:74;;20691:93;20780:3;20691:93;:::i;:::-;20809:2;20804:3;20800:12;20793:19;;20452:366;;;:::o;20824:::-;20966:3;20987:67;21051:2;21046:3;20987:67;:::i;:::-;20980:74;;21063:93;21152:3;21063:93;:::i;:::-;21181:2;21176:3;21172:12;21165:19;;20824:366;;;:::o;21196:::-;21338:3;21359:67;21423:2;21418:3;21359:67;:::i;:::-;21352:74;;21435:93;21524:3;21435:93;:::i;:::-;21553:2;21548:3;21544:12;21537:19;;21196:366;;;:::o;21568:::-;21710:3;21731:67;21795:2;21790:3;21731:67;:::i;:::-;21724:74;;21807:93;21896:3;21807:93;:::i;:::-;21925:2;21920:3;21916:12;21909:19;;21568:366;;;:::o;21940:108::-;22017:24;22035:5;22017:24;:::i;:::-;22012:3;22005:37;21940:108;;:::o;22054:118::-;22141:24;22159:5;22141:24;:::i;:::-;22136:3;22129:37;22054:118;;:::o;22178:435::-;22358:3;22380:95;22471:3;22462:6;22380:95;:::i;:::-;22373:102;;22492:95;22583:3;22574:6;22492:95;:::i;:::-;22485:102;;22604:3;22597:10;;22178:435;;;;;:::o;22619:222::-;22712:4;22750:2;22739:9;22735:18;22727:26;;22763:71;22831:1;22820:9;22816:17;22807:6;22763:71;:::i;:::-;22619:222;;;;:::o;22847:640::-;23042:4;23080:3;23069:9;23065:19;23057:27;;23094:71;23162:1;23151:9;23147:17;23138:6;23094:71;:::i;:::-;23175:72;23243:2;23232:9;23228:18;23219:6;23175:72;:::i;:::-;23257;23325:2;23314:9;23310:18;23301:6;23257:72;:::i;:::-;23376:9;23370:4;23366:20;23361:2;23350:9;23346:18;23339:48;23404:76;23475:4;23466:6;23404:76;:::i;:::-;23396:84;;22847:640;;;;;;;:::o;23493:373::-;23636:4;23674:2;23663:9;23659:18;23651:26;;23723:9;23717:4;23713:20;23709:1;23698:9;23694:17;23687:47;23751:108;23854:4;23845:6;23751:108;:::i;:::-;23743:116;;23493:373;;;;:::o;23872:210::-;23959:4;23997:2;23986:9;23982:18;23974:26;;24010:65;24072:1;24061:9;24057:17;24048:6;24010:65;:::i;:::-;23872:210;;;;:::o;24088:313::-;24201:4;24239:2;24228:9;24224:18;24216:26;;24288:9;24282:4;24278:20;24274:1;24263:9;24259:17;24252:47;24316:78;24389:4;24380:6;24316:78;:::i;:::-;24308:86;;24088:313;;;;:::o;24407:419::-;24573:4;24611:2;24600:9;24596:18;24588:26;;24660:9;24654:4;24650:20;24646:1;24635:9;24631:17;24624:47;24688:131;24814:4;24688:131;:::i;:::-;24680:139;;24407:419;;;:::o;24832:::-;24998:4;25036:2;25025:9;25021:18;25013:26;;25085:9;25079:4;25075:20;25071:1;25060:9;25056:17;25049:47;25113:131;25239:4;25113:131;:::i;:::-;25105:139;;24832:419;;;:::o;25257:::-;25423:4;25461:2;25450:9;25446:18;25438:26;;25510:9;25504:4;25500:20;25496:1;25485:9;25481:17;25474:47;25538:131;25664:4;25538:131;:::i;:::-;25530:139;;25257:419;;;:::o;25682:::-;25848:4;25886:2;25875:9;25871:18;25863:26;;25935:9;25929:4;25925:20;25921:1;25910:9;25906:17;25899:47;25963:131;26089:4;25963:131;:::i;:::-;25955:139;;25682:419;;;:::o;26107:::-;26273:4;26311:2;26300:9;26296:18;26288:26;;26360:9;26354:4;26350:20;26346:1;26335:9;26331:17;26324:47;26388:131;26514:4;26388:131;:::i;:::-;26380:139;;26107:419;;;:::o;26532:::-;26698:4;26736:2;26725:9;26721:18;26713:26;;26785:9;26779:4;26775:20;26771:1;26760:9;26756:17;26749:47;26813:131;26939:4;26813:131;:::i;:::-;26805:139;;26532:419;;;:::o;26957:::-;27123:4;27161:2;27150:9;27146:18;27138:26;;27210:9;27204:4;27200:20;27196:1;27185:9;27181:17;27174:47;27238:131;27364:4;27238:131;:::i;:::-;27230:139;;26957:419;;;:::o;27382:::-;27548:4;27586:2;27575:9;27571:18;27563:26;;27635:9;27629:4;27625:20;27621:1;27610:9;27606:17;27599:47;27663:131;27789:4;27663:131;:::i;:::-;27655:139;;27382:419;;;:::o;27807:::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:::-;28398:4;28436:2;28425:9;28421:18;28413:26;;28485:9;28479:4;28475:20;28471:1;28460:9;28456:17;28449:47;28513:131;28639:4;28513:131;:::i;:::-;28505:139;;28232:419;;;:::o;28657:::-;28823:4;28861:2;28850:9;28846:18;28838:26;;28910:9;28904:4;28900:20;28896:1;28885:9;28881:17;28874:47;28938:131;29064:4;28938:131;:::i;:::-;28930:139;;28657:419;;;:::o;29082:::-;29248:4;29286:2;29275:9;29271:18;29263:26;;29335:9;29329:4;29325:20;29321:1;29310:9;29306:17;29299:47;29363:131;29489:4;29363:131;:::i;:::-;29355:139;;29082:419;;;:::o;29507:::-;29673:4;29711:2;29700:9;29696:18;29688:26;;29760:9;29754:4;29750:20;29746:1;29735:9;29731:17;29724:47;29788:131;29914:4;29788:131;:::i;:::-;29780:139;;29507:419;;;:::o;29932:::-;30098:4;30136:2;30125:9;30121:18;30113:26;;30185:9;30179:4;30175:20;30171:1;30160:9;30156:17;30149:47;30213:131;30339:4;30213:131;:::i;:::-;30205:139;;29932:419;;;:::o;30357:::-;30523:4;30561:2;30550:9;30546:18;30538:26;;30610:9;30604:4;30600:20;30596:1;30585:9;30581:17;30574:47;30638:131;30764:4;30638:131;:::i;:::-;30630:139;;30357:419;;;:::o;30782:::-;30948:4;30986:2;30975:9;30971:18;30963:26;;31035:9;31029:4;31025:20;31021:1;31010:9;31006:17;30999:47;31063:131;31189:4;31063:131;:::i;:::-;31055:139;;30782:419;;;:::o;31207:::-;31373:4;31411:2;31400:9;31396:18;31388:26;;31460:9;31454:4;31450:20;31446:1;31435:9;31431:17;31424:47;31488:131;31614:4;31488:131;:::i;:::-;31480:139;;31207:419;;;:::o;31632:::-;31798:4;31836:2;31825:9;31821:18;31813:26;;31885:9;31879:4;31875:20;31871:1;31860:9;31856:17;31849:47;31913:131;32039:4;31913:131;:::i;:::-;31905:139;;31632:419;;;:::o;32057:::-;32223:4;32261:2;32250:9;32246:18;32238:26;;32310:9;32304:4;32300:20;32296:1;32285:9;32281:17;32274:47;32338:131;32464:4;32338:131;:::i;:::-;32330:139;;32057:419;;;:::o;32482:::-;32648:4;32686:2;32675:9;32671:18;32663:26;;32735:9;32729:4;32725:20;32721:1;32710:9;32706:17;32699:47;32763:131;32889:4;32763:131;:::i;:::-;32755:139;;32482:419;;;:::o;32907:::-;33073:4;33111:2;33100:9;33096:18;33088:26;;33160:9;33154:4;33150:20;33146:1;33135:9;33131:17;33124:47;33188:131;33314:4;33188:131;:::i;:::-;33180:139;;32907:419;;;:::o;33332:::-;33498:4;33536:2;33525:9;33521:18;33513:26;;33585:9;33579:4;33575:20;33571:1;33560:9;33556:17;33549:47;33613:131;33739:4;33613:131;:::i;:::-;33605:139;;33332:419;;;:::o;33757:::-;33923:4;33961:2;33950:9;33946:18;33938:26;;34010:9;34004:4;34000:20;33996:1;33985:9;33981:17;33974:47;34038:131;34164:4;34038:131;:::i;:::-;34030:139;;33757:419;;;:::o;34182:::-;34348:4;34386:2;34375:9;34371:18;34363:26;;34435:9;34429:4;34425:20;34421:1;34410:9;34406:17;34399:47;34463:131;34589:4;34463:131;:::i;:::-;34455:139;;34182:419;;;:::o;34607:::-;34773:4;34811:2;34800:9;34796:18;34788:26;;34860:9;34854:4;34850:20;34846:1;34835:9;34831:17;34824:47;34888:131;35014:4;34888:131;:::i;:::-;34880:139;;34607:419;;;:::o;35032:::-;35198:4;35236:2;35225:9;35221:18;35213:26;;35285:9;35279:4;35275:20;35271:1;35260:9;35256:17;35249:47;35313:131;35439:4;35313:131;:::i;:::-;35305:139;;35032:419;;;:::o;35457:::-;35623:4;35661:2;35650:9;35646:18;35638:26;;35710:9;35704:4;35700:20;35696:1;35685:9;35681:17;35674:47;35738:131;35864:4;35738:131;:::i;:::-;35730:139;;35457:419;;;:::o;35882:::-;36048:4;36086:2;36075:9;36071:18;36063:26;;36135:9;36129:4;36125:20;36121:1;36110:9;36106:17;36099:47;36163:131;36289:4;36163:131;:::i;:::-;36155:139;;35882:419;;;:::o;36307:::-;36473:4;36511:2;36500:9;36496:18;36488:26;;36560:9;36554:4;36550:20;36546:1;36535:9;36531:17;36524:47;36588:131;36714:4;36588:131;:::i;:::-;36580:139;;36307:419;;;:::o;36732:222::-;36825:4;36863:2;36852:9;36848:18;36840:26;;36876:71;36944:1;36933:9;36929:17;36920:6;36876:71;:::i;:::-;36732:222;;;;:::o;36960:129::-;36994:6;37021:20;;:::i;:::-;37011:30;;37050:33;37078:4;37070:6;37050:33;:::i;:::-;36960:129;;;:::o;37095:75::-;37128:6;37161:2;37155:9;37145:19;;37095:75;:::o;37176:311::-;37253:4;37343:18;37335:6;37332:30;37329:56;;;37365:18;;:::i;:::-;37329:56;37415:4;37407:6;37403:17;37395:25;;37475:4;37469;37465:15;37457:23;;37176:311;;;:::o;37493:307::-;37554:4;37644:18;37636:6;37633:30;37630:56;;;37666:18;;:::i;:::-;37630:56;37704:29;37726:6;37704:29;:::i;:::-;37696:37;;37788:4;37782;37778:15;37770:23;;37493:307;;;:::o;37806:308::-;37868:4;37958:18;37950:6;37947:30;37944:56;;;37980:18;;:::i;:::-;37944:56;38018:29;38040:6;38018:29;:::i;:::-;38010:37;;38102:4;38096;38092:15;38084:23;;37806:308;;;:::o;38120:132::-;38187:4;38210:3;38202:11;;38240:4;38235:3;38231:14;38223:22;;38120:132;;;:::o;38258:114::-;38325:6;38359:5;38353:12;38343:22;;38258:114;;;:::o;38378:98::-;38429:6;38463:5;38457:12;38447:22;;38378:98;;;:::o;38482:99::-;38534:6;38568:5;38562:12;38552:22;;38482:99;;;:::o;38587:113::-;38657:4;38689;38684:3;38680:14;38672:22;;38587:113;;;:::o;38706:184::-;38805:11;38839:6;38834:3;38827:19;38879:4;38874:3;38870:14;38855:29;;38706:184;;;;:::o;38896:168::-;38979:11;39013:6;39008:3;39001:19;39053:4;39048:3;39044:14;39029:29;;38896:168;;;;:::o;39070:169::-;39154:11;39188:6;39183:3;39176:19;39228:4;39223:3;39219:14;39204:29;;39070:169;;;;:::o;39245:148::-;39347:11;39384:3;39369:18;;39245:148;;;;:::o;39399:305::-;39439:3;39458:20;39476:1;39458:20;:::i;:::-;39453:25;;39492:20;39510:1;39492:20;:::i;:::-;39487:25;;39646:1;39578:66;39574:74;39571:1;39568:81;39565:107;;;39652:18;;:::i;:::-;39565:107;39696:1;39693;39689:9;39682:16;;39399:305;;;;:::o;39710:185::-;39750:1;39767:20;39785:1;39767:20;:::i;:::-;39762:25;;39801:20;39819:1;39801:20;:::i;:::-;39796:25;;39840:1;39830:35;;39845:18;;:::i;:::-;39830:35;39887:1;39884;39880:9;39875:14;;39710:185;;;;:::o;39901:348::-;39941:7;39964:20;39982:1;39964:20;:::i;:::-;39959:25;;39998:20;40016:1;39998:20;:::i;:::-;39993:25;;40186:1;40118:66;40114:74;40111:1;40108:81;40103:1;40096:9;40089:17;40085:105;40082:131;;;40193:18;;:::i;:::-;40082:131;40241:1;40238;40234:9;40223:20;;39901:348;;;;:::o;40255:191::-;40295:4;40315:20;40333:1;40315:20;:::i;:::-;40310:25;;40349:20;40367:1;40349:20;:::i;:::-;40344:25;;40388:1;40385;40382:8;40379:34;;;40393:18;;:::i;:::-;40379:34;40438:1;40435;40431:9;40423:17;;40255:191;;;;:::o;40452:96::-;40489:7;40518:24;40536:5;40518:24;:::i;:::-;40507:35;;40452:96;;;:::o;40554:90::-;40588:7;40631:5;40624:13;40617:21;40606:32;;40554:90;;;:::o;40650:149::-;40686:7;40726:66;40719:5;40715:78;40704:89;;40650:149;;;:::o;40805:126::-;40842:7;40882:42;40875:5;40871:54;40860:65;;40805:126;;;:::o;40937:77::-;40974:7;41003:5;40992:16;;40937:77;;;:::o;41020:154::-;41104:6;41099:3;41094;41081:30;41166:1;41157:6;41152:3;41148:16;41141:27;41020:154;;;:::o;41180:307::-;41248:1;41258:113;41272:6;41269:1;41266:13;41258:113;;;41357:1;41352:3;41348:11;41342:18;41338:1;41333:3;41329:11;41322:39;41294:2;41291:1;41287:10;41282:15;;41258:113;;;41389:6;41386:1;41383:13;41380:101;;;41469:1;41460:6;41455:3;41451:16;41444:27;41380:101;41229:258;41180:307;;;:::o;41493:171::-;41532:3;41555:24;41573:5;41555:24;:::i;:::-;41546:33;;41601:4;41594:5;41591:15;41588:41;;;41609:18;;:::i;:::-;41588:41;41656:1;41649:5;41645:13;41638:20;;41493:171;;;:::o;41670:320::-;41714:6;41751:1;41745:4;41741:12;41731:22;;41798:1;41792:4;41788:12;41819:18;41809:81;;41875:4;41867:6;41863:17;41853:27;;41809:81;41937:2;41929:6;41926:14;41906:18;41903:38;41900:84;;;41956:18;;:::i;:::-;41900:84;41721:269;41670:320;;;:::o;41996:281::-;42079:27;42101:4;42079:27;:::i;:::-;42071:6;42067:40;42209:6;42197:10;42194:22;42173:18;42161:10;42158:34;42155:62;42152:88;;;42220:18;;:::i;:::-;42152:88;42260:10;42256:2;42249:22;42039:238;41996:281;;:::o;42283:233::-;42322:3;42345:24;42363:5;42345:24;:::i;:::-;42336:33;;42391:66;42384:5;42381:77;42378:103;;;42461:18;;:::i;:::-;42378:103;42508:1;42501:5;42497:13;42490:20;;42283:233;;;:::o;42522:176::-;42554:1;42571:20;42589:1;42571:20;:::i;:::-;42566:25;;42605:20;42623:1;42605:20;:::i;:::-;42600:25;;42644:1;42634:35;;42649:18;;:::i;:::-;42634:35;42690:1;42687;42683:9;42678:14;;42522:176;;;;:::o;42704:180::-;42752:77;42749:1;42742:88;42849:4;42846:1;42839:15;42873:4;42870:1;42863:15;42890:180;42938:77;42935:1;42928:88;43035:4;43032:1;43025:15;43059:4;43056:1;43049:15;43076:180;43124:77;43121:1;43114:88;43221:4;43218:1;43211:15;43245:4;43242:1;43235:15;43262:180;43310:77;43307:1;43300:88;43407:4;43404:1;43397:15;43431:4;43428:1;43421:15;43448:180;43496:77;43493:1;43486:88;43593:4;43590:1;43583:15;43617:4;43614:1;43607:15;43634:180;43682:77;43679:1;43672:88;43779:4;43776:1;43769:15;43803:4;43800:1;43793:15;43820:117;43929:1;43926;43919:12;43943:117;44052:1;44049;44042:12;44066:117;44175:1;44172;44165:12;44189:117;44298:1;44295;44288:12;44312:117;44421:1;44418;44411:12;44435:102;44476:6;44527:2;44523:7;44518:2;44511:5;44507:14;44503:28;44493:38;;44435:102;;;:::o;44543:181::-;44683:33;44679:1;44671:6;44667:14;44660:57;44543:181;:::o;44730:173::-;44870:25;44866:1;44858:6;44854:14;44847:49;44730:173;:::o;44909:233::-;45049:34;45045:1;45037:6;45033:14;45026:58;45118:16;45113:2;45105:6;45101:15;45094:41;44909:233;:::o;45148:230::-;45288:34;45284:1;45276:6;45272:14;45265:58;45357:13;45352:2;45344:6;45340:15;45333:38;45148:230;:::o;45384:237::-;45524:34;45520:1;45512:6;45508:14;45501:58;45593:20;45588:2;45580:6;45576:15;45569:45;45384:237;:::o;45627:220::-;45767:34;45763:1;45755:6;45751:14;45744:58;45836:3;45831:2;45823:6;45819:15;45812:28;45627:220;:::o;45853:225::-;45993:34;45989:1;45981:6;45977:14;45970:58;46062:8;46057:2;46049:6;46045:15;46038:33;45853:225;:::o;46084:178::-;46224:30;46220:1;46212:6;46208:14;46201:54;46084:178;:::o;46268:250::-;46408:34;46404:1;46396:6;46392:14;46385:58;46477:33;46472:2;46464:6;46460:15;46453:58;46268:250;:::o;46524:223::-;46664:34;46660:1;46652:6;46648:14;46641:58;46733:6;46728:2;46720:6;46716:15;46709:31;46524:223;:::o;46753:162::-;46893:14;46889:1;46881:6;46877:14;46870:38;46753:162;:::o;46921:168::-;47061:20;47057:1;47049:6;47045:14;47038:44;46921:168;:::o;47095:223::-;47235:34;47231:1;47223:6;47219:14;47212:58;47304:6;47299:2;47291:6;47287:15;47280:31;47095:223;:::o;47324:175::-;47464:27;47460:1;47452:6;47448:14;47441:51;47324:175;:::o;47505:231::-;47645:34;47641:1;47633:6;47629:14;47622:58;47714:14;47709:2;47701:6;47697:15;47690:39;47505:231;:::o;47742:182::-;47882:34;47878:1;47870:6;47866:14;47859:58;47742:182;:::o;47930:243::-;48070:34;48066:1;48058:6;48054:14;48047:58;48139:26;48134:2;48126:6;48122:15;48115:51;47930:243;:::o;48179:229::-;48319:34;48315:1;48307:6;48303:14;48296:58;48388:12;48383:2;48375:6;48371:15;48364:37;48179:229;:::o;48414:228::-;48554:34;48550:1;48542:6;48538:14;48531:58;48623:11;48618:2;48610:6;48606:15;48599:36;48414:228;:::o;48648:182::-;48788:34;48784:1;48776:6;48772:14;48765:58;48648:182;:::o;48836:231::-;48976:34;48972:1;48964:6;48960:14;48953:58;49045:14;49040:2;49032:6;49028:15;49021:39;48836:231;:::o;49073:182::-;49213:34;49209:1;49201:6;49197:14;49190:58;49073:182;:::o;49261:228::-;49401:34;49397:1;49389:6;49385:14;49378:58;49470:11;49465:2;49457:6;49453:15;49446:36;49261:228;:::o;49495:234::-;49635:34;49631:1;49623:6;49619:14;49612:58;49704:17;49699:2;49691:6;49687:15;49680:42;49495:234;:::o;49735:230::-;49875:34;49871:1;49863:6;49859:14;49852:58;49944:13;49939:2;49931:6;49927:15;49920:38;49735:230;:::o;49971:220::-;50111:34;50107:1;50099:6;50095:14;50088:58;50180:3;50175:2;50167:6;50163:15;50156:28;49971:220;:::o;50197:175::-;50337:27;50333:1;50325:6;50321:14;50314:51;50197:175;:::o;50378:236::-;50518:34;50514:1;50506:6;50502:14;50495:58;50587:19;50582:2;50574:6;50570:15;50563:44;50378:236;:::o;50620:231::-;50760:34;50756:1;50748:6;50744:14;50737:58;50829:14;50824:2;50816:6;50812:15;50805:39;50620:231;:::o;50857:122::-;50930:24;50948:5;50930:24;:::i;:::-;50923:5;50920:35;50910:63;;50969:1;50966;50959:12;50910:63;50857:122;:::o;50985:116::-;51055:21;51070:5;51055:21;:::i;:::-;51048:5;51045:32;51035:60;;51091:1;51088;51081:12;51035:60;50985:116;:::o;51107:120::-;51179:23;51196:5;51179:23;:::i;:::-;51172:5;51169:34;51159:62;;51217:1;51214;51207:12;51159:62;51107:120;:::o;51233:122::-;51306:24;51324:5;51306:24;:::i;:::-;51299:5;51296:35;51286:63;;51345:1;51342;51335:12;51286:63;51233:122;:::o
Swarm Source
ipfs://ba6bd3ec495375d70dd412a48ebf7c9ad84aa2be67eff47f58ecc441f9f46502