Source Code
Overview
GLMR Balance
GLMR Value
Less Than $0.01 (@ $0.02/GLMR)More Info
Private Name Tags
ContractCreator
TokenTracker
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GLMRWeirdos
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2022-01-28
*/
/**
*Submitted for verification at Etherscan.io on 2021-04-13
*/
// SPDX-License-Identifier: MIT
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) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @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 () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), 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 {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
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);
}
/**
* @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;
}
/**
* @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);
}
/**
* @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);
}
/**
* @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);
}
/**
* @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;
// solhint-disable-next-line no-inline-assembly
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");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @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");
// solhint-disable-next-line avoid-low-level-calls
(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");
// solhint-disable-next-line avoid-low-level-calls
(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");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant alphabet = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = alphabet[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
/**
* @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;
}
}
/**
* @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}. 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 || ERC721.isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(address from, address to, uint256 tokenId) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
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 || ERC721.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 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(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
// solhint-disable-next-line no-inline-assembly
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` 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 { }
}
/**
* @dev This is a fork of openzeppelin ERC721Enumerable. It is gas-optimizated for NFT collection
* with sequential token IDs. The updated part includes:
* - replaced the array `_allToken` with a simple uint `_totalSupply`,
* - updated the functions `totalSupply` and `_beforeTokenTransfer`.
*/
abstract contract ERC721EnumerableSimple is ERC721, IERC721Enumerable {
// user => tokenId[]
mapping(address => mapping(uint => uint)) private _ownedTokens;
// tokenId => index of _ownedTokens[user] (used when changing token ownership)
mapping(uint => uint) private _ownedTokensIndex;
// current total amount of token minted
uint private _totalSupply;
/// @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 _totalSupply;
}
/// @dev See {IERC721Enumerable-tokenByIndex}.
function tokenByIndex(uint index) public view virtual override returns (uint) {
require(index < ERC721EnumerableSimple.totalSupply(), "ERC721Enumerable: global index out of bounds");
return index;
}
/// @dev Hook that is called before any token transfer. This includes minting
function _beforeTokenTransfer(
address from,
address to,
uint tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
assert(tokenId == _totalSupply); // Ensure token is minted sequentially
_totalSupply += 1;
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
// do nothing
} 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 uint ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint tokenId) private {
uint length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev See {ERC721Enumerable-_removeTokenFromOwnerEnumeration}.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint 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).
uint lastTokenIndex = ERC721.balanceOf(from) - 1;
uint tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint 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];
}
}
contract GLMRWeirdos is ERC721EnumerableSimple, Ownable {
// Maximum amount of Weirdos in existance. Ever.
uint public constant MAX_WEIRDOS_SUPPLY = 1999;
// The provenance hash of all Weirdos.
string public constant METADATA_HASH = "QmdA4yf9JL7C7NrBJkLeucWDWn1Hh7dHp4Y8RzPaCZN1GN";
// Sale switch.
bool public hasSaleStarted = false;
// Bsae URI of Weirdo's metadata
string private baseURI;
constructor() ERC721("GLMR Weirdos", "WEIRDOS") {}
function tokensOfOwner(address _owner) external view returns (uint[] memory) {
uint tokenCount = balanceOf(_owner);
if (tokenCount == 0) {
return new uint[](0); // Return an empty array
} else {
uint[] memory result = new uint[](tokenCount);
for (uint index = 0; index < tokenCount; index++) {
result[index] = tokenOfOwnerByIndex(_owner, index);
}
return result;
}
}
function calculatePrice() public view returns (uint) {
require(hasSaleStarted, "Sale hasn't started");
return calculatePriceForToken(totalSupply());
}
function calculatePriceForToken(uint _id) public pure returns (uint) {
require(_id < MAX_WEIRDOS_SUPPLY, "Sale has already ended");
return 0.5 ether; // 0-999 0.5 ether
}
function adoptWeirdos(uint numWpunks) public payable {
uint _totalSupply = totalSupply();
require(_totalSupply < MAX_WEIRDOS_SUPPLY, "Sale has already ended");
require(hasSaleStarted, "Sale hasn't started");
require(_totalSupply + numWpunks <= MAX_WEIRDOS_SUPPLY, "Exceeds maximum Weirdos supply");
require(numWpunks > 0 && numWpunks <= 30, "You can adopt minimum 1, maximum 30 Weirdos");
require(msg.value >= calculatePrice() * numWpunks, "Ether value sent is below the price");
for (uint i = 0; i < numWpunks; i++) {
uint mintIndex = totalSupply();
_safeMint(msg.sender, mintIndex);
}
}
function _baseURI() internal view override returns (string memory) {
return baseURI;
}
function setBaseURI(string memory __baseURI) public onlyOwner {
baseURI = __baseURI;
}
function startSale() public onlyOwner {
hasSaleStarted = true;
}
function pauseSale() public onlyOwner {
hasSaleStarted = false;
}
function withdrawAll() public payable onlyOwner {
require(payable(msg.sender).send(address(this).balance));
}
// #0 - #29: Reserved for giveaways and people who helped along the way
function reserveGiveaway(uint numWpunks) public onlyOwner {
uint currentSupply = totalSupply();
require(currentSupply + numWpunks <= 20, "Exceeded giveaway limit");
for (uint index = 0; index < numWpunks; index++) {
_safeMint(owner(), currentSupply + index);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_WEIRDOS_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numWpunks","type":"uint256"}],"name":"adoptWeirdos","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"calculatePriceForToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numWpunks","type":"uint256"}],"name":"reserveGiveaway","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":[],"name":"startSale","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"},{"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60806040526000600960146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600c81526020017f474c4d522057656972646f7300000000000000000000000000000000000000008152506040518060400160405280600781526020017f57454952444f53000000000000000000000000000000000000000000000000008152508160009080519060200190620000b19291906200018c565b508060019080519060200190620000ca9291906200018c565b5050506000620000df6200018460201b60201c565b905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002a1565b600033905090565b8280546200019a906200023c565b90600052602060002090601f016020900481019282620001be57600085556200020a565b82601f10620001d957805160ff19168380011785556200020a565b828001600101855582156200020a579182015b8281111562000209578251825591602001919060010190620001ec565b5b5090506200021991906200021d565b5090565b5b80821115620002385760008160009055506001016200021e565b5090565b600060028204905060018216806200025557607f821691505b602082108114156200026c576200026b62000272565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61431a80620002b16000396000f3fe6080604052600436106101d85760003560e01c80636fd9537f11610102578063a40f1aa511610095578063c87b56dd11610064578063c87b56dd1461067c578063d348b409146106b9578063e985e9c5146106e4578063f2fde38b14610721576101d8565b8063a40f1aa5146105e8578063b66a0e5d14610611578063b88d4fde14610628578063bc41c9c614610651576101d8565b8063853828b6116100d1578063853828b61461055f5780638da5cb5b1461056957806395d89b4114610594578063a22cb465146105bf576101d8565b80636fd9537f1461049157806370a08231146104ce578063715018a61461050b5780638462151c14610522576101d8565b806323b872dd1161017a57806355367ba91161014957806355367ba9146103e957806355f804b3146104005780636352211e1461042957806368e1c40214610466576101d8565b806323b872dd1461031d5780632f745c591461034657806342842e0e146103835780634f6ccce7146103ac576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780630c2db981146102ab57806318160ddd146102c75780631c8b232d146102f2576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612dc6565b61074a565b60405161021191906133e0565b60405180910390f35b34801561022657600080fd5b5061022f6107c4565b60405161023c91906133fb565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612e69565b610856565b6040516102799190613357565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612d86565b6108db565b005b6102c560048036038101906102c09190612e69565b6109f3565b005b3480156102d357600080fd5b506102dc610bc1565b6040516102e9919061371d565b60405180910390f35b3480156102fe57600080fd5b50610307610bcb565b60405161031491906133e0565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190612c70565b610bde565b005b34801561035257600080fd5b5061036d60048036038101906103689190612d86565b610c3e565b60405161037a919061371d565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190612c70565b610ce3565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612e69565b610d03565b6040516103e0919061371d565b60405180910390f35b3480156103f557600080fd5b506103fe610d56565b005b34801561040c57600080fd5b5061042760048036038101906104229190612e20565b610def565b005b34801561043557600080fd5b50610450600480360381019061044b9190612e69565b610e85565b60405161045d9190613357565b60405180910390f35b34801561047257600080fd5b5061047b610f37565b604051610488919061371d565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612e69565b610f3d565b6040516104c5919061371d565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612c03565b610f93565b604051610502919061371d565b60405180910390f35b34801561051757600080fd5b5061052061104b565b005b34801561052e57600080fd5b5061054960048036038101906105449190612c03565b611188565b60405161055691906133be565b60405180910390f35b610567611292565b005b34801561057557600080fd5b5061057e61134e565b60405161058b9190613357565b60405180910390f35b3480156105a057600080fd5b506105a9611378565b6040516105b691906133fb565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190612d46565b61140a565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190612e69565b61158b565b005b34801561061d57600080fd5b506106266116a1565b005b34801561063457600080fd5b5061064f600480360381019061064a9190612cc3565b61173a565b005b34801561065d57600080fd5b5061066661179c565b60405161067391906133fb565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612e69565b6117b8565b6040516106b091906133fb565b60405180910390f35b3480156106c557600080fd5b506106ce61185f565b6040516106db919061371d565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190612c30565b6118c5565b60405161071891906133e0565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190612c03565b611959565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107bd57506107bc82611b05565b5b9050919050565b6060600080546107d390613a06565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90613a06565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b5050505050905090565b600061086182611be7565b6108a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610897906135dd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e682610e85565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061365d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610976611c53565b73ffffffffffffffffffffffffffffffffffffffff1614806109a557506109a48161099f611c53565b6118c5565b5b6109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db9061351d565b60405180910390fd5b6109ee8383611c5b565b505050565b60006109fd610bc1565b90506107cf8110610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061367d565b60405180910390fd5b600960149054906101000a900460ff16610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a89906136dd565b60405180910390fd5b6107cf8282610aa1919061383b565b1115610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad99061357d565b60405180910390fd5b600082118015610af35750601e8211155b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b29906134fd565b60405180910390fd5b81610b3b61185f565b610b4591906138c2565b341015610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e9061359d565b60405180910390fd5b60005b82811015610bbc576000610b9c610bc1565b9050610ba83382611d14565b508080610bb490613a69565b915050610b8a565b505050565b6000600854905090565b600960149054906101000a900460ff1681565b610bef610be9611c53565b82611d32565b610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c259061369d565b60405180910390fd5b610c39838383611e10565b505050565b6000610c4983610f93565b8210610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c819061341d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cfe8383836040518060200160405280600081525061173a565b505050565b6000610d0d610bc1565b8210610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d45906136bd565b60405180910390fd5b819050919050565b610d5e611c53565b73ffffffffffffffffffffffffffffffffffffffff16610d7c61134e565b73ffffffffffffffffffffffffffffffffffffffff1614610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906135fd565b60405180910390fd5b6000600960146101000a81548160ff021916908315150217905550565b610df7611c53565b73ffffffffffffffffffffffffffffffffffffffff16610e1561134e565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906135fd565b60405180910390fd5b80600a9080519060200190610e81929190612a17565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f259061355d565b60405180910390fd5b80915050919050565b6107cf81565b60006107cf8210610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061367d565b60405180910390fd5b6706f05b59d3b200009050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061353d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611053611c53565b73ffffffffffffffffffffffffffffffffffffffff1661107161134e565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be906135fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600061119583610f93565b905060008114156111f257600067ffffffffffffffff8111156111bb576111ba613bce565b5b6040519080825280602002602001820160405280156111e95781602001602082028036833780820191505090505b5091505061128d565b60008167ffffffffffffffff81111561120e5761120d613bce565b5b60405190808252806020026020018201604052801561123c5781602001602082028036833780820191505090505b50905060005b82811015611286576112548582610c3e565b82828151811061126757611266613b9f565b5b602002602001018181525050808061127e90613a69565b915050611242565b5080925050505b919050565b61129a611c53565b73ffffffffffffffffffffffffffffffffffffffff166112b861134e565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611305906135fd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061134c57600080fd5b565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461138790613a06565b80601f01602080910402602001604051908101604052809291908181526020018280546113b390613a06565b80156114005780601f106113d557610100808354040283529160200191611400565b820191906000526020600020905b8154815290600101906020018083116113e357829003601f168201915b5050505050905090565b611412611c53565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906134bd565b60405180910390fd5b806005600061148d611c53565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661153a611c53565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161157f91906133e0565b60405180910390a35050565b611593611c53565b73ffffffffffffffffffffffffffffffffffffffff166115b161134e565b73ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe906135fd565b60405180910390fd5b6000611611610bc1565b905060148282611621919061383b565b1115611662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611659906136fd565b60405180910390fd5b60005b8281101561169c5761168961167861134e565b8284611684919061383b565b611d14565b808061169490613a69565b915050611665565b505050565b6116a9611c53565b73ffffffffffffffffffffffffffffffffffffffff166116c761134e565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906135fd565b60405180910390fd5b6001600960146101000a81548160ff021916908315150217905550565b61174b611745611c53565b83611d32565b61178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117819061369d565b60405180910390fd5b6117968484848461206c565b50505050565b6040518060600160405280602e81526020016142b7602e913981565b60606117c382611be7565b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f99061363d565b60405180910390fd5b600061180c6120c8565b9050600081511161182c5760405180602001604052806000815250611857565b806118368461215a565b604051602001611847929190613333565b6040516020818303038152906040525b915050919050565b6000600960149054906101000a900460ff166118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906136dd565b60405180910390fd5b6118c06118bb610bc1565b610f3d565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611961611c53565b73ffffffffffffffffffffffffffffffffffffffff1661197f61134e565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc906135fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c9061345d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bd057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611be05750611bdf826122bb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cce83610e85565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d2e828260405180602001604052806000815250612325565b5050565b6000611d3d82611be7565b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d73906134dd565b60405180910390fd5b6000611d8783610e85565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df657508373ffffffffffffffffffffffffffffffffffffffff16611dde84610856565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e075750611e0681856118c5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e3082610e85565b73ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d9061361d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed9061349d565b60405180910390fd5b611f01838383612380565b611f0c600082611c5b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5c919061391c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb3919061383b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612077848484611e10565b612083848484846124ae565b6120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061343d565b60405180910390fd5b50505050565b6060600a80546120d790613a06565b80601f016020809104026020016040519081016040528092919081815260200182805461210390613a06565b80156121505780601f1061212557610100808354040283529160200191612150565b820191906000526020600020905b81548152906001019060200180831161213357829003601f168201915b5050505050905090565b606060008214156121a2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b6565b600082905060005b600082146121d45780806121bd90613a69565b915050600a826121cd9190613891565b91506121aa565b60008167ffffffffffffffff8111156121f0576121ef613bce565b5b6040519080825280601f01601f1916602001820160405280156122225781602001600182028036833780820191505090505b5090505b600085146122af5760018261223b919061391c565b9150600a8561224a9190613ab2565b6030612256919061383b565b60f81b81838151811061226c5761226b613b9f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a89190613891565b9450612226565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232f8383612645565b61233c60008484846124ae565b61237b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123729061343d565b60405180910390fd5b505050565b61238b838383612813565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123f15760085481146123d2576123d1613ae3565b5b6001600860008282546123e5919061383b565b92505081905550612430565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461242f5761242e8382612818565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246a576124a9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124a8576124a78282612985565b5b5b505050565b60006124cf8473ffffffffffffffffffffffffffffffffffffffff16612a04565b15612638578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124f8611c53565b8786866040518563ffffffff1660e01b815260040161251a9493929190613372565b602060405180830381600087803b15801561253457600080fd5b505af192505050801561256557506040513d601f19601f820116820180604052508101906125629190612df3565b60015b6125e8573d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b506000815114156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d79061343d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061263d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac906135bd565b60405180910390fd5b6126be81611be7565b156126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f59061347d565b60405180910390fd5b61270a60008383612380565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461275a919061383b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6000600161282584610f93565b61282f919061391c565b9050600060076000848152602001908152602001600020549050818114612914576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600061299083610f93565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612a2390613a06565b90600052602060002090601f016020900481019282612a455760008555612a8c565b82601f10612a5e57805160ff1916838001178555612a8c565b82800160010185558215612a8c579182015b82811115612a8b578251825591602001919060010190612a70565b5b509050612a999190612a9d565b5090565b5b80821115612ab6576000816000905550600101612a9e565b5090565b6000612acd612ac88461375d565b613738565b905082815260208101848484011115612ae957612ae8613c02565b5b612af48482856139c4565b509392505050565b6000612b0f612b0a8461378e565b613738565b905082815260208101848484011115612b2b57612b2a613c02565b5b612b368482856139c4565b509392505050565b600081359050612b4d8161425a565b92915050565b600081359050612b6281614271565b92915050565b600081359050612b7781614288565b92915050565b600081519050612b8c81614288565b92915050565b600082601f830112612ba757612ba6613bfd565b5b8135612bb7848260208601612aba565b91505092915050565b600082601f830112612bd557612bd4613bfd565b5b8135612be5848260208601612afc565b91505092915050565b600081359050612bfd8161429f565b92915050565b600060208284031215612c1957612c18613c0c565b5b6000612c2784828501612b3e565b91505092915050565b60008060408385031215612c4757612c46613c0c565b5b6000612c5585828601612b3e565b9250506020612c6685828601612b3e565b9150509250929050565b600080600060608486031215612c8957612c88613c0c565b5b6000612c9786828701612b3e565b9350506020612ca886828701612b3e565b9250506040612cb986828701612bee565b9150509250925092565b60008060008060808587031215612cdd57612cdc613c0c565b5b6000612ceb87828801612b3e565b9450506020612cfc87828801612b3e565b9350506040612d0d87828801612bee565b925050606085013567ffffffffffffffff811115612d2e57612d2d613c07565b5b612d3a87828801612b92565b91505092959194509250565b60008060408385031215612d5d57612d5c613c0c565b5b6000612d6b85828601612b3e565b9250506020612d7c85828601612b53565b9150509250929050565b60008060408385031215612d9d57612d9c613c0c565b5b6000612dab85828601612b3e565b9250506020612dbc85828601612bee565b9150509250929050565b600060208284031215612ddc57612ddb613c0c565b5b6000612dea84828501612b68565b91505092915050565b600060208284031215612e0957612e08613c0c565b5b6000612e1784828501612b7d565b91505092915050565b600060208284031215612e3657612e35613c0c565b5b600082013567ffffffffffffffff811115612e5457612e53613c07565b5b612e6084828501612bc0565b91505092915050565b600060208284031215612e7f57612e7e613c0c565b5b6000612e8d84828501612bee565b91505092915050565b6000612ea28383613315565b60208301905092915050565b612eb781613950565b82525050565b6000612ec8826137cf565b612ed281856137fd565b9350612edd836137bf565b8060005b83811015612f0e578151612ef58882612e96565b9750612f00836137f0565b925050600181019050612ee1565b5085935050505092915050565b612f2481613962565b82525050565b6000612f35826137da565b612f3f818561380e565b9350612f4f8185602086016139d3565b612f5881613c11565b840191505092915050565b6000612f6e826137e5565b612f78818561381f565b9350612f888185602086016139d3565b612f9181613c11565b840191505092915050565b6000612fa7826137e5565b612fb18185613830565b9350612fc18185602086016139d3565b80840191505092915050565b6000612fda602b8361381f565b9150612fe582613c22565b604082019050919050565b6000612ffd60328361381f565b915061300882613c71565b604082019050919050565b600061302060268361381f565b915061302b82613cc0565b604082019050919050565b6000613043601c8361381f565b915061304e82613d0f565b602082019050919050565b600061306660248361381f565b915061307182613d38565b604082019050919050565b600061308960198361381f565b915061309482613d87565b602082019050919050565b60006130ac602c8361381f565b91506130b782613db0565b604082019050919050565b60006130cf602b8361381f565b91506130da82613dff565b604082019050919050565b60006130f260388361381f565b91506130fd82613e4e565b604082019050919050565b6000613115602a8361381f565b915061312082613e9d565b604082019050919050565b600061313860298361381f565b915061314382613eec565b604082019050919050565b600061315b601e8361381f565b915061316682613f3b565b602082019050919050565b600061317e60238361381f565b915061318982613f64565b604082019050919050565b60006131a160208361381f565b91506131ac82613fb3565b602082019050919050565b60006131c4602c8361381f565b91506131cf82613fdc565b604082019050919050565b60006131e760208361381f565b91506131f28261402b565b602082019050919050565b600061320a60298361381f565b915061321582614054565b604082019050919050565b600061322d602f8361381f565b9150613238826140a3565b604082019050919050565b600061325060218361381f565b915061325b826140f2565b604082019050919050565b600061327360168361381f565b915061327e82614141565b602082019050919050565b600061329660318361381f565b91506132a18261416a565b604082019050919050565b60006132b9602c8361381f565b91506132c4826141b9565b604082019050919050565b60006132dc60138361381f565b91506132e782614208565b602082019050919050565b60006132ff60178361381f565b915061330a82614231565b602082019050919050565b61331e816139ba565b82525050565b61332d816139ba565b82525050565b600061333f8285612f9c565b915061334b8284612f9c565b91508190509392505050565b600060208201905061336c6000830184612eae565b92915050565b60006080820190506133876000830187612eae565b6133946020830186612eae565b6133a16040830185613324565b81810360608301526133b38184612f2a565b905095945050505050565b600060208201905081810360008301526133d88184612ebd565b905092915050565b60006020820190506133f56000830184612f1b565b92915050565b600060208201905081810360008301526134158184612f63565b905092915050565b6000602082019050818103600083015261343681612fcd565b9050919050565b6000602082019050818103600083015261345681612ff0565b9050919050565b6000602082019050818103600083015261347681613013565b9050919050565b6000602082019050818103600083015261349681613036565b9050919050565b600060208201905081810360008301526134b681613059565b9050919050565b600060208201905081810360008301526134d68161307c565b9050919050565b600060208201905081810360008301526134f68161309f565b9050919050565b60006020820190508181036000830152613516816130c2565b9050919050565b60006020820190508181036000830152613536816130e5565b9050919050565b6000602082019050818103600083015261355681613108565b9050919050565b600060208201905081810360008301526135768161312b565b9050919050565b600060208201905081810360008301526135968161314e565b9050919050565b600060208201905081810360008301526135b681613171565b9050919050565b600060208201905081810360008301526135d681613194565b9050919050565b600060208201905081810360008301526135f6816131b7565b9050919050565b60006020820190508181036000830152613616816131da565b9050919050565b60006020820190508181036000830152613636816131fd565b9050919050565b6000602082019050818103600083015261365681613220565b9050919050565b6000602082019050818103600083015261367681613243565b9050919050565b6000602082019050818103600083015261369681613266565b9050919050565b600060208201905081810360008301526136b681613289565b9050919050565b600060208201905081810360008301526136d6816132ac565b9050919050565b600060208201905081810360008301526136f6816132cf565b9050919050565b60006020820190508181036000830152613716816132f2565b9050919050565b60006020820190506137326000830184613324565b92915050565b6000613742613753565b905061374e8282613a38565b919050565b6000604051905090565b600067ffffffffffffffff82111561377857613777613bce565b5b61378182613c11565b9050602081019050919050565b600067ffffffffffffffff8211156137a9576137a8613bce565b5b6137b282613c11565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613846826139ba565b9150613851836139ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561388657613885613b12565b5b828201905092915050565b600061389c826139ba565b91506138a7836139ba565b9250826138b7576138b6613b41565b5b828204905092915050565b60006138cd826139ba565b91506138d8836139ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391157613910613b12565b5b828202905092915050565b6000613927826139ba565b9150613932836139ba565b92508282101561394557613944613b12565b5b828203905092915050565b600061395b8261399a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139f15780820151818401526020810190506139d6565b83811115613a00576000848401525b50505050565b60006002820490506001821680613a1e57607f821691505b60208210811415613a3257613a31613b70565b5b50919050565b613a4182613c11565b810181811067ffffffffffffffff82111715613a6057613a5f613bce565b5b80604052505050565b6000613a74826139ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa757613aa6613b12565b5b600182019050919050565b6000613abd826139ba565b9150613ac8836139ba565b925082613ad857613ad7613b41565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e2061646f7074206d696e696d756d20312c206d6178696d756d60008201527f2033302057656972646f73000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d2057656972646f7320737570706c790000600082015250565b7f45746865722076616c75652073656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c652068617320616c726561647920656e64656400000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206861736e2774207374617274656400000000000000000000000000600082015250565b7f4578636565646564206769766561776179206c696d6974000000000000000000600082015250565b61426381613950565b811461426e57600080fd5b50565b61427a81613962565b811461428557600080fd5b50565b6142918161396e565b811461429c57600080fd5b50565b6142a8816139ba565b81146142b357600080fd5b5056fe516d6441347966394a4c3743374e72424a6b4c6575635744576e31486837644870345938527a5061435a4e31474ea264697066735822122010717e3bf7be9dc19f0ab0dd99c8fabd20c4906985d00d318fb953ea612d2e6e64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80636fd9537f11610102578063a40f1aa511610095578063c87b56dd11610064578063c87b56dd1461067c578063d348b409146106b9578063e985e9c5146106e4578063f2fde38b14610721576101d8565b8063a40f1aa5146105e8578063b66a0e5d14610611578063b88d4fde14610628578063bc41c9c614610651576101d8565b8063853828b6116100d1578063853828b61461055f5780638da5cb5b1461056957806395d89b4114610594578063a22cb465146105bf576101d8565b80636fd9537f1461049157806370a08231146104ce578063715018a61461050b5780638462151c14610522576101d8565b806323b872dd1161017a57806355367ba91161014957806355367ba9146103e957806355f804b3146104005780636352211e1461042957806368e1c40214610466576101d8565b806323b872dd1461031d5780632f745c591461034657806342842e0e146103835780634f6ccce7146103ac576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780630c2db981146102ab57806318160ddd146102c75780631c8b232d146102f2576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612dc6565b61074a565b60405161021191906133e0565b60405180910390f35b34801561022657600080fd5b5061022f6107c4565b60405161023c91906133fb565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612e69565b610856565b6040516102799190613357565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612d86565b6108db565b005b6102c560048036038101906102c09190612e69565b6109f3565b005b3480156102d357600080fd5b506102dc610bc1565b6040516102e9919061371d565b60405180910390f35b3480156102fe57600080fd5b50610307610bcb565b60405161031491906133e0565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190612c70565b610bde565b005b34801561035257600080fd5b5061036d60048036038101906103689190612d86565b610c3e565b60405161037a919061371d565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190612c70565b610ce3565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612e69565b610d03565b6040516103e0919061371d565b60405180910390f35b3480156103f557600080fd5b506103fe610d56565b005b34801561040c57600080fd5b5061042760048036038101906104229190612e20565b610def565b005b34801561043557600080fd5b50610450600480360381019061044b9190612e69565b610e85565b60405161045d9190613357565b60405180910390f35b34801561047257600080fd5b5061047b610f37565b604051610488919061371d565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612e69565b610f3d565b6040516104c5919061371d565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612c03565b610f93565b604051610502919061371d565b60405180910390f35b34801561051757600080fd5b5061052061104b565b005b34801561052e57600080fd5b5061054960048036038101906105449190612c03565b611188565b60405161055691906133be565b60405180910390f35b610567611292565b005b34801561057557600080fd5b5061057e61134e565b60405161058b9190613357565b60405180910390f35b3480156105a057600080fd5b506105a9611378565b6040516105b691906133fb565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190612d46565b61140a565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190612e69565b61158b565b005b34801561061d57600080fd5b506106266116a1565b005b34801561063457600080fd5b5061064f600480360381019061064a9190612cc3565b61173a565b005b34801561065d57600080fd5b5061066661179c565b60405161067391906133fb565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612e69565b6117b8565b6040516106b091906133fb565b60405180910390f35b3480156106c557600080fd5b506106ce61185f565b6040516106db919061371d565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190612c30565b6118c5565b60405161071891906133e0565b60405180910390f35b34801561072d57600080fd5b5061074860048036038101906107439190612c03565b611959565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107bd57506107bc82611b05565b5b9050919050565b6060600080546107d390613a06565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90613a06565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b5050505050905090565b600061086182611be7565b6108a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610897906135dd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e682610e85565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061365d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610976611c53565b73ffffffffffffffffffffffffffffffffffffffff1614806109a557506109a48161099f611c53565b6118c5565b5b6109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db9061351d565b60405180910390fd5b6109ee8383611c5b565b505050565b60006109fd610bc1565b90506107cf8110610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061367d565b60405180910390fd5b600960149054906101000a900460ff16610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a89906136dd565b60405180910390fd5b6107cf8282610aa1919061383b565b1115610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad99061357d565b60405180910390fd5b600082118015610af35750601e8211155b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b29906134fd565b60405180910390fd5b81610b3b61185f565b610b4591906138c2565b341015610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e9061359d565b60405180910390fd5b60005b82811015610bbc576000610b9c610bc1565b9050610ba83382611d14565b508080610bb490613a69565b915050610b8a565b505050565b6000600854905090565b600960149054906101000a900460ff1681565b610bef610be9611c53565b82611d32565b610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c259061369d565b60405180910390fd5b610c39838383611e10565b505050565b6000610c4983610f93565b8210610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c819061341d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cfe8383836040518060200160405280600081525061173a565b505050565b6000610d0d610bc1565b8210610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d45906136bd565b60405180910390fd5b819050919050565b610d5e611c53565b73ffffffffffffffffffffffffffffffffffffffff16610d7c61134e565b73ffffffffffffffffffffffffffffffffffffffff1614610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906135fd565b60405180910390fd5b6000600960146101000a81548160ff021916908315150217905550565b610df7611c53565b73ffffffffffffffffffffffffffffffffffffffff16610e1561134e565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906135fd565b60405180910390fd5b80600a9080519060200190610e81929190612a17565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f259061355d565b60405180910390fd5b80915050919050565b6107cf81565b60006107cf8210610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061367d565b60405180910390fd5b6706f05b59d3b200009050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061353d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611053611c53565b73ffffffffffffffffffffffffffffffffffffffff1661107161134e565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be906135fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600061119583610f93565b905060008114156111f257600067ffffffffffffffff8111156111bb576111ba613bce565b5b6040519080825280602002602001820160405280156111e95781602001602082028036833780820191505090505b5091505061128d565b60008167ffffffffffffffff81111561120e5761120d613bce565b5b60405190808252806020026020018201604052801561123c5781602001602082028036833780820191505090505b50905060005b82811015611286576112548582610c3e565b82828151811061126757611266613b9f565b5b602002602001018181525050808061127e90613a69565b915050611242565b5080925050505b919050565b61129a611c53565b73ffffffffffffffffffffffffffffffffffffffff166112b861134e565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611305906135fd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061134c57600080fd5b565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461138790613a06565b80601f01602080910402602001604051908101604052809291908181526020018280546113b390613a06565b80156114005780601f106113d557610100808354040283529160200191611400565b820191906000526020600020905b8154815290600101906020018083116113e357829003601f168201915b5050505050905090565b611412611c53565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906134bd565b60405180910390fd5b806005600061148d611c53565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661153a611c53565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161157f91906133e0565b60405180910390a35050565b611593611c53565b73ffffffffffffffffffffffffffffffffffffffff166115b161134e565b73ffffffffffffffffffffffffffffffffffffffff1614611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe906135fd565b60405180910390fd5b6000611611610bc1565b905060148282611621919061383b565b1115611662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611659906136fd565b60405180910390fd5b60005b8281101561169c5761168961167861134e565b8284611684919061383b565b611d14565b808061169490613a69565b915050611665565b505050565b6116a9611c53565b73ffffffffffffffffffffffffffffffffffffffff166116c761134e565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906135fd565b60405180910390fd5b6001600960146101000a81548160ff021916908315150217905550565b61174b611745611c53565b83611d32565b61178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117819061369d565b60405180910390fd5b6117968484848461206c565b50505050565b6040518060600160405280602e81526020016142b7602e913981565b60606117c382611be7565b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f99061363d565b60405180910390fd5b600061180c6120c8565b9050600081511161182c5760405180602001604052806000815250611857565b806118368461215a565b604051602001611847929190613333565b6040516020818303038152906040525b915050919050565b6000600960149054906101000a900460ff166118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906136dd565b60405180910390fd5b6118c06118bb610bc1565b610f3d565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611961611c53565b73ffffffffffffffffffffffffffffffffffffffff1661197f61134e565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc906135fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c9061345d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bd057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611be05750611bdf826122bb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cce83610e85565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611d2e828260405180602001604052806000815250612325565b5050565b6000611d3d82611be7565b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d73906134dd565b60405180910390fd5b6000611d8783610e85565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df657508373ffffffffffffffffffffffffffffffffffffffff16611dde84610856565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e075750611e0681856118c5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e3082610e85565b73ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d9061361d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed9061349d565b60405180910390fd5b611f01838383612380565b611f0c600082611c5b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5c919061391c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb3919061383b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612077848484611e10565b612083848484846124ae565b6120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99061343d565b60405180910390fd5b50505050565b6060600a80546120d790613a06565b80601f016020809104026020016040519081016040528092919081815260200182805461210390613a06565b80156121505780601f1061212557610100808354040283529160200191612150565b820191906000526020600020905b81548152906001019060200180831161213357829003601f168201915b5050505050905090565b606060008214156121a2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b6565b600082905060005b600082146121d45780806121bd90613a69565b915050600a826121cd9190613891565b91506121aa565b60008167ffffffffffffffff8111156121f0576121ef613bce565b5b6040519080825280601f01601f1916602001820160405280156122225781602001600182028036833780820191505090505b5090505b600085146122af5760018261223b919061391c565b9150600a8561224a9190613ab2565b6030612256919061383b565b60f81b81838151811061226c5761226b613b9f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a89190613891565b9450612226565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232f8383612645565b61233c60008484846124ae565b61237b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123729061343d565b60405180910390fd5b505050565b61238b838383612813565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123f15760085481146123d2576123d1613ae3565b5b6001600860008282546123e5919061383b565b92505081905550612430565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461242f5761242e8382612818565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246a576124a9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124a8576124a78282612985565b5b5b505050565b60006124cf8473ffffffffffffffffffffffffffffffffffffffff16612a04565b15612638578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124f8611c53565b8786866040518563ffffffff1660e01b815260040161251a9493929190613372565b602060405180830381600087803b15801561253457600080fd5b505af192505050801561256557506040513d601f19601f820116820180604052508101906125629190612df3565b60015b6125e8573d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b506000815114156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d79061343d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061263d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac906135bd565b60405180910390fd5b6126be81611be7565b156126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f59061347d565b60405180910390fd5b61270a60008383612380565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461275a919061383b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6000600161282584610f93565b61282f919061391c565b9050600060076000848152602001908152602001600020549050818114612914576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600061299083610f93565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612a2390613a06565b90600052602060002090601f016020900481019282612a455760008555612a8c565b82601f10612a5e57805160ff1916838001178555612a8c565b82800160010185558215612a8c579182015b82811115612a8b578251825591602001919060010190612a70565b5b509050612a999190612a9d565b5090565b5b80821115612ab6576000816000905550600101612a9e565b5090565b6000612acd612ac88461375d565b613738565b905082815260208101848484011115612ae957612ae8613c02565b5b612af48482856139c4565b509392505050565b6000612b0f612b0a8461378e565b613738565b905082815260208101848484011115612b2b57612b2a613c02565b5b612b368482856139c4565b509392505050565b600081359050612b4d8161425a565b92915050565b600081359050612b6281614271565b92915050565b600081359050612b7781614288565b92915050565b600081519050612b8c81614288565b92915050565b600082601f830112612ba757612ba6613bfd565b5b8135612bb7848260208601612aba565b91505092915050565b600082601f830112612bd557612bd4613bfd565b5b8135612be5848260208601612afc565b91505092915050565b600081359050612bfd8161429f565b92915050565b600060208284031215612c1957612c18613c0c565b5b6000612c2784828501612b3e565b91505092915050565b60008060408385031215612c4757612c46613c0c565b5b6000612c5585828601612b3e565b9250506020612c6685828601612b3e565b9150509250929050565b600080600060608486031215612c8957612c88613c0c565b5b6000612c9786828701612b3e565b9350506020612ca886828701612b3e565b9250506040612cb986828701612bee565b9150509250925092565b60008060008060808587031215612cdd57612cdc613c0c565b5b6000612ceb87828801612b3e565b9450506020612cfc87828801612b3e565b9350506040612d0d87828801612bee565b925050606085013567ffffffffffffffff811115612d2e57612d2d613c07565b5b612d3a87828801612b92565b91505092959194509250565b60008060408385031215612d5d57612d5c613c0c565b5b6000612d6b85828601612b3e565b9250506020612d7c85828601612b53565b9150509250929050565b60008060408385031215612d9d57612d9c613c0c565b5b6000612dab85828601612b3e565b9250506020612dbc85828601612bee565b9150509250929050565b600060208284031215612ddc57612ddb613c0c565b5b6000612dea84828501612b68565b91505092915050565b600060208284031215612e0957612e08613c0c565b5b6000612e1784828501612b7d565b91505092915050565b600060208284031215612e3657612e35613c0c565b5b600082013567ffffffffffffffff811115612e5457612e53613c07565b5b612e6084828501612bc0565b91505092915050565b600060208284031215612e7f57612e7e613c0c565b5b6000612e8d84828501612bee565b91505092915050565b6000612ea28383613315565b60208301905092915050565b612eb781613950565b82525050565b6000612ec8826137cf565b612ed281856137fd565b9350612edd836137bf565b8060005b83811015612f0e578151612ef58882612e96565b9750612f00836137f0565b925050600181019050612ee1565b5085935050505092915050565b612f2481613962565b82525050565b6000612f35826137da565b612f3f818561380e565b9350612f4f8185602086016139d3565b612f5881613c11565b840191505092915050565b6000612f6e826137e5565b612f78818561381f565b9350612f888185602086016139d3565b612f9181613c11565b840191505092915050565b6000612fa7826137e5565b612fb18185613830565b9350612fc18185602086016139d3565b80840191505092915050565b6000612fda602b8361381f565b9150612fe582613c22565b604082019050919050565b6000612ffd60328361381f565b915061300882613c71565b604082019050919050565b600061302060268361381f565b915061302b82613cc0565b604082019050919050565b6000613043601c8361381f565b915061304e82613d0f565b602082019050919050565b600061306660248361381f565b915061307182613d38565b604082019050919050565b600061308960198361381f565b915061309482613d87565b602082019050919050565b60006130ac602c8361381f565b91506130b782613db0565b604082019050919050565b60006130cf602b8361381f565b91506130da82613dff565b604082019050919050565b60006130f260388361381f565b91506130fd82613e4e565b604082019050919050565b6000613115602a8361381f565b915061312082613e9d565b604082019050919050565b600061313860298361381f565b915061314382613eec565b604082019050919050565b600061315b601e8361381f565b915061316682613f3b565b602082019050919050565b600061317e60238361381f565b915061318982613f64565b604082019050919050565b60006131a160208361381f565b91506131ac82613fb3565b602082019050919050565b60006131c4602c8361381f565b91506131cf82613fdc565b604082019050919050565b60006131e760208361381f565b91506131f28261402b565b602082019050919050565b600061320a60298361381f565b915061321582614054565b604082019050919050565b600061322d602f8361381f565b9150613238826140a3565b604082019050919050565b600061325060218361381f565b915061325b826140f2565b604082019050919050565b600061327360168361381f565b915061327e82614141565b602082019050919050565b600061329660318361381f565b91506132a18261416a565b604082019050919050565b60006132b9602c8361381f565b91506132c4826141b9565b604082019050919050565b60006132dc60138361381f565b91506132e782614208565b602082019050919050565b60006132ff60178361381f565b915061330a82614231565b602082019050919050565b61331e816139ba565b82525050565b61332d816139ba565b82525050565b600061333f8285612f9c565b915061334b8284612f9c565b91508190509392505050565b600060208201905061336c6000830184612eae565b92915050565b60006080820190506133876000830187612eae565b6133946020830186612eae565b6133a16040830185613324565b81810360608301526133b38184612f2a565b905095945050505050565b600060208201905081810360008301526133d88184612ebd565b905092915050565b60006020820190506133f56000830184612f1b565b92915050565b600060208201905081810360008301526134158184612f63565b905092915050565b6000602082019050818103600083015261343681612fcd565b9050919050565b6000602082019050818103600083015261345681612ff0565b9050919050565b6000602082019050818103600083015261347681613013565b9050919050565b6000602082019050818103600083015261349681613036565b9050919050565b600060208201905081810360008301526134b681613059565b9050919050565b600060208201905081810360008301526134d68161307c565b9050919050565b600060208201905081810360008301526134f68161309f565b9050919050565b60006020820190508181036000830152613516816130c2565b9050919050565b60006020820190508181036000830152613536816130e5565b9050919050565b6000602082019050818103600083015261355681613108565b9050919050565b600060208201905081810360008301526135768161312b565b9050919050565b600060208201905081810360008301526135968161314e565b9050919050565b600060208201905081810360008301526135b681613171565b9050919050565b600060208201905081810360008301526135d681613194565b9050919050565b600060208201905081810360008301526135f6816131b7565b9050919050565b60006020820190508181036000830152613616816131da565b9050919050565b60006020820190508181036000830152613636816131fd565b9050919050565b6000602082019050818103600083015261365681613220565b9050919050565b6000602082019050818103600083015261367681613243565b9050919050565b6000602082019050818103600083015261369681613266565b9050919050565b600060208201905081810360008301526136b681613289565b9050919050565b600060208201905081810360008301526136d6816132ac565b9050919050565b600060208201905081810360008301526136f6816132cf565b9050919050565b60006020820190508181036000830152613716816132f2565b9050919050565b60006020820190506137326000830184613324565b92915050565b6000613742613753565b905061374e8282613a38565b919050565b6000604051905090565b600067ffffffffffffffff82111561377857613777613bce565b5b61378182613c11565b9050602081019050919050565b600067ffffffffffffffff8211156137a9576137a8613bce565b5b6137b282613c11565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613846826139ba565b9150613851836139ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561388657613885613b12565b5b828201905092915050565b600061389c826139ba565b91506138a7836139ba565b9250826138b7576138b6613b41565b5b828204905092915050565b60006138cd826139ba565b91506138d8836139ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391157613910613b12565b5b828202905092915050565b6000613927826139ba565b9150613932836139ba565b92508282101561394557613944613b12565b5b828203905092915050565b600061395b8261399a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139f15780820151818401526020810190506139d6565b83811115613a00576000848401525b50505050565b60006002820490506001821680613a1e57607f821691505b60208210811415613a3257613a31613b70565b5b50919050565b613a4182613c11565b810181811067ffffffffffffffff82111715613a6057613a5f613bce565b5b80604052505050565b6000613a74826139ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa757613aa6613b12565b5b600182019050919050565b6000613abd826139ba565b9150613ac8836139ba565b925082613ad857613ad7613b41565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e2061646f7074206d696e696d756d20312c206d6178696d756d60008201527f2033302057656972646f73000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d2057656972646f7320737570706c790000600082015250565b7f45746865722076616c75652073656e742069732062656c6f772074686520707260008201527f6963650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c652068617320616c726561647920656e64656400000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c65206861736e2774207374617274656400000000000000000000000000600082015250565b7f4578636565646564206769766561776179206c696d6974000000000000000000600082015250565b61426381613950565b811461426e57600080fd5b50565b61427a81613962565b811461428557600080fd5b50565b6142918161396e565b811461429c57600080fd5b50565b6142a8816139ba565b81146142b357600080fd5b5056fe516d6441347966394a4c3743374e72424a6b4c6575635744576e31486837644870345938527a5061435a4e31474ea264697066735822122010717e3bf7be9dc19f0ab0dd99c8fabd20c4906985d00d318fb953ea612d2e6e64736f6c63430008070033
Deployed Bytecode Sourcemap
39000:3010:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35523:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23887:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25354:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24884:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40393:693;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36129:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39333:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26244:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35814:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26620:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36297:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41396:79;;;;;;;;;;;;;:::i;:::-;;41202:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23581:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39117:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40181:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23311:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2681:148;;;;;;;;;;;;;:::i;:::-;;39503:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41483:123;;;:::i;:::-;;2030:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24056:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25647:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41691:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41310:78;;;;;;;;;;;;;:::i;:::-;;26842:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39216:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24231:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40000:173;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26013:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2984:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35523:224;35625:4;35664:35;35649:50;;;:11;:50;;;;:90;;;;35703:36;35727:11;35703:23;:36::i;:::-;35649:90;35642:97;;35523:224;;;:::o;23887:100::-;23941:13;23974:5;23967:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23887:100;:::o;25354:221::-;25430:7;25458:16;25466:7;25458;:16::i;:::-;25450:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25543:15;:24;25559:7;25543:24;;;;;;;;;;;;;;;;;;;;;25536:31;;25354:221;;;:::o;24884:404::-;24965:13;24981:23;24996:7;24981:14;:23::i;:::-;24965:39;;25029:5;25023:11;;:2;:11;;;;25015:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25109:5;25093:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;25118:44;25142:5;25149:12;:10;:12::i;:::-;25118:23;:44::i;:::-;25093:69;25085:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;25259:21;25268:2;25272:7;25259:8;:21::i;:::-;24954:334;24884:404;;:::o;40393:693::-;40457:17;40477:13;:11;:13::i;:::-;40457:33;;39159:4;40509:12;:33;40501:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40588:14;;;;;;;;;;;40580:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;39159:4;40660:9;40645:12;:24;;;;:::i;:::-;:46;;40637:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40757:1;40745:9;:13;:32;;;;;40775:2;40762:9;:15;;40745:32;40737:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;40876:9;40857:16;:14;:16::i;:::-;:28;;;;:::i;:::-;40844:9;:41;;40836:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40943:6;40938:141;40959:9;40955:1;:13;40938:141;;;40990:14;41007:13;:11;:13::i;:::-;40990:30;;41035:32;41045:10;41057:9;41035;:32::i;:::-;40975:104;40970:3;;;;;:::i;:::-;;;;40938:141;;;;40446:640;40393:693;:::o;36129:108::-;36190:7;36217:12;;36210:19;;36129:108;:::o;39333:34::-;;;;;;;;;;;;;:::o;26244:305::-;26405:41;26424:12;:10;:12::i;:::-;26438:7;26405:18;:41::i;:::-;26397:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26513:28;26523:4;26529:2;26533:7;26513:9;:28::i;:::-;26244:305;;;:::o;35814:256::-;35911:7;35947:23;35964:5;35947:16;:23::i;:::-;35939:5;:31;35931:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:12;:19;36049:5;36036:19;;;;;;;;;;;;;;;:26;36056:5;36036:26;;;;;;;;;;;;36029:33;;35814:256;;;;:::o;26620:151::-;26724:39;26741:4;26747:2;26751:7;26724:39;;;;;;;;;;;;:16;:39::i;:::-;26620:151;;;:::o;36297:221::-;36369:4;36402:36;:34;:36::i;:::-;36394:5;:44;36386:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:5;36498:12;;36297:221;;;:::o;41396:79::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41462:5:::1;41445:14;;:22;;;;;;;;;;;;;;;;;;41396:79::o:0;41202:100::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41285:9:::1;41275:7;:19;;;;;;;;;;;;:::i;:::-;;41202:100:::0;:::o;23581:239::-;23653:7;23673:13;23689:7;:16;23697:7;23689:16;;;;;;;;;;;;;;;;;;;;;23673:32;;23741:1;23724:19;;:5;:19;;;;23716:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23807:5;23800:12;;;23581:239;;;:::o;39117:46::-;39159:4;39117:46;:::o;40181:204::-;40244:4;39159;40269:3;:24;40261:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40338:9;40331:16;;40181:204;;;:::o;23311:208::-;23383:7;23428:1;23411:19;;:5;:19;;;;23403:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23495:9;:16;23505:5;23495:16;;;;;;;;;;;;;;;;23488:23;;23311:208;;;:::o;2681:148::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2788:1:::1;2751:40;;2772:6;;;;;;;;;;;2751:40;;;;;;;;;;;;2819:1;2802:6;;:19;;;;;;;;;;;;;;;;;;2681:148::o:0;39503:489::-;39565:13;39591:15;39609:17;39619:6;39609:9;:17::i;:::-;39591:35;;39655:1;39641:10;:15;39637:348;;;39691:1;39680:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39673:20;;;;;39637:348;39751:20;39785:10;39774:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39751:45;;39816:10;39811:135;39840:10;39832:5;:18;39811:135;;;39896:34;39916:6;39924:5;39896:19;:34::i;:::-;39880:6;39887:5;39880:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;39852:7;;;;;:::i;:::-;;;;39811:135;;;;39967:6;39960:13;;;;39503:489;;;;:::o;41483:123::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41558:10:::1;41550:24;;:47;41575:21;41550:47;;;;;;;;;;;;;;;;;;;;;;;41542:56;;;::::0;::::1;;41483:123::o:0;2030:87::-;2076:7;2103:6;;;;;;;;;;;2096:13;;2030:87;:::o;24056:104::-;24112:13;24145:7;24138:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24056:104;:::o;25647:295::-;25762:12;:10;:12::i;:::-;25750:24;;:8;:24;;;;25742:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25862:8;25817:18;:32;25836:12;:10;:12::i;:::-;25817:32;;;;;;;;;;;;;;;:42;25850:8;25817:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25915:8;25886:48;;25901:12;:10;:12::i;:::-;25886:48;;;25925:8;25886:48;;;;;;:::i;:::-;;;;;;;;25647:295;;:::o;41691:316::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41760:18:::1;41781:13;:11;:13::i;:::-;41760:34;;41842:2;41829:9;41813:13;:25;;;;:::i;:::-;:31;;41805:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41888:10;41883:117;41912:9;41904:5;:17;41883:117;;;41947:41;41957:7;:5;:7::i;:::-;41982:5;41966:13;:21;;;;:::i;:::-;41947:9;:41::i;:::-;41923:7;;;;;:::i;:::-;;;;41883:117;;;;41749:258;41691:316:::0;:::o;41310:78::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41376:4:::1;41359:14;;:21;;;;;;;;;;;;;;;;;;41310:78::o:0;26842:285::-;26974:41;26993:12;:10;:12::i;:::-;27007:7;26974:18;:41::i;:::-;26966:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27080:39;27094:4;27100:2;27104:7;27113:5;27080:13;:39::i;:::-;26842:285;;;;:::o;39216:87::-;;;;;;;;;;;;;;;;;;;:::o;24231:360::-;24304:13;24338:16;24346:7;24338;:16::i;:::-;24330:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24419:21;24443:10;:8;:10::i;:::-;24419:34;;24495:1;24477:7;24471:21;:25;:112;;;;;;;;;;;;;;;;;24536:7;24545:18;:7;:16;:18::i;:::-;24519:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24471:112;24464:119;;;24231:360;;;:::o;40000:173::-;40047:4;40072:14;;;;;;;;;;;40064:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;40128:37;40151:13;:11;:13::i;:::-;40128:22;:37::i;:::-;40121:44;;40000:173;:::o;26013:164::-;26110:4;26134:18;:25;26153:5;26134:25;;;;;;;;;;;;;;;:35;26160:8;26134:35;;;;;;;;;;;;;;;;;;;;;;;;;26127:42;;26013:164;;;;:::o;2984:244::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3093:1:::1;3073:22;;:8;:22;;;;3065:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3183:8;3154:38;;3175:6;;;;;;;;;;;3154:38;;;;;;;;;;;;3212:8;3203:6;;:17;;;;;;;;;;;;;;;;;;2984:244:::0;:::o;22955:292::-;23057:4;23096:25;23081:40;;;:11;:40;;;;:105;;;;23153:33;23138:48;;;:11;:48;;;;23081:105;:158;;;;23203:36;23227:11;23203:23;:36::i;:::-;23081:158;23074:165;;22955:292;;;:::o;28594:127::-;28659:4;28711:1;28683:30;;:7;:16;28691:7;28683:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28676:37;;28594:127;;;:::o;672:98::-;725:7;752:10;745:17;;672:98;:::o;32478:174::-;32580:2;32553:15;:24;32569:7;32553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32636:7;32632:2;32598:46;;32607:23;32622:7;32607:14;:23::i;:::-;32598:46;;;;;;;;;;;;32478:174;;:::o;29585:110::-;29661:26;29671:2;29675:7;29661:26;;;;;;;;;;;;:9;:26::i;:::-;29585:110;;:::o;28888:355::-;28981:4;29006:16;29014:7;29006;:16::i;:::-;28998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29082:13;29098:23;29113:7;29098:14;:23::i;:::-;29082:39;;29151:5;29140:16;;:7;:16;;;:51;;;;29184:7;29160:31;;:20;29172:7;29160:11;:20::i;:::-;:31;;;29140:51;:94;;;;29195:39;29219:5;29226:7;29195:23;:39::i;:::-;29140:94;29132:103;;;28888:355;;;;:::o;31816:544::-;31941:4;31914:31;;:23;31929:7;31914:14;:23::i;:::-;:31;;;31906:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32024:1;32010:16;;:2;:16;;;;32002:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32080:39;32101:4;32107:2;32111:7;32080:20;:39::i;:::-;32184:29;32201:1;32205:7;32184:8;:29::i;:::-;32245:1;32226:9;:15;32236:4;32226:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32274:1;32257:9;:13;32267:2;32257:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32305:2;32286:7;:16;32294:7;32286:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32344:7;32340:2;32325:27;;32334:4;32325:27;;;;;;;;;;;;31816:544;;;:::o;28009:272::-;28123:28;28133:4;28139:2;28143:7;28123:9;:28::i;:::-;28170:48;28193:4;28199:2;28203:7;28212:5;28170:22;:48::i;:::-;28162:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28009:272;;;;:::o;41094:100::-;41146:13;41179:7;41172:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41094:100;:::o;19101:723::-;19157:13;19387:1;19378:5;:10;19374:53;;;19405:10;;;;;;;;;;;;;;;;;;;;;19374:53;19437:12;19452:5;19437:20;;19468:14;19493:78;19508:1;19500:4;:9;19493:78;;19526:8;;;;;:::i;:::-;;;;19557:2;19549:10;;;;;:::i;:::-;;;19493:78;;;19581:19;19613:6;19603:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19581:39;;19631:154;19647:1;19638:5;:10;19631:154;;19675:1;19665:11;;;;;:::i;:::-;;;19742:2;19734:5;:10;;;;:::i;:::-;19721:2;:24;;;;:::i;:::-;19708:39;;19691:6;19698;19691:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19771:2;19762:11;;;;;:::i;:::-;;;19631:154;;;19809:6;19795:21;;;;;19101:723;;;;:::o;21556:157::-;21641:4;21680:25;21665:40;;;:11;:40;;;;21658:47;;21556:157;;;:::o;29922:250::-;30018:18;30024:2;30028:7;30018:5;:18::i;:::-;30055:54;30086:1;30090:2;30094:7;30103:5;30055:22;:54::i;:::-;30047:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;29922:250;;;:::o;36609:617::-;36750:45;36777:4;36783:2;36787:7;36750:26;:45::i;:::-;36828:1;36812:18;;:4;:18;;;36808:249;;;36865:12;;36854:7;:23;36847:31;;;;:::i;:::-;;36948:1;36932:12;;:17;;;;;;;:::i;:::-;;;;;;;;36808:249;;;36979:2;36971:10;;:4;:10;;;36967:90;;36998:47;37031:4;37037:7;36998:32;:47::i;:::-;36967:90;36808:249;37087:1;37073:16;;:2;:16;;;37069:150;;;;;;37146:4;37140:10;;:2;:10;;;37136:83;;37167:40;37195:2;37199:7;37167:27;:40::i;:::-;37136:83;37069:150;36609:617;;;:::o;33217:843::-;33338:4;33364:15;:2;:13;;;:15::i;:::-;33360:693;;;33416:2;33400:36;;;33437:12;:10;:12::i;:::-;33451:4;33457:7;33466:5;33400:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33396:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33663:1;33646:6;:13;:18;33642:341;;;33689:60;;;;;;;;;;:::i;:::-;;;;;;;;33642:341;33933:6;33927:13;33918:6;33914:2;33910:15;33903:38;33396:602;33533:45;;;33523:55;;;:6;:55;;;;33516:62;;;;;33360:693;34037:4;34030:11;;33217:843;;;;;;;:::o;30508:382::-;30602:1;30588:16;;:2;:16;;;;30580:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30661:16;30669:7;30661;:16::i;:::-;30660:17;30652:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30723:45;30752:1;30756:2;30760:7;30723:20;:45::i;:::-;30798:1;30781:9;:13;30791:2;30781:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30829:2;30810:7;:16;30818:7;30810:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30874:7;30870:2;30849:33;;30866:1;30849:33;;;;;;;;;;;;30508:382;;:::o;34673:93::-;;;;:::o;38017:976::-;38280:19;38327:1;38302:22;38319:4;38302:16;:22::i;:::-;:26;;;;:::i;:::-;38280:48;;38339:15;38357:17;:26;38375:7;38357:26;;;;;;;;;;;;38339:44;;38504:14;38490:10;:28;38486:325;;38535:16;38554:12;:18;38567:4;38554:18;;;;;;;;;;;;;;;:34;38573:14;38554:34;;;;;;;;;;;;38535:53;;38638:11;38605:12;:18;38618:4;38605:18;;;;;;;;;;;;;;;:30;38624:10;38605:30;;;;;;;;;;;:44;;;;38755:10;38722:17;:30;38740:11;38722:30;;;;;;;;;;;:43;;;;38520:291;38486:325;38907:17;:26;38925:7;38907:26;;;;;;;;;;;38900:33;;;38951:12;:18;38964:4;38951:18;;;;;;;;;;;;;;;:34;38970:14;38951:34;;;;;;;;;;;38944:41;;;38095:898;;38017:976;;:::o;37524:215::-;37606:11;37620:20;37637:2;37620:16;:20::i;:::-;37606:34;;37678:7;37651:12;:16;37664:2;37651:16;;;;;;;;;;;;;;;:24;37668:6;37651:24;;;;;;;;;;;:34;;;;37725:6;37696:17;:26;37714:7;37696:26;;;;;;;;;;;:35;;;;37595:144;37524:215;;:::o;11620:422::-;11680:4;11888:12;11999:7;11987:20;11979:28;;12033:1;12026:4;:8;12019:15;;;11620:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:179::-;7227:10;7248:46;7290:3;7282:6;7248:46;:::i;:::-;7326:4;7321:3;7317:14;7303:28;;7158:179;;;;:::o;7343:118::-;7430:24;7448:5;7430:24;:::i;:::-;7425:3;7418:37;7343:118;;:::o;7497:732::-;7616:3;7645:54;7693:5;7645:54;:::i;:::-;7715:86;7794:6;7789:3;7715:86;:::i;:::-;7708:93;;7825:56;7875:5;7825:56;:::i;:::-;7904:7;7935:1;7920:284;7945:6;7942:1;7939:13;7920:284;;;8021:6;8015:13;8048:63;8107:3;8092:13;8048:63;:::i;:::-;8041:70;;8134:60;8187:6;8134:60;:::i;:::-;8124:70;;7980:224;7967:1;7964;7960:9;7955:14;;7920:284;;;7924:14;8220:3;8213:10;;7621:608;;;7497:732;;;;:::o;8235:109::-;8316:21;8331:5;8316:21;:::i;:::-;8311:3;8304:34;8235:109;;:::o;8350:360::-;8436:3;8464:38;8496:5;8464:38;:::i;:::-;8518:70;8581:6;8576:3;8518:70;:::i;:::-;8511:77;;8597:52;8642:6;8637:3;8630:4;8623:5;8619:16;8597:52;:::i;:::-;8674:29;8696:6;8674:29;:::i;:::-;8669:3;8665:39;8658:46;;8440:270;8350:360;;;;:::o;8716:364::-;8804:3;8832:39;8865:5;8832:39;:::i;:::-;8887:71;8951:6;8946:3;8887:71;:::i;:::-;8880:78;;8967:52;9012:6;9007:3;9000:4;8993:5;8989:16;8967:52;:::i;:::-;9044:29;9066:6;9044:29;:::i;:::-;9039:3;9035:39;9028:46;;8808:272;8716:364;;;;:::o;9086:377::-;9192:3;9220:39;9253:5;9220:39;:::i;:::-;9275:89;9357:6;9352:3;9275:89;:::i;:::-;9268:96;;9373:52;9418:6;9413:3;9406:4;9399:5;9395:16;9373:52;:::i;:::-;9450:6;9445:3;9441:16;9434:23;;9196:267;9086:377;;;;:::o;9469:366::-;9611:3;9632:67;9696:2;9691:3;9632:67;:::i;:::-;9625:74;;9708:93;9797:3;9708:93;:::i;:::-;9826:2;9821:3;9817:12;9810:19;;9469:366;;;:::o;9841:::-;9983:3;10004:67;10068:2;10063:3;10004:67;:::i;:::-;9997:74;;10080:93;10169:3;10080:93;:::i;:::-;10198:2;10193:3;10189:12;10182:19;;9841:366;;;:::o;10213:::-;10355:3;10376:67;10440:2;10435:3;10376:67;:::i;:::-;10369:74;;10452:93;10541:3;10452:93;:::i;:::-;10570:2;10565:3;10561:12;10554:19;;10213:366;;;:::o;10585:::-;10727:3;10748:67;10812:2;10807:3;10748:67;:::i;:::-;10741:74;;10824:93;10913:3;10824:93;:::i;:::-;10942:2;10937:3;10933:12;10926:19;;10585:366;;;:::o;10957:::-;11099:3;11120:67;11184:2;11179:3;11120:67;:::i;:::-;11113:74;;11196:93;11285:3;11196:93;:::i;:::-;11314:2;11309:3;11305:12;11298:19;;10957:366;;;:::o;11329:::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11329:366;;;:::o;11701:::-;11843:3;11864:67;11928:2;11923:3;11864:67;:::i;:::-;11857:74;;11940:93;12029:3;11940:93;:::i;:::-;12058:2;12053:3;12049:12;12042:19;;11701:366;;;:::o;12073:::-;12215:3;12236:67;12300:2;12295:3;12236:67;:::i;:::-;12229:74;;12312:93;12401:3;12312:93;:::i;:::-;12430:2;12425:3;12421:12;12414:19;;12073:366;;;:::o;12445:::-;12587:3;12608:67;12672:2;12667:3;12608:67;:::i;:::-;12601:74;;12684:93;12773:3;12684:93;:::i;:::-;12802:2;12797:3;12793:12;12786:19;;12445:366;;;:::o;12817:::-;12959:3;12980:67;13044:2;13039:3;12980:67;:::i;:::-;12973:74;;13056:93;13145:3;13056:93;:::i;:::-;13174:2;13169:3;13165:12;13158:19;;12817:366;;;:::o;13189:::-;13331:3;13352:67;13416:2;13411:3;13352:67;:::i;:::-;13345:74;;13428:93;13517:3;13428:93;:::i;:::-;13546:2;13541:3;13537:12;13530:19;;13189:366;;;:::o;13561:::-;13703:3;13724:67;13788:2;13783:3;13724:67;:::i;:::-;13717:74;;13800:93;13889:3;13800:93;:::i;:::-;13918:2;13913:3;13909:12;13902:19;;13561:366;;;:::o;13933:::-;14075:3;14096:67;14160:2;14155:3;14096:67;:::i;:::-;14089:74;;14172:93;14261:3;14172:93;:::i;:::-;14290:2;14285:3;14281:12;14274:19;;13933:366;;;:::o;14305:::-;14447:3;14468:67;14532:2;14527:3;14468:67;:::i;:::-;14461:74;;14544:93;14633:3;14544:93;:::i;:::-;14662:2;14657:3;14653:12;14646:19;;14305:366;;;:::o;14677:::-;14819:3;14840:67;14904:2;14899:3;14840:67;:::i;:::-;14833:74;;14916:93;15005:3;14916:93;:::i;:::-;15034:2;15029:3;15025:12;15018:19;;14677:366;;;:::o;15049:::-;15191:3;15212:67;15276:2;15271:3;15212:67;:::i;:::-;15205:74;;15288:93;15377:3;15288:93;:::i;:::-;15406:2;15401:3;15397:12;15390:19;;15049:366;;;:::o;15421:::-;15563:3;15584:67;15648:2;15643:3;15584:67;:::i;:::-;15577:74;;15660:93;15749:3;15660:93;:::i;:::-;15778:2;15773:3;15769:12;15762:19;;15421:366;;;:::o;15793:::-;15935:3;15956:67;16020:2;16015:3;15956:67;:::i;:::-;15949:74;;16032:93;16121:3;16032:93;:::i;:::-;16150:2;16145:3;16141:12;16134:19;;15793:366;;;:::o;16165:::-;16307:3;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16404:93;16493:3;16404:93;:::i;:::-;16522:2;16517:3;16513:12;16506:19;;16165:366;;;:::o;16537:::-;16679:3;16700:67;16764:2;16759:3;16700:67;:::i;:::-;16693:74;;16776:93;16865:3;16776:93;:::i;:::-;16894:2;16889:3;16885:12;16878:19;;16537:366;;;:::o;16909:::-;17051:3;17072:67;17136:2;17131:3;17072:67;:::i;:::-;17065:74;;17148:93;17237:3;17148:93;:::i;:::-;17266:2;17261:3;17257:12;17250:19;;16909:366;;;:::o;17281:::-;17423:3;17444:67;17508:2;17503:3;17444:67;:::i;:::-;17437:74;;17520:93;17609:3;17520:93;:::i;:::-;17638:2;17633:3;17629:12;17622:19;;17281:366;;;:::o;17653:::-;17795:3;17816:67;17880:2;17875:3;17816:67;:::i;:::-;17809:74;;17892:93;17981:3;17892:93;:::i;:::-;18010:2;18005:3;18001:12;17994:19;;17653:366;;;:::o;18025:::-;18167:3;18188:67;18252:2;18247:3;18188:67;:::i;:::-;18181:74;;18264:93;18353:3;18264:93;:::i;:::-;18382:2;18377:3;18373:12;18366:19;;18025:366;;;:::o;18397:108::-;18474:24;18492:5;18474:24;:::i;:::-;18469:3;18462:37;18397:108;;:::o;18511:118::-;18598:24;18616:5;18598:24;:::i;:::-;18593:3;18586:37;18511:118;;:::o;18635:435::-;18815:3;18837:95;18928:3;18919:6;18837:95;:::i;:::-;18830:102;;18949:95;19040:3;19031:6;18949:95;:::i;:::-;18942:102;;19061:3;19054:10;;18635:435;;;;;:::o;19076:222::-;19169:4;19207:2;19196:9;19192:18;19184:26;;19220:71;19288:1;19277:9;19273:17;19264:6;19220:71;:::i;:::-;19076:222;;;;:::o;19304:640::-;19499:4;19537:3;19526:9;19522:19;19514:27;;19551:71;19619:1;19608:9;19604:17;19595:6;19551:71;:::i;:::-;19632:72;19700:2;19689:9;19685:18;19676:6;19632:72;:::i;:::-;19714;19782:2;19771:9;19767:18;19758:6;19714:72;:::i;:::-;19833:9;19827:4;19823:20;19818:2;19807:9;19803:18;19796:48;19861:76;19932:4;19923:6;19861:76;:::i;:::-;19853:84;;19304:640;;;;;;;:::o;19950:373::-;20093:4;20131:2;20120:9;20116:18;20108:26;;20180:9;20174:4;20170:20;20166:1;20155:9;20151:17;20144:47;20208:108;20311:4;20302:6;20208:108;:::i;:::-;20200:116;;19950:373;;;;:::o;20329:210::-;20416:4;20454:2;20443:9;20439:18;20431:26;;20467:65;20529:1;20518:9;20514:17;20505:6;20467:65;:::i;:::-;20329:210;;;;:::o;20545:313::-;20658:4;20696:2;20685:9;20681:18;20673:26;;20745:9;20739:4;20735:20;20731:1;20720:9;20716:17;20709:47;20773:78;20846:4;20837:6;20773:78;:::i;:::-;20765:86;;20545:313;;;;:::o;20864:419::-;21030:4;21068:2;21057:9;21053:18;21045:26;;21117:9;21111:4;21107:20;21103:1;21092:9;21088:17;21081:47;21145:131;21271:4;21145:131;:::i;:::-;21137:139;;20864:419;;;:::o;21289:::-;21455:4;21493:2;21482:9;21478:18;21470:26;;21542:9;21536:4;21532:20;21528:1;21517:9;21513:17;21506:47;21570:131;21696:4;21570:131;:::i;:::-;21562:139;;21289:419;;;:::o;21714:::-;21880:4;21918:2;21907:9;21903:18;21895:26;;21967:9;21961:4;21957:20;21953:1;21942:9;21938:17;21931:47;21995:131;22121:4;21995:131;:::i;:::-;21987:139;;21714:419;;;:::o;22139:::-;22305:4;22343:2;22332:9;22328:18;22320:26;;22392:9;22386:4;22382:20;22378:1;22367:9;22363:17;22356:47;22420:131;22546:4;22420:131;:::i;:::-;22412:139;;22139:419;;;:::o;22564:::-;22730:4;22768:2;22757:9;22753:18;22745:26;;22817:9;22811:4;22807:20;22803:1;22792:9;22788:17;22781:47;22845:131;22971:4;22845:131;:::i;:::-;22837:139;;22564:419;;;:::o;22989:::-;23155:4;23193:2;23182:9;23178:18;23170:26;;23242:9;23236:4;23232:20;23228:1;23217:9;23213:17;23206:47;23270:131;23396:4;23270:131;:::i;:::-;23262:139;;22989:419;;;:::o;23414:::-;23580:4;23618:2;23607:9;23603:18;23595:26;;23667:9;23661:4;23657:20;23653:1;23642:9;23638:17;23631:47;23695:131;23821:4;23695:131;:::i;:::-;23687:139;;23414:419;;;:::o;23839:::-;24005:4;24043:2;24032:9;24028:18;24020:26;;24092:9;24086:4;24082:20;24078:1;24067:9;24063:17;24056:47;24120:131;24246:4;24120:131;:::i;:::-;24112:139;;23839:419;;;:::o;24264:::-;24430:4;24468:2;24457:9;24453:18;24445:26;;24517:9;24511:4;24507:20;24503:1;24492:9;24488:17;24481:47;24545:131;24671:4;24545:131;:::i;:::-;24537:139;;24264:419;;;:::o;24689:::-;24855:4;24893:2;24882:9;24878:18;24870:26;;24942:9;24936:4;24932:20;24928:1;24917:9;24913:17;24906:47;24970:131;25096:4;24970:131;:::i;:::-;24962:139;;24689:419;;;:::o;25114:::-;25280:4;25318:2;25307:9;25303:18;25295:26;;25367:9;25361:4;25357:20;25353:1;25342:9;25338:17;25331:47;25395:131;25521:4;25395:131;:::i;:::-;25387:139;;25114:419;;;:::o;25539:::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:::-;26130:4;26168:2;26157:9;26153:18;26145:26;;26217:9;26211:4;26207:20;26203:1;26192:9;26188:17;26181:47;26245:131;26371:4;26245:131;:::i;:::-;26237:139;;25964:419;;;:::o;26389:::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:131;26796:4;26670:131;:::i;:::-;26662:139;;26389:419;;;:::o;26814:::-;26980:4;27018:2;27007:9;27003:18;26995:26;;27067:9;27061:4;27057:20;27053:1;27042:9;27038:17;27031:47;27095:131;27221:4;27095:131;:::i;:::-;27087:139;;26814:419;;;:::o;27239:::-;27405:4;27443:2;27432:9;27428:18;27420:26;;27492:9;27486:4;27482:20;27478:1;27467:9;27463:17;27456:47;27520:131;27646:4;27520:131;:::i;:::-;27512:139;;27239:419;;;:::o;27664:::-;27830:4;27868:2;27857:9;27853:18;27845:26;;27917:9;27911:4;27907:20;27903:1;27892:9;27888:17;27881:47;27945:131;28071:4;27945:131;:::i;:::-;27937:139;;27664:419;;;:::o;28089:::-;28255:4;28293:2;28282:9;28278:18;28270:26;;28342:9;28336:4;28332:20;28328:1;28317:9;28313:17;28306:47;28370:131;28496:4;28370:131;:::i;:::-;28362:139;;28089:419;;;:::o;28514:::-;28680:4;28718:2;28707:9;28703:18;28695:26;;28767:9;28761:4;28757:20;28753:1;28742:9;28738:17;28731:47;28795:131;28921:4;28795:131;:::i;:::-;28787:139;;28514:419;;;:::o;28939:::-;29105:4;29143:2;29132:9;29128:18;29120:26;;29192:9;29186:4;29182:20;29178:1;29167:9;29163:17;29156:47;29220:131;29346:4;29220:131;:::i;:::-;29212:139;;28939:419;;;:::o;29364:::-;29530:4;29568:2;29557:9;29553:18;29545:26;;29617:9;29611:4;29607:20;29603:1;29592:9;29588:17;29581:47;29645:131;29771:4;29645:131;:::i;:::-;29637:139;;29364:419;;;:::o;29789:::-;29955:4;29993:2;29982:9;29978:18;29970:26;;30042:9;30036:4;30032:20;30028:1;30017:9;30013:17;30006:47;30070:131;30196:4;30070:131;:::i;:::-;30062:139;;29789:419;;;:::o;30214:::-;30380:4;30418:2;30407:9;30403:18;30395:26;;30467:9;30461:4;30457:20;30453:1;30442:9;30438:17;30431:47;30495:131;30621:4;30495:131;:::i;:::-;30487:139;;30214:419;;;:::o;30639:::-;30805:4;30843:2;30832:9;30828:18;30820:26;;30892:9;30886:4;30882:20;30878:1;30867:9;30863:17;30856:47;30920:131;31046:4;30920:131;:::i;:::-;30912:139;;30639:419;;;:::o;31064:222::-;31157:4;31195:2;31184:9;31180:18;31172:26;;31208:71;31276:1;31265:9;31261:17;31252:6;31208:71;:::i;:::-;31064:222;;;;:::o;31292:129::-;31326:6;31353:20;;:::i;:::-;31343:30;;31382:33;31410:4;31402:6;31382:33;:::i;:::-;31292:129;;;:::o;31427:75::-;31460:6;31493:2;31487:9;31477:19;;31427:75;:::o;31508:307::-;31569:4;31659:18;31651:6;31648:30;31645:56;;;31681:18;;:::i;:::-;31645:56;31719:29;31741:6;31719:29;:::i;:::-;31711:37;;31803:4;31797;31793:15;31785:23;;31508:307;;;:::o;31821:308::-;31883:4;31973:18;31965:6;31962:30;31959:56;;;31995:18;;:::i;:::-;31959:56;32033:29;32055:6;32033:29;:::i;:::-;32025:37;;32117:4;32111;32107:15;32099:23;;31821:308;;;:::o;32135:132::-;32202:4;32225:3;32217:11;;32255:4;32250:3;32246:14;32238:22;;32135:132;;;:::o;32273:114::-;32340:6;32374:5;32368:12;32358:22;;32273:114;;;:::o;32393:98::-;32444:6;32478:5;32472:12;32462:22;;32393:98;;;:::o;32497:99::-;32549:6;32583:5;32577:12;32567:22;;32497:99;;;:::o;32602:113::-;32672:4;32704;32699:3;32695:14;32687:22;;32602:113;;;:::o;32721:184::-;32820:11;32854:6;32849:3;32842:19;32894:4;32889:3;32885:14;32870:29;;32721:184;;;;:::o;32911:168::-;32994:11;33028:6;33023:3;33016:19;33068:4;33063:3;33059:14;33044:29;;32911:168;;;;:::o;33085:169::-;33169:11;33203:6;33198:3;33191:19;33243:4;33238:3;33234:14;33219:29;;33085:169;;;;:::o;33260:148::-;33362:11;33399:3;33384:18;;33260:148;;;;:::o;33414:305::-;33454:3;33473:20;33491:1;33473:20;:::i;:::-;33468:25;;33507:20;33525:1;33507:20;:::i;:::-;33502:25;;33661:1;33593:66;33589:74;33586:1;33583:81;33580:107;;;33667:18;;:::i;:::-;33580:107;33711:1;33708;33704:9;33697:16;;33414:305;;;;:::o;33725:185::-;33765:1;33782:20;33800:1;33782:20;:::i;:::-;33777:25;;33816:20;33834:1;33816:20;:::i;:::-;33811:25;;33855:1;33845:35;;33860:18;;:::i;:::-;33845:35;33902:1;33899;33895:9;33890:14;;33725:185;;;;:::o;33916:348::-;33956:7;33979:20;33997:1;33979:20;:::i;:::-;33974:25;;34013:20;34031:1;34013:20;:::i;:::-;34008:25;;34201:1;34133:66;34129:74;34126:1;34123:81;34118:1;34111:9;34104:17;34100:105;34097:131;;;34208:18;;:::i;:::-;34097:131;34256:1;34253;34249:9;34238:20;;33916:348;;;;:::o;34270:191::-;34310:4;34330:20;34348:1;34330:20;:::i;:::-;34325:25;;34364:20;34382:1;34364:20;:::i;:::-;34359:25;;34403:1;34400;34397:8;34394:34;;;34408:18;;:::i;:::-;34394:34;34453:1;34450;34446:9;34438:17;;34270:191;;;;:::o;34467:96::-;34504:7;34533:24;34551:5;34533:24;:::i;:::-;34522:35;;34467:96;;;:::o;34569:90::-;34603:7;34646:5;34639:13;34632:21;34621:32;;34569:90;;;:::o;34665:149::-;34701:7;34741:66;34734:5;34730:78;34719:89;;34665:149;;;:::o;34820:126::-;34857:7;34897:42;34890:5;34886:54;34875:65;;34820:126;;;:::o;34952:77::-;34989:7;35018:5;35007:16;;34952:77;;;:::o;35035:154::-;35119:6;35114:3;35109;35096:30;35181:1;35172:6;35167:3;35163:16;35156:27;35035:154;;;:::o;35195:307::-;35263:1;35273:113;35287:6;35284:1;35281:13;35273:113;;;35372:1;35367:3;35363:11;35357:18;35353:1;35348:3;35344:11;35337:39;35309:2;35306:1;35302:10;35297:15;;35273:113;;;35404:6;35401:1;35398:13;35395:101;;;35484:1;35475:6;35470:3;35466:16;35459:27;35395:101;35244:258;35195:307;;;:::o;35508:320::-;35552:6;35589:1;35583:4;35579:12;35569:22;;35636:1;35630:4;35626:12;35657:18;35647:81;;35713:4;35705:6;35701:17;35691:27;;35647:81;35775:2;35767:6;35764:14;35744:18;35741:38;35738:84;;;35794:18;;:::i;:::-;35738:84;35559:269;35508:320;;;:::o;35834:281::-;35917:27;35939:4;35917:27;:::i;:::-;35909:6;35905:40;36047:6;36035:10;36032:22;36011:18;35999:10;35996:34;35993:62;35990:88;;;36058:18;;:::i;:::-;35990:88;36098:10;36094:2;36087:22;35877:238;35834:281;;:::o;36121:233::-;36160:3;36183:24;36201:5;36183:24;:::i;:::-;36174:33;;36229:66;36222:5;36219:77;36216:103;;;36299:18;;:::i;:::-;36216:103;36346:1;36339:5;36335:13;36328:20;;36121:233;;;:::o;36360:176::-;36392:1;36409:20;36427:1;36409:20;:::i;:::-;36404:25;;36443:20;36461:1;36443:20;:::i;:::-;36438:25;;36482:1;36472:35;;36487:18;;:::i;:::-;36472:35;36528:1;36525;36521:9;36516:14;;36360:176;;;;:::o;36542:180::-;36590:77;36587:1;36580:88;36687:4;36684:1;36677:15;36711:4;36708:1;36701:15;36728:180;36776:77;36773:1;36766:88;36873:4;36870:1;36863:15;36897:4;36894:1;36887:15;36914:180;36962:77;36959:1;36952:88;37059:4;37056:1;37049:15;37083:4;37080:1;37073:15;37100:180;37148:77;37145:1;37138:88;37245:4;37242:1;37235:15;37269:4;37266:1;37259:15;37286:180;37334:77;37331:1;37324:88;37431:4;37428:1;37421:15;37455:4;37452:1;37445:15;37472:180;37520:77;37517:1;37510:88;37617:4;37614:1;37607:15;37641:4;37638:1;37631:15;37658:117;37767:1;37764;37757:12;37781:117;37890:1;37887;37880:12;37904:117;38013:1;38010;38003:12;38027:117;38136:1;38133;38126:12;38150:102;38191:6;38242:2;38238:7;38233:2;38226:5;38222:14;38218:28;38208:38;;38150:102;;;:::o;38258:230::-;38398:34;38394:1;38386:6;38382:14;38375:58;38467:13;38462:2;38454:6;38450:15;38443:38;38258:230;:::o;38494:237::-;38634:34;38630:1;38622:6;38618:14;38611:58;38703:20;38698:2;38690:6;38686:15;38679:45;38494:237;:::o;38737:225::-;38877:34;38873:1;38865:6;38861:14;38854:58;38946:8;38941:2;38933:6;38929:15;38922:33;38737:225;:::o;38968:178::-;39108:30;39104:1;39096:6;39092:14;39085:54;38968:178;:::o;39152:223::-;39292:34;39288:1;39280:6;39276:14;39269:58;39361:6;39356:2;39348:6;39344:15;39337:31;39152:223;:::o;39381:175::-;39521:27;39517:1;39509:6;39505:14;39498:51;39381:175;:::o;39562:231::-;39702:34;39698:1;39690:6;39686:14;39679:58;39771:14;39766:2;39758:6;39754:15;39747:39;39562:231;:::o;39799:230::-;39939:34;39935:1;39927:6;39923:14;39916:58;40008:13;40003:2;39995:6;39991:15;39984:38;39799:230;:::o;40035:243::-;40175:34;40171:1;40163:6;40159:14;40152:58;40244:26;40239:2;40231:6;40227:15;40220:51;40035:243;:::o;40284:229::-;40424:34;40420:1;40412:6;40408:14;40401:58;40493:12;40488:2;40480:6;40476:15;40469:37;40284:229;:::o;40519:228::-;40659:34;40655:1;40647:6;40643:14;40636:58;40728:11;40723:2;40715:6;40711:15;40704:36;40519:228;:::o;40753:180::-;40893:32;40889:1;40881:6;40877:14;40870:56;40753:180;:::o;40939:222::-;41079:34;41075:1;41067:6;41063:14;41056:58;41148:5;41143:2;41135:6;41131:15;41124:30;40939:222;:::o;41167:182::-;41307:34;41303:1;41295:6;41291:14;41284:58;41167:182;:::o;41355:231::-;41495:34;41491:1;41483:6;41479:14;41472:58;41564:14;41559:2;41551:6;41547:15;41540:39;41355:231;:::o;41592:182::-;41732:34;41728:1;41720:6;41716:14;41709:58;41592:182;:::o;41780:228::-;41920:34;41916:1;41908:6;41904:14;41897:58;41989:11;41984:2;41976:6;41972:15;41965:36;41780:228;:::o;42014:234::-;42154:34;42150:1;42142:6;42138:14;42131:58;42223:17;42218:2;42210:6;42206:15;42199:42;42014:234;:::o;42254:220::-;42394:34;42390:1;42382:6;42378:14;42371:58;42463:3;42458:2;42450:6;42446:15;42439:28;42254:220;:::o;42480:172::-;42620:24;42616:1;42608:6;42604:14;42597:48;42480:172;:::o;42658:236::-;42798:34;42794:1;42786:6;42782:14;42775:58;42867:19;42862:2;42854:6;42850:15;42843:44;42658:236;:::o;42900:231::-;43040:34;43036:1;43028:6;43024:14;43017:58;43109:14;43104:2;43096:6;43092:15;43085:39;42900:231;:::o;43137:169::-;43277:21;43273:1;43265:6;43261:14;43254:45;43137:169;:::o;43312:173::-;43452:25;43448:1;43440:6;43436:14;43429:49;43312:173;:::o;43491:122::-;43564:24;43582:5;43564:24;:::i;:::-;43557:5;43554:35;43544:63;;43603:1;43600;43593:12;43544:63;43491:122;:::o;43619:116::-;43689:21;43704:5;43689:21;:::i;:::-;43682:5;43679:32;43669:60;;43725:1;43722;43715:12;43669:60;43619:116;:::o;43741:120::-;43813:23;43830:5;43813:23;:::i;:::-;43806:5;43803:34;43793:62;;43851:1;43848;43841:12;43793:62;43741:120;:::o;43867:122::-;43940:24;43958:5;43940:24;:::i;:::-;43933:5;43930:35;43920:63;;43979:1;43976;43969:12;43920:63;43867:122;:::o
Swarm Source
ipfs://10717e3bf7be9dc19f0ab0dd99c8fabd20c4906985d00d318fb953ea612d2e6e
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.01
Net Worth in GLMR
Token Allocations
GLMR
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| GLMR | 100.00% | $0.01957 | 0.5 | $0.009785 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.