Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
28 Badge
Holders
21
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BadgeLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Badge
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-29 */ // SPDX-License-Identifier: MIT 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; } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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 || 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 { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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 This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } interface LootInterface { function ownerOf(uint256 tokenId) external view returns (address owner); } interface ToolInterface { function checkExistWhitelist(address addr) external view returns(bool); function updateWhitelist(address addr) external; function getTokenURIBase() external pure returns (string memory); } contract Badge is ERC721Enumerable, ReentrancyGuard, Ownable { uint256 public baseMintPrice = 10000000000000000;//0.01 ETH uint256 public baseLootUserMintPrice = 7000000000000000;//0.007 ETH uint256 public mintPrice = 10000000000000000;//0.01 ETH uint256 public lootUserMintPrice = 7000000000000000;//0.007 ETH uint256 private ladderUnit = 1000; uint256 public costUserTotalSupply = 0; uint256 public maxTotalSupply = 7999; uint256 public addZeroTotalSupply = 0; uint256 public addOneTotalSupply = 0; uint256 public addTwoTotalSupply = 0; uint256 public addThreeTotalSupply = 0; uint256 public addFourTotalSupply = 0; uint[] usedTokenIdArr; //Loot Contract 0xFF9C1b15B16263C61d017ee9F65C50e4AE0113D7 address public lootAddress = 0xFF9C1b15B16263C61d017ee9F65C50e4AE0113D7; LootInterface lootContract = LootInterface(lootAddress); //Tool Contract 0x3CF98F80194A273cf36658e60861e8bcC82d25f8 address public toolAddress = 0x3CF98F80194A273cf36658e60861e8bcC82d25f8; ToolInterface toolContract = ToolInterface(toolAddress); address payable private _royaltyRecipient; struct SelfDecidedAttribute { uint8 gender; uint8 strength; uint8 stamina; uint8 agility; uint8 charisma; uint8 intelligence; uint8 shield; uint8 race; uint8 element; uint8 addOne1; uint8 addOne2; uint8 addOne3; uint8 addOne4; } mapping(uint256 => SelfDecidedAttribute) private attrsIndex; mapping(uint256 => mapping(uint256 => string[])) private mapList; string[] private genders = [ "Male", "Female", "Unknown" ]; string[] private races = [ "Dwarf", "Human", "Night Elf", "Giant", "Goblin" ]; string[] private elements = [ "Fire", "Water", "Earth", "Air" ]; string[] private cike_golden = ["Justiciar of Metaverse","Metaverse Planeshifter"]; string[] private cike_white = ["Rogue","Assassin","Shadowdancer","Guild Thief","Kishi Charger Kishi","Ninja Spy","Yakuza","Slaad Brooder","Orc Scout","Wild Scout","Nentyar Hunter"]; string[] private cike_green = ["Hunter of the Dead","Perfect Wight","Sword Dancer","Windwalker","Foe Hunter","Dungeon Delver","Spymaster","Thief-Acrobat","Ghostwalker"]; string[] private cike_blue = ["Lifedrinker","Shadow Adept","Mage-Killer","Bloodhound","Master of Flies","Red Avenger","Arachnemancer"]; string[] private cike_orange = ["Disciple of Baalzebul","Disciple of Dispater","Forsaker","Bayushi Deceiver Bayushi","Darkmask","Void Incarnate","Mage Hunter"]; string[] private cike_red = ["Shadowdance Assassin","Shadow Scout","Shapeshifter","Soulblade","Shadow Mind"]; string[] private fs_golden = ["Red Wizard","Meta Nightcloak","Mystic Meta Wanderer","Metamind","Pale Master","Truth Seeker"]; string[] private fs_white = ["Bard","Druid","Sorcerer","Wizard","Loremaster","Thrall of Demogorgon","Thrall of Grazt","Thrall of Jubilex","Thrall of Orcus","Ur-Priest","Vermin Lord","Horned Harbinger","Ocular Adept","Silverstar","Wear of Purple","Arcane Devotee","Spelldancer","Spellfire Channeler","War Wizard of Cormyr","Bane of Infidels","Blighter","Void Disciple","Witch Hunter","ElvenHigh Mage","Emancipated Spawn","Illithid Savant","Sybil","Yuan-Ti Cultist","BlackFlame Zealot","Raumathari Battlemage","Talontar Blightlord","Beholder Mage","Runecaster","Zhentarim Skymage","Incantatrix","Master Harper"]; string[] private fs_green = ["Arcane Trickster","Archmage","Dragon Disciple","Horizon Walker","Loremaster","Divine Oracle","Sacred Exorcist","Warpriest","Wizard of High Sorcery","Heartwarder","Divine Disciple","Harper Scout","Hathran","Red Wizard","Runecaster","Harper Mage","Geomancer","Hexer","Oozemaster","Shifter","Fangof Lolth","Arcane Trickster","Bladesinger","Blood Magus","Entropist ","Fiend of Blasphemy","Fiend of Corruption ","Fiend of Possession","Zhentarim Skymage"]; string[] private fs_blue = ["Hierophant","Mystic Theurge","Thaumaturgist","Demonologist","Cosmic Descryer","Divine Emissary","Doomguide","Archmage","Bone Collector","Deathwarden Chanter","Eidoloncer core class","Henshin Mystic Henshin","Iaijutsu Master Iaijutsu","Moto Avenger Moto","Siren","Candle Caster","Dragon Disciple","Elemental Savant","Mage of the Arcane Order","Doomdreamer","Mystic Theurge","Raumathari Battlemage","Ruby Disciple"]; string[] private fs_orange = ["Diabolist","Disciple of Asmodeus","Disciple of Mammon","Dweomerkeeper","Elemental Archon","Goldeye","Ghost Slayer","Gnome Artificer","Incantatrix","Pyrokineticist","Spellsinger","Durthan","Nar Demonbinder","Telflammar Shadolord","Warpriest","Grim Psion","Lord of the Dead"]; string[] private fs_red = ["Church Inquisitor","Master of Shrouds","Dreadmaster","Stormlord","Eye of Gruumsh","Queen of the Wild","Elven Bladesinger","Alienist","Mindbender","True Necromancer","Divine Agent","Sangehirn","Spellfire Hierophant"]; string[] private ms_golden = ["Fatespinner"]; string[] private ms_white = ["Harper","Cleric","Contemplative","ShintaoMonk","Warrior Skald"]; string[] private ms_green = ["Hierophant","Virtuoso","Harper Priest","Hospitaler"]; string[] private ms_blue = ["Virtuoso","Cancer Mage","Master Alchemist"]; string[] private ms_orange = ["Acolyteof the Skin","Knight Protector"]; string[] private ms_red = ["High Proselytizer","Forest Master"]; string[] private ss_golden = ["God Eater"]; string[] private ss_white = ["Ranger","Arcane Archer","Mortal Hunter","PeerlessArcher"]; string[] private ss_green = ["Orderof the Bow Initiate","Consecrated Harrier"]; string[] private ss_blue = ["Arboreal Guardian","Deepwood Sniper"]; string[] private ss_orange = ["HalflingWarsling Sniper"]; string[] private ss_red = ["Exotic Weapon Master"]; string[] private tk_golden = ["Master of the Metaverse"]; string[] private tk_white = ["Dwarven Defender","Carven Defender","Guardian of the Road"]; string[] private tk_green = ["Giant-Killer","Tribal Protector"]; string[] private tk_blue = ["Orc Warlord","Techsmith"]; string[] private tk_orange = ["Scaled Horror","People Champion"]; string[] private tk_red = ["Master Arcane Artisan"]; string[] private zs_golden = ["Auspician","Keshen Blademaster ","Warlord of Metaverse"]; string[] private zs_red = ["Paladin","Holy Liberator","Divine Champion","Verdant Lord","EunuchWarlock","Gatecrasher","Planar Champion ","Spur the Lord ","Psychic Weapon Master"]; string[] private zs_orange = ["Eldritch Knight","Templar","Knight of Neraka","Knight of Solamnia","Animal Lord","Bear Warrior","Maho-Bujin","Maho-Tsukai","Royal Explorer","Shou Disciple","Thayan Slaver","Berserk","Soldier of Light ","Life Eater"]; string[] private zs_blue = ["Knight of the Chalice","Sacred Fist","Agent Retriever","Divine Seeker","Eidolon core class","Watch Detective","Windrider","Battle Maiden","Blade Dancer","Survivor","Waverider","Horde Breaker","Dread Pirate","Spellsword","Wayferer Guide","Aglarondan Griffonrider","Runescarred Berserker"]; string[] private zs_green = ["Warrior of Darkness","Legionnaire of Steel","Guardian Paramount","Union Sentinel","Frenzied Berserker","Tamer of Beasts","Tempest","DaidojiBodyguard Daidoji","TattooedMonk","Breachgnome","DwarvenBattlerager","GreatRift Skyguard","OrcWarlord","Masterof Chains","MasterSamurai","Ravager","Warmaster","WeaponMaster","Mindknight"]; string[] private zs_white = ["Barbarian","Fighter","Monk","Blackguard","Duelist","Arachne","Strifeleader","Waveservant","Purple Dragon Knight","Hida DefenderHida","Mantis Mercenary","Shiba Protector","Weapon Master ","Slayer","Vigilante","Cavalier","Devoted Defender","Drunken Master","Duelist","Fist of Hextor","Gladiator","Halfling Outrider","Lasher","Thyan Knight"]; string[] private traits = ["Administrator","Elusive Shadow","Gamer","Genius","Grey Eminence","Immortal","Midas Touched","Mystic","Brilliant Strategist","Charismatic Negotiator","Fortune Builder","Mastermind Theologian","Naive Appeaser","Naive Enthusiast","Nudist","Possessed","Righteous","Skilled Tactician","Tolerant","Amateurish Plotter","Ambitious","Architect","Architectural Visionary","Benevolent","Body Purist","Graceful","Misguided Warrior","Physician","Scholarly Theologian","Speed Demon","Theologian","Too Smart","Tough Soldier","Zealous","Arbitrary","Ascetic","Asexual","Babbling Buffoon","Bisexual","Bloodlust","Body Modder","Born Inthe Purple","Fertile","Fierce Negotiator","Gay","Giant","Gregarious","Hedonist","Idolizer","Iron Gut","Keen Hearing","Lefthanded","Light Eater","Low Thirst","Martial Cleric","Out Of Shape","Outdoorsman","Playful","Robust","Schemer","Scholar","Secretive","Seducer","Seductress","Shy","Slow Reader","Strategist","Sturdy","Tortured Artist","Underhanded Rogue","Wakeful","Well Advised","Well Connected","Zealot","Pyromaniac","Quick Sleeper","Restless Sleeper","Scarred High","Severely Injured","Short Sighted","Silver Tongue","Sleepyhead","Smoker","Socializer","Tactical Genius","Troubled Pregnancy","Trusting","Twin","Undergrounder","Underweight","Very Underweight","Weak Stomach","Willful","Wroth","Bastard","Child Ofconsort","Dwarf","Feeble","Fever","Food Poisoning","Hard Pregnancy","Harelip","Has Measles","Has Small Pox","Has Tuberculosis","Has Typhoid Fever","Impaler","Indolent","Indulgent","Infection","Infirm","Lisp","Loose Lips","Obese","One Eyed","One Handed","One Legged","Stout","Stressed","Syphilitic"]; string[] private preffixes = ["Able","Alert","Candid","Frank","Frugal","Happy","Lazy","Modest","Smart","Steady","Strict","Active","Adroit","Bossy","Brave","Caring","Funny","Hearty"]; uint256[] private roleScoreMatch = [ 0, 4, 15, 41, 82, 99 ]; uint256[] private roleColorMatch = [ 4, 14, 29, 48, 71, 99 ]; uint256[] private traitColorMatch = [ 7, 18, 33, 73, 93, 129 ]; function getCostUserTotalSupply() public view returns (uint256) { return costUserTotalSupply; } function getUsedTokenIdArr() public view returns (uint[] memory) { return usedTokenIdArr; } function getRealMintPrice(uint256 tokenId) public view returns (uint256) { if(tokenId<7799) { return baseMintPrice*(1+costUserTotalSupply/ladderUnit); } return mintPrice; } function getRealLootUserMintPrice(uint256 tokenId) public view returns (uint256) { if(tokenId<7799) { return baseLootUserMintPrice*(1+costUserTotalSupply/ladderUnit); } return lootUserMintPrice; } function setMintPrice(uint256 newMintPrice) public onlyOwner { mintPrice = newMintPrice; } function setLootUserMintPrice(uint256 newLootUserMintPrice) public onlyOwner { lootUserMintPrice = newLootUserMintPrice; } function setMaxTotalSupply(uint256 newMaxTotalSupply) public onlyOwner { maxTotalSupply = newMaxTotalSupply; } function updateRoyalties(address payable recipient) public onlyOwner { _royaltyRecipient = recipient; } function withdraw(uint256 amount) public onlyOwner { require(_royaltyRecipient != address(0x0), "Must set royalty recipient"); _royaltyRecipient.transfer(amount); } function deposit() public payable onlyOwner {} function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function getGender(uint256 tokenId) public view returns (string memory) { return genders[attrsIndex[tokenId].gender]; } function getStrength(uint256 tokenId) public view returns (string memory) { return toString(attrsIndex[tokenId].strength); } function getStamina(uint256 tokenId) public view returns (string memory) { return toString(attrsIndex[tokenId].stamina); } function getAgility(uint256 tokenId) public view returns (string memory) { return toString(attrsIndex[tokenId].agility); } function getCharisma(uint256 tokenId) public view returns (string memory) { return toString(attrsIndex[tokenId].charisma); } function getIntelligence(uint256 tokenId) public view returns (string memory) { return toString(attrsIndex[tokenId].intelligence); } function getShield(uint256 tokenId) public view returns (string memory) { return toString(attrsIndex[tokenId].shield); } function getRace(uint256 tokenId) public view returns (string memory) { return races[attrsIndex[tokenId].race]; } function getElement(uint256 tokenId) public view returns (string memory) { return elements[attrsIndex[tokenId].element]; } function getOccupation(uint256 tokenId) public view returns (string memory) { return pluck1(tokenId); } //@return 1~6 function getOccupationType(uint256 tokenId) public view returns (uint256) { uint256 rand = random(string(abi.encodePacked("Occupation", toString(tokenId)))); uint256 score = rand % 100; uint i = 0; for(; i < roleScoreMatch.length; i++){ if(score <= roleScoreMatch[i]){ break; } } return i+1; } //@return 1~6 function getOccupationColor(uint256 tokenId) public view returns (uint256) { uint256 rand2 = random(string(abi.encodePacked("color", toString(tokenId)))); uint256 colorScore = rand2 % 100; uint j = 0; for(; j < roleColorMatch.length; j++){ if(colorScore <= roleColorMatch[j]){ break; } } return j+1; } function getTrait1(uint256 tokenId) public view returns (string memory) { return pluck2(tokenId, "Trait1"); } function getTrait2(uint256 tokenId) public view returns (string memory) { return pluck2(tokenId, "Trait2"); } function getTrait3(uint256 tokenId) public view returns (string memory) { return pluck2(tokenId, "Trait3"); } function getTraitColor(uint256 tokenId, uint256 index) public view returns (string memory) { uint256 rand = random(string(abi.encodePacked("Trait", toString(index), toString(tokenId)))); uint256 score = rand % traits.length; uint j = 0; for(; j < traitColorMatch.length; j++){ if(score <= traitColorMatch[j]){ break; } } return getColorFull(j+1); } function getColorFull(uint256 index) private pure returns (string memory) { if(index == 1){ return "#ffc000"; }else if(index == 2){ return "#c00000"; }else if(index == 3){ return "#ed7d31"; }else if(index == 4){ return "#5b9bd5"; }else if(index == 5){ return "#70ad47"; }else{ return "#ffffff"; } } function pluck1(uint256 tokenId) internal view returns (string memory) { uint256 roleType = getOccupationType(tokenId); uint256 colorType = getOccupationColor(tokenId); string[] memory sourceArray = mapList[roleType][colorType]; uint256 rand = random(string(abi.encodePacked("item", toString(tokenId)))); string memory output = sourceArray[rand % sourceArray.length]; string memory prefix = preffixes[rand % preffixes.length]; output = string(abi.encodePacked(prefix, ' ', output)); return output; } function pluck2(uint256 tokenId, string memory keyPrefix) internal view returns (string memory) { uint256 rand = random(string(abi.encodePacked(keyPrefix, toString(tokenId)))); uint256 index = rand % traits.length; string memory output = string(abi.encodePacked('"', traits[index], '"')); return output; } function getIcon(uint256 tokenId) internal view returns (string memory) { string memory Assassin = '▲'; string memory Mage = '※'; string memory Hunter = '↑'; string memory Priest = '○'; string memory Tank = '◆'; string memory Warior = '■'; string memory output=""; uint256 typeIndex = getOccupationType(tokenId); if(typeIndex == 1){ output = Tank; }else if (typeIndex == 2){ output = Assassin; }else if (typeIndex == 3){ output = Hunter; }else if (typeIndex == 4){ output = Priest; }else if (typeIndex == 5){ output = Mage; }else{ output = Warior; } return output; } function getIconName(uint256 tokenId) internal view returns (string memory) { string memory Assassin = 'Assassin'; string memory Mage = 'Mage'; string memory Hunter = 'Hunter'; string memory Priest = 'Priest'; string memory Tank = 'Tank'; string memory Warior = 'Warior'; uint256 typeIndex = getOccupationType(tokenId); string memory output = ""; if(typeIndex == 1){ output = Tank; }else if (typeIndex == 2){ output = Assassin; }else if (typeIndex == 3){ output = Hunter; }else if (typeIndex == 4){ output = Priest; }else if (typeIndex == 5){ output = Mage; }else{ output = Warior; } return output; } function getColorName(uint256 tokenId) internal view returns (string memory) { uint256 typeIndex = getOccupationColor(tokenId); if(typeIndex == 1){ return "gold"; }else if (typeIndex == 2){ return "red"; }else if (typeIndex == 3){ return "orange"; }else if (typeIndex == 4){ return "blue"; }else if (typeIndex == 5){ return "green"; }else{ return "white"; } } function tokenURI(uint256 tokenId) override public view returns (string memory) { string[46] memory parts; parts[0]=toolContract.getTokenURIBase(); // parts[0] = '<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="750px" height="750px" viewBox="0 0 750 750" style="enable-background:new 0 0 750 750;" xml:space="preserve"> <style type="text/css">.st0{fill:#023E6B;}.st1{fill:#05517F;stroke:#05517F;stroke-width:3;stroke-miterlimit:10;}.st2{fill:#FFFFFF;}</style> <title>image</title> <rect class="st0" width="750" height="750"/> <path class="st1" d="M84.7,100.35H64.12V58.28h20.12c11.58-0.15,17.3,3.36,17.15,10.52c-0.13,3.81-2.2,7.28-5.49,9.2c4.57,1.37,6.93,4.57,7.09,9.6C103.14,96.11,97.05,100.36,84.7,100.35z M82.87,68.11h-4.81V75h5.72c3.2,0,4.8-1.22,4.8-3.66C88.73,68.89,86.83,67.81,82.87,68.11z M82.41,82.75h-4.35v7.77h6c4.11,0.15,6.09-1.14,5.94-3.89C90.28,83.74,87.75,82.44,82.41,82.75z"/> <path class="st1" d="M142.54,100.35H130l-0.46-3.2c-2.74,2.6-6.63,3.81-11.66,3.66c-7.01-0.31-10.67-3.29-11-8.92c0-5.63,4.88-9.06,14.63-10.29c4.88-0.45,7.32-1.45,7.32-3c0-1.67-1.38-2.51-4.12-2.51c-2.59,0-4,1-4.12,3h-11.66c-0.15-6.86,5.41-10.29,16.69-10.29c11.28-0.46,16.39,3.81,15.32,12.8v14.18c-0.15,1.83,0.38,3.13,1.6,3.89L142.54,100.35z M123.34,94.41c3.81,0,5.64-2.52,5.49-7.55c-1.39,0.58-2.85,0.97-4.35,1.14c-3.51,0.45-5.18,1.68-5,3.65C119.61,93.34,120.89,94.26,123.34,94.41z"/> <path class="st1" d="M180.5,100.35h-10.75v-4.11c-2.24,3.03-5.84,4.74-9.6,4.57c-8.84-0.31-13.51-5.42-14-15.32c0.46-10.36,4.79-15.92,13-16.69c3.96-0.15,7.01,1.15,9.14,3.89V58.28h12.21V100.35z M163.35,92.35c3.51,0,5.34-2.36,5.49-7.09c-0.15-4.72-1.9-7.08-5.26-7.09c-3.2,0.16-4.87,2.6-5,7.32C158.56,90.06,160.15,92.35,163.35,92.35z"/> <path class="st1" d="M186.9,101.5H199c0.17,0.49,0.4,0.95,0.69,1.37c0.83,0.48,1.78,0.71,2.74,0.68c3.35,0.15,5-1.67,4.8-5.48v-2.52c-2,2.29-4.89,3.44-8.68,3.43c-8.24-0.46-12.66-5.34-13.27-14.63c0.48-10.06,5.05-15.24,13.72-15.55c3.7,0.01,7.15,1.89,9.15,5v-4.09h10.75v24.7c1.06,11.12-4.27,16.45-16,16C193.15,110.26,187.81,107.29,186.9,101.5z M202.22,77.5c-3.2,0-4.8,2.36-4.8,7.09c0.15,3.65,1.75,5.64,4.8,5.94c3.21,0,4.88-2.13,5-6.4c0.03-4.43-1.64-6.64-5-6.64V77.5z"/> <path class="st1" d="M259.39,87.78h-23.33c0.31,3.66,2.37,5.64,6.18,5.94c1.87,0.06,3.62-0.9,4.57-2.51h11.43c-1.82,6.25-7.46,9.45-16.92,9.6c-11.13-0.31-16.92-5.5-17.37-15.55c0.6-10.36,6.39-15.85,17.37-16.46C253.06,69.41,259.08,75.74,259.39,87.78z M236.06,81.6h11.21c-0.31-3.2-2.14-4.95-5.49-5.26C238.12,76.34,236.21,78.1,236.06,81.6z"/> <path class="st2" d="M84.7,100.35H64.12V58.28h20.12c11.58-0.15,17.3,3.36,17.15,10.52c-0.13,3.81-2.2,7.28-5.49,9.2c4.57,1.37,6.93,4.57,7.09,9.6C103.14,96.11,97.05,100.36,84.7,100.35z M82.87,68.11h-4.81V75h5.72c3.2,0,4.8-1.22,4.8-3.66C88.73,68.89,86.83,67.81,82.87,68.11z M82.41,82.75h-4.35v7.77h6c4.11,0.15,6.09-1.14,5.94-3.89C90.28,83.74,87.75,82.44,82.41,82.75z"/> <path class="st2" d="M142.54,100.35H130l-0.46-3.2c-2.74,2.6-6.63,3.81-11.66,3.66c-7.01-0.31-10.67-3.29-11-8.92c0-5.63,4.88-9.06,14.63-10.29c4.88-0.45,7.32-1.45,7.32-3c0-1.67-1.38-2.51-4.12-2.51c-2.59,0-4,1-4.12,3h-11.66c-0.15-6.86,5.41-10.29,16.69-10.29c11.28-0.46,16.39,3.81,15.32,12.8v14.18c-0.15,1.83,0.38,3.13,1.6,3.89L142.54,100.35z M123.34,94.41c3.81,0,5.64-2.52,5.49-7.55c-1.39,0.58-2.85,0.97-4.35,1.14c-3.51,0.45-5.18,1.68-5,3.65C119.61,93.34,120.89,94.26,123.34,94.41z"/> <path class="st2" d="M180.5,100.35h-10.75v-4.11c-2.24,3.03-5.84,4.74-9.6,4.57c-8.84-0.31-13.51-5.42-14-15.32c0.46-10.36,4.79-15.92,13-16.69c3.96-0.15,7.01,1.15,9.14,3.89V58.28h12.21V100.35z M163.35,92.35c3.51,0,5.34-2.36,5.49-7.09c-0.15-4.72-1.9-7.08-5.26-7.09c-3.2,0.16-4.87,2.6-5,7.32C158.56,90.06,160.15,92.35,163.35,92.35z"/> <path class="st2" d="M186.9,101.5H199c0.17,0.49,0.4,0.95,0.69,1.37c0.83,0.48,1.78,0.71,2.74,0.68c3.35,0.15,5-1.67,4.8-5.48v-2.52c-2,2.29-4.89,3.44-8.68,3.43c-8.24-0.46-12.66-5.34-13.27-14.63c0.48-10.06,5.05-15.24,13.72-15.55c3.7,0.01,7.15,1.89,9.15,5v-4.09h10.75v24.7c1.06,11.12-4.27,16.45-16,16C193.15,110.26,187.81,107.29,186.9,101.5z M202.22,77.5c-3.2,0-4.8,2.36-4.8,7.09c0.15,3.65,1.75,5.64,4.8,5.94c3.21,0,4.88-2.13,5-6.4c0.03-4.43-1.64-6.64-5-6.64V77.5z"/> <path class="st2" d="M259.39,87.78h-23.33c0.31,3.66,2.37,5.64,6.18,5.94c1.87,0.06,3.62-0.9,4.57-2.51h11.43c-1.82,6.25-7.46,9.45-16.92,9.6c-11.13-0.31-16.92-5.5-17.37-15.55c0.6-10.36,6.39-15.85,17.37-16.46C253.06,69.41,259.08,75.74,259.39,87.78z M236.06,81.6h11.21c-0.31-3.2-2.14-4.95-5.49-5.26C238.12,76.34,236.21,78.1,236.06,81.6z"/><text id="Male-Demons-Chaotic" font-family="Georgia" font-size="28" font-weight="normal" line-spacing="44" fill="#FFFFFF"><tspan x="60" y="212">'; parts[1] = getGender(tokenId); parts[2] = '</tspan><tspan x="60" y="256">'; parts[3] = getRace(tokenId); parts[4] = '</tspan><tspan x="60" y="300">'; parts[5] = getElement(tokenId); parts[6] = ' '; parts[7] = attrsIndex[tokenId].addOne1 == 1 ? '+1' : ''; parts[8] = '</tspan><tspan x="60" y="344" fill="'; parts[9] = getColorFull(getOccupationColor(tokenId)); parts[10] = '">'; parts[11] = getOccupation(tokenId); parts[12] = ' '; parts[13] = getIcon(tokenId); parts[14] = '</tspan><tspan x="60" y="388" fill="'; parts[15] = getTraitColor(tokenId, 1); parts[16] = '">'; parts[17] = getTrait1(tokenId); parts[18] = ' '; parts[19] = attrsIndex[tokenId].addOne2 == 1 ? '+1' : ''; parts[20] = '</tspan><tspan x="60" y="432" fill="'; parts[21] = getTraitColor(tokenId, 2); parts[22] = '">'; parts[23] = getTrait2(tokenId); parts[24] = ' '; parts[25] = attrsIndex[tokenId].addOne3 == 1 ? '+1' : ''; parts[26] = '</tspan><tspan x="60" y="476" fill="'; parts[27] = getTraitColor(tokenId, 3); parts[28] = '">'; parts[29] = getTrait3(tokenId); parts[30] = ' '; parts[31] = attrsIndex[tokenId].addOne4 == 1 ? '+1' : ''; parts[32] = '</tspan></text><text id="Str-Sta-Agi-Cha-Int-Shi" font-family="Georgia" font-size="28" font-weight="normal" line-spacing="44" fill="#FFFFFF"><tspan x="522" y="216">Str</tspan><tspan x="522" y="260">Sta</tspan><tspan x="522" y="304">Agi</tspan><tspan x="522" y="348">Cha</tspan><tspan x="522" y="392">Int</tspan><tspan x="522" y="436">Shi</tspan></text><text id="2-3-6-7-1-1" font-family="Georgia" font-size="28" font-weight="normal" line-spacing="44" fill="#FFFFFF"><tspan x="618" y="216">'; parts[33] = getStrength(tokenId); parts[34] = '</tspan><tspan x="618" y="260">'; parts[35] = getStamina(tokenId); parts[36] = '</tspan><tspan x="618" y="304">'; parts[37] = getAgility(tokenId); parts[38] = '</tspan><tspan x="618" y="348">'; parts[39] = getCharisma(tokenId); parts[40] = '</tspan><tspan x="618" y="392">'; parts[41] = getIntelligence(tokenId); parts[42] = '</tspan><tspan x="618" y="436">'; parts[43] = getShield(tokenId); parts[44] = '</tspan></text><line x1="490.5" y1="192.5" x2="490.5" y2="475.5" stroke="#979797" stroke-linecap="square"></line>'; parts[45] = '</svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6])); output = string(abi.encodePacked(output, parts[7], parts[8],parts[9], parts[10], parts[11], parts[12], parts[13], parts[14])); output = string(abi.encodePacked(output, parts[15], parts[16],parts[17], parts[18], parts[19], parts[20], parts[21])); output = string(abi.encodePacked(output, parts[22], parts[23], parts[24],parts[25], parts[26], parts[27], parts[28])); output = string(abi.encodePacked(output, parts[29], parts[30], parts[31],parts[32], parts[33], parts[34])); output = string(abi.encodePacked(output, parts[35], parts[36], parts[37], parts[38])); output = string(abi.encodePacked(output, parts[39], parts[40], parts[41], parts[42], parts[43], parts[44], parts[45])); string memory atrrOutput = makeAttributeParts(getGender(tokenId), getRace(tokenId), getElement(tokenId), getIconName(tokenId), getColorName(tokenId)); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Badge #', toString(tokenId), '", "description": "Badge is a seed, a seed account for a PVP Metaverse Game.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"', ',"attributes":', atrrOutput, '}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function makeAttributeParts(string memory gender, string memory race, string memory ele, string memory flag, string memory color) internal pure returns (string memory){ string[11] memory attrParts; attrParts[0] = '[{ "trait_type": "Gender", "value": "'; attrParts[1] = gender; attrParts[2] = '" }, { "trait_type": "OccupatColor", "value": "'; attrParts[3] = color; attrParts[4] = '" }, { "trait_type": "Race", "value": "'; attrParts[5] = race; attrParts[6] = '" }, { "trait_type": "Element", "value": "'; attrParts[7] = ele; attrParts[8] = '" }, { "trait_type": "OccupatFlag", "value": "'; attrParts[9] = flag; attrParts[10] = '" }]'; string memory atrrOutput = string(abi.encodePacked(attrParts[0], attrParts[1], attrParts[2], attrParts[3], attrParts[4], attrParts[5], attrParts[6], attrParts[7])); atrrOutput = string(abi.encodePacked(atrrOutput, attrParts[8], attrParts[9], attrParts[10])); return atrrOutput; } function randomNum(uint8 length) private view returns (uint8) { return uint8(uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty)))) % length; } function randLevel(uint8 num) private returns (uint8) { uint8 maxNum = 0; if (num <= maxNum && addFourTotalSupply < maxTotalSupply / 100 * 1) { addFourTotalSupply++; return 4; } maxNum += 3; if (num <= maxNum && addThreeTotalSupply < maxTotalSupply / 100 * 3) { addThreeTotalSupply++; return 3; } maxNum += 5; if (num <= maxNum && addTwoTotalSupply < maxTotalSupply / 100 * 5) { addTwoTotalSupply++; return 2; } maxNum += 10; if (num <= maxNum && addOneTotalSupply < maxTotalSupply / 100 * 10) { addOneTotalSupply++; return 1; } addZeroTotalSupply++; return 0; } function randAddOneArr() private returns (uint8[] memory){ uint8 level = randLevel(randomNum(100)); uint8[] memory addOneArr = new uint8[](4); uint8 addOneCount =0; for (uint8 i = 1; i <= 4; i++) { bool isAddOne = randomNum(2) == 1; uint8 overAddOne = level - addOneCount; if (isAddOne && overAddOne == 0) { isAddOne = false; } if (false == isAddOne && overAddOne > 4 - i) { isAddOne = true; } if(isAddOne) { addOneCount++; } addOneArr[i - 1] = isAddOne ? 1 : 0; } return addOneArr; } function common(uint256 tokenId,uint256 genderId, uint256 raceId, uint256 elementId, uint256 strNum, uint256 staNum, uint256 agiNum, uint256 chaNum, uint256 intNum, uint256 shiNum) private { require(!_exists(tokenId), "Token ID invalid"); require(genderId < genders.length, "genderId invalid"); require(strNum + staNum+ agiNum+ chaNum+ intNum+ shiNum <= 30, "attributes num invalid"); require(raceId < races.length, "raceId invalid"); require(elementId < elements.length, "elementId invalid"); attrsIndex[tokenId].gender = uint8(genderId); attrsIndex[tokenId].strength = uint8(strNum); attrsIndex[tokenId].stamina = uint8(staNum); attrsIndex[tokenId].agility = uint8(agiNum); attrsIndex[tokenId].charisma = uint8(chaNum); attrsIndex[tokenId].intelligence = uint8(intNum); attrsIndex[tokenId].shield = uint8(shiNum); attrsIndex[tokenId].race = uint8(raceId); attrsIndex[tokenId].element = uint8(elementId); uint8[] memory addOneArr = randAddOneArr(); attrsIndex[tokenId].addOne1=addOneArr[0]; attrsIndex[tokenId].addOne2=addOneArr[1]; attrsIndex[tokenId].addOne3=addOneArr[2]; attrsIndex[tokenId].addOne4=addOneArr[3]; usedTokenIdArr.push(tokenId); _safeMint(_msgSender(), tokenId); } function checkExistWhitelist(address addr) public view returns (bool) { return toolContract.checkExistWhitelist(addr); } function checkTokenIdAvailable(uint256 tokenId,address addr) public view returns (bool) { bool result=!_exists(tokenId); if(result) { if(tokenId>=1 && tokenId<=999 && !toolContract.checkExistWhitelist(addr))//whitelist { result=false; } else if(tokenId >= 7800 && tokenId <= 7999 && addr!=owner())//team { result=false; } } return result; } function claim(uint256 tokenId, uint256 genderId, uint256 raceId, uint256 elementId, uint256 strNum, uint256 staNum, uint256 agiNum, uint256 chaNum, uint256 intNum, uint256 shiNum) public payable nonReentrant { require((tokenId >= 1000 && tokenId <= 7799) || (tokenId >= 8000 && tokenId <= maxTotalSupply), "Token ID invalid"); require(getRealMintPrice(tokenId) <= msg.value, "Please pay mint fee"); costUserTotalSupply++; common(tokenId, genderId, raceId, elementId, strNum, staNum, agiNum, chaNum, intNum, shiNum); } function claimWithLoot(uint256 tokenId, uint256 genderId, uint256 raceId, uint256 elementId, uint256 strNum, uint256 staNum, uint256 agiNum, uint256 chaNum, uint256 intNum, uint256 shiNum,uint256 lootId) public payable nonReentrant { require((tokenId >= 1000 && tokenId <= 7799) || (tokenId >= 8000 && tokenId <= maxTotalSupply), "Token ID invalid"); require(lootContract.ownerOf(lootId) == msg.sender, "Not the owner of this loot"); require(getRealLootUserMintPrice(tokenId) <= msg.value, "Please pay mint fee"); costUserTotalSupply++; common(tokenId, genderId, raceId, elementId, strNum, staNum, agiNum, chaNum, intNum, shiNum); } function claimWithWhitelist(uint256 tokenId, uint256 genderId, uint256 raceId, uint256 elementId, uint256 strNum, uint256 staNum, uint256 agiNum, uint256 chaNum, uint256 intNum, uint256 shiNum) public nonReentrant { require(tokenId >= 1 && tokenId <= 999 , "Token ID invalid"); require(toolContract.checkExistWhitelist(_msgSender()), "Not in whitelist"); toolContract.updateWhitelist(_msgSender()); common(tokenId, genderId, raceId, elementId, strNum, staNum, agiNum, chaNum, intNum, shiNum); } function ownerClaim(uint256 tokenId, uint256 genderId, uint256 raceId, uint256 elementId, uint256 strNum, uint256 staNum, uint256 agiNum, uint256 chaNum, uint256 intNum, uint256 shiNum) public nonReentrant onlyOwner { require(tokenId >= 7800 && tokenId <= 7999, "Token ID invalid"); common(tokenId, genderId, raceId, elementId, strNum, staNum, agiNum, chaNum, intNum, shiNum); // _safeMint(owner(), tokenId); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // 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); } constructor() ERC721("Badge", "Badge") Ownable() { mapList[1][1] = tk_golden; mapList[1][2] = tk_red; mapList[1][3] = tk_orange; mapList[1][4] = tk_blue; mapList[1][5] = tk_green; mapList[1][6] = tk_white; mapList[2][1] = cike_golden; mapList[2][2] = cike_red; mapList[2][3] = cike_orange; mapList[2][4] = cike_blue; mapList[2][5] = cike_green; mapList[2][6] = cike_white; mapList[3][1] = ss_golden; mapList[3][2] = ss_red; mapList[3][3] = ss_orange; mapList[3][4] = ss_blue; mapList[3][5] = ss_green; mapList[3][6] = ss_white; mapList[4][1] = ms_golden; mapList[4][2] = ms_red; mapList[4][3] = ms_orange; mapList[4][4] = ms_blue; mapList[4][5] = ms_green; mapList[4][6] = ms_white; mapList[5][1] = fs_golden; mapList[5][2] = fs_red; mapList[5][3] = fs_orange; mapList[5][4] = fs_blue; mapList[5][5] = fs_green; mapList[5][6] = fs_white; mapList[6][1] = zs_golden; mapList[6][2] = zs_red; mapList[6][3] = zs_orange; mapList[6][4] = zs_blue; mapList[6][5] = zs_green; mapList[6][6] = zs_white; } } library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"addFourTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addOneTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addThreeTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addTwoTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addZeroTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseLootUserMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkExistWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"checkTokenIdAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"genderId","type":"uint256"},{"internalType":"uint256","name":"raceId","type":"uint256"},{"internalType":"uint256","name":"elementId","type":"uint256"},{"internalType":"uint256","name":"strNum","type":"uint256"},{"internalType":"uint256","name":"staNum","type":"uint256"},{"internalType":"uint256","name":"agiNum","type":"uint256"},{"internalType":"uint256","name":"chaNum","type":"uint256"},{"internalType":"uint256","name":"intNum","type":"uint256"},{"internalType":"uint256","name":"shiNum","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"genderId","type":"uint256"},{"internalType":"uint256","name":"raceId","type":"uint256"},{"internalType":"uint256","name":"elementId","type":"uint256"},{"internalType":"uint256","name":"strNum","type":"uint256"},{"internalType":"uint256","name":"staNum","type":"uint256"},{"internalType":"uint256","name":"agiNum","type":"uint256"},{"internalType":"uint256","name":"chaNum","type":"uint256"},{"internalType":"uint256","name":"intNum","type":"uint256"},{"internalType":"uint256","name":"shiNum","type":"uint256"},{"internalType":"uint256","name":"lootId","type":"uint256"}],"name":"claimWithLoot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"genderId","type":"uint256"},{"internalType":"uint256","name":"raceId","type":"uint256"},{"internalType":"uint256","name":"elementId","type":"uint256"},{"internalType":"uint256","name":"strNum","type":"uint256"},{"internalType":"uint256","name":"staNum","type":"uint256"},{"internalType":"uint256","name":"agiNum","type":"uint256"},{"internalType":"uint256","name":"chaNum","type":"uint256"},{"internalType":"uint256","name":"intNum","type":"uint256"},{"internalType":"uint256","name":"shiNum","type":"uint256"}],"name":"claimWithWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"costUserTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getAgility","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCharisma","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCostUserTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getElement","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGender","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getIntelligence","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOccupation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOccupationColor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOccupationType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRace","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRealLootUserMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRealMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getShield","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStamina","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStrength","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTrait1","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTrait2","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTrait3","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getTraitColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsedTokenIdArr","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lootAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lootUserMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"uint256","name":"genderId","type":"uint256"},{"internalType":"uint256","name":"raceId","type":"uint256"},{"internalType":"uint256","name":"elementId","type":"uint256"},{"internalType":"uint256","name":"strNum","type":"uint256"},{"internalType":"uint256","name":"staNum","type":"uint256"},{"internalType":"uint256","name":"agiNum","type":"uint256"},{"internalType":"uint256","name":"chaNum","type":"uint256"},{"internalType":"uint256","name":"intNum","type":"uint256"},{"internalType":"uint256","name":"shiNum","type":"uint256"}],"name":"ownerClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"uint256","name":"newLootUserMintPrice","type":"uint256"}],"name":"setLootUserMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTotalSupply","type":"uint256"}],"name":"setMaxTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintPrice","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":[],"name":"toolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"updateRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
662386f26fc10000600c8190556618de76816d8000600d819055600e91909155600f556103e860105560006011819055611f3f60125560138190556014819055601581905560168190556017556019805473ff9c1b15b16263c61d017ee9f65c50e4ae0113d76001600160a01b03199182168117909255601a80548216909217909155601b8054733cf98f80194a273cf36658e60861e8bcc82d25f89083168117909155601c8054909216179055600460e0908152634d616c6560e01b61010052608090815260066101209081526546656d616c6560d01b6101405260a0526101a06040526007610160908152662ab735b737bbb760c91b6101805260c0526200010e90602090600362005617565b506040805160e081018252600560a0820181815264223bb0b93360d91b60c084015282528251808401845281815264243ab6b0b760d91b602082810191909152808401919091528351808501855260098152682734b3b43a1022b63360b91b8183015283850152835180850185528281526411da585b9d60da1b8183015260608401528351808501909452600684526523b7b13634b760d11b908401526080820192909252620001c291602191906200567b565b506040805160c081018252600460808201818152634669726560e01b60a08401528252825180840184526005808252642bb0ba32b960d91b60208381019190915280850192909252845180860186529081526408ac2e4e8d60db1b81830152838501528351808501909452600384526220b4b960e91b908401526060820192909252620002539160229190620056cd565b506040805160808101825260168183018181527f4a7573746963696172206f66204d65746176657273650000000000000000000060608401528252825180840190935282527f4d657461766572736520506c616e657368696674657200000000000000000000602083810191909152810191909152620002d89060239060026200571f565b50604080516101a0810182526005610160820190815264526f67756560d81b610180830152815281518083018352600881526720b9b9b0b9b9b4b760c11b6020828101919091528083019190915282518084018452600c81526b29b430b237bbb230b731b2b960a11b818301528284015282518084018452600b8082526a23bab4b632102a3434b2b360a91b82840152606084019190915283518085018552601381527f4b697368692043686172676572204b6973686900000000000000000000000000818401526080840152835180850185526009808252684e696e6a612053707960b81b8285015260a085019190915284518086018652600681526559616b757a6160d01b8185015260c085015284518086018652600d81526c29b630b0b210213937b7b232b960991b8185015260e0850152845180860186529081526813dc98c814d8dbdd5d60ba1b8184015261010084015283518085018552600a81526915da5b190814d8dbdd5d60b21b818401526101208401528351808501909452600e84526d2732b73a3cb0b910243ab73a32b960911b918401919091526101408201929092526200048e916024919062005771565b5060405180610120016040528060405180604001604052806012815260200171121d5b9d195c881bd9881d1a19481119585960721b81525081526020016040518060400160405280600d81526020016c14195c999958dd0815da59da1d609a1b81525081526020016040518060400160405280600c81526020016b29bbb7b932102230b731b2b960a11b81525081526020016040518060400160405280600a8152602001692bb4b7323bb0b635b2b960b11b81525081526020016040518060400160405280600a8152602001692337b290243ab73a32b960b11b81525081526020016040518060400160405280600e81526020016d223ab733b2b7b7102232b63b32b960911b81525081526020016040518060400160405280600981526020016829b83cb6b0b9ba32b960b91b81525081526020016040518060400160405280600d81526020016c151a1a59598b5058dc9bd8985d609a1b81525081526020016040518060400160405280600b81526020016a23b437b9ba3bb0b635b2b960a91b815250815250602590600962000627929190620057c3565b506040805161012081018252600b60e082018181526a2634b332b23934b735b2b960a91b610100840152825282518084018452600c81526b14da18591bddc81059195c1d60a21b60208281019190915280840191909152835180850185528281526a26b0b3b296a5b4b63632b960a91b818301528385015283518085018552600a815269109b1bdbd91a1bdd5b9960b21b81830152606084015283518085018552600f81526e4d6173746572206f6620466c69657360881b818301526080840152835180850185529182526a2932b21020bb32b733b2b960a91b8282015260a08301919091528251808401909352600d83526c20b930b1b43732b6b0b731b2b960991b9083015260c08101919091526200074690602690600762005815565b506040805161012081018252601560e082019081527f4469736369706c65206f66204261616c7a6562756c0000000000000000000000610100830152815281518083018352601481527f4469736369706c65206f6620446973706174657200000000000000000000000060208281019190915280830191909152825180840184526008808252672337b939b0b5b2b960c11b828401528385019190915283518085018552601881527f426179757368692044656365697665722042617975736869000000000000000081840152606084015283518085018552908152674461726b6d61736b60c01b81830152608083015282518084018452600e81526d566f696420496e6361726e61746560901b8183015260a08301528251808401909352600b83526a26b0b3b290243ab73a32b960a91b9083015260c08101919091526200089490602790600762005815565b506040805160e081018252601460a082019081527f536861646f7764616e636520417373617373696e00000000000000000000000060c0830152815281518083018352600c8082526b14da18591bddc814d8dbdd5d60a21b60208381019190915280840192909252835180850185529081526b29b430b832b9b434b33a32b960a11b8183015282840152825180840184526009815268536f756c626c61646560b81b8183015260608301528251808401909352600b83526a14da18591bddc8135a5b9960aa1b908301526080810191909152620009769060289060056200567b565b506040805161010081018252600a60c08201908152691499590815da5e985c9960b21b60e0830152815281518083018352600f81526e4d657461204e69676874636c6f616b60881b6020828101919091528083019190915282518084018452601481527f4d7973746963204d6574612057616e6465726572000000000000000000000000818301528284015282518084018452600881526713595d185b5a5b9960c21b81830152606083015282518084018452600b81526a2830b6329026b0b9ba32b960a91b8183015260808301528251808401909352600c83526b2a393aba341029b2b2b5b2b960a11b9083015260a081019190915262000a7d90602990600662005867565b506040518061048001604052806040518060400160405280600481526020016310985c9960e21b815250815260200160405180604001604052806005815260200164111c9d5a5960da1b81525081526020016040518060400160405280600881526020016729b7b931b2b932b960c11b81525081526020016040518060400160405280600681526020016515da5e985c9960d21b81525081526020016040518060400160405280600a8152602001692637b932b6b0b9ba32b960b11b81525081526020016040518060400160405280601481526020017f546872616c6c206f662044656d6f676f72676f6e00000000000000000000000081525081526020016040518060400160405280600f81526020016e151a1c985b1b081bd98811dc985e9d608a1b8152508152602001604051806040016040528060118152602001700a8d0e4c2d8d840decc4094eac4d2d8caf607b1b81525081526020016040518060400160405280600f81526020016e546872616c6c206f66204f7263757360881b815250815260200160405180604001604052806009815260200168155c8b541c9a595cdd60ba1b81525081526020016040518060400160405280600b81526020016a15995c9b5a5b88131bdc9960aa1b81525081526020016040518060400160405280601081526020016f2437b93732b2102430b93134b733b2b960811b81525081526020016040518060400160405280600c81526020016b13d8dd5b185c881059195c1d60a21b81525081526020016040518060400160405280600a81526020016929b4b63b32b939ba30b960b11b81525081526020016040518060400160405280600e81526020016d57656172206f6620507572706c6560901b81525081526020016040518060400160405280600e81526020016d417263616e65204465766f74656560901b81525081526020016040518060400160405280600b81526020016a29b832b6363230b731b2b960a91b81525081526020016040518060400160405280601381526020017f5370656c6c66697265204368616e6e656c65720000000000000000000000000081525081526020016040518060400160405280601481526020017f5761722057697a617264206f6620436f726d797200000000000000000000000081525081526020016040518060400160405280601081526020016f42616e65206f6620496e666964656c7360801b815250815260200160405180604001604052806008815260200167213634b3b43a32b960c11b81525081526020016040518060400160405280600d81526020016c566f6964204469736369706c6560981b81525081526020016040518060400160405280600c81526020016b2bb4ba31b410243ab73a32b960a11b81525081526020016040518060400160405280600e81526020016d456c76656e48696768204d61676560901b81525081526020016040518060400160405280601181526020017022b6b0b731b4b830ba32b21029b830bbb760791b81525081526020016040518060400160405280600f81526020016e125b1b1a5d1a1a590814d85d985b9d608a1b81525081526020016040518060400160405280600581526020016414de589a5b60da1b81525081526020016040518060400160405280600f81526020016e165d585b8b551a4810dd5b1d1a5cdd608a1b815250815260200160405180604001604052806011815260200170109b1858dad19b185b59481699585b1bdd607a1b81525081526020016040518060400160405280601581526020017f5261756d61746861726920426174746c656d616765000000000000000000000081525081526020016040518060400160405280601381526020017f54616c6f6e74617220426c696768746c6f72640000000000000000000000000081525081526020016040518060400160405280600d81526020016c4265686f6c646572204d61676560981b81525081526020016040518060400160405280600a815260200169293ab732b1b0b9ba32b960b11b8152508152602001604051806040016040528060118152602001705a68656e746172696d20536b796d61676560781b81525081526020016040518060400160405280600b81526020016a092dcc6c2dce8c2e8e4d2f60ab1b81525081526020016040518060400160405280600d81526020016c26b0b9ba32b9102430b93832b960991b815250815250602a906024620010d8929190620058b9565b50604080516103e08101825260106103a082018181526f20b931b0b732902a3934b1b5b9ba32b960811b6103c08401819052908352835180850185526008815267417263686d61676560c01b6020828101919091528085019190915284518086018652600f8082526e447261676f6e204469736369706c6560881b828401528587019190915285518087018752600e81526d2437b934bd37b7102bb0b635b2b960911b81840152606086015285518087018752600a808252692637b932b6b0b9ba32b960b11b82850152608087019190915286518088018852600d81526c446976696e65204f7261636c6560981b8185015260a0870152865180880188528281526e14d858dc995908115e1bdc98da5cdd608a1b8185015260c08701528651808801885260098082526815d85c9c1c9a595cdd60ba1b8286015260e088019190915287518089018952601681527f57697a617264206f66204869676820536f7263657279000000000000000000008186015261010088015287518089018952600b8082526a2432b0b93a3bb0b93232b960a91b828701526101208901919091528851808a018a529384526e446976696e65204469736369706c6560881b8486015261014088019390935287518089018952600c8082526b12185c9c195c8814d8dbdd5d60a21b828701526101608901919091528851808a018a526007808252662430ba343930b760c91b828801526101808a01919091528951808b018b52848152691499590815da5e985c9960b21b818801526101a08a01528951808b018b5284815269293ab732b1b0b9ba32b960b11b818801526101c08a01528951808b018b528581526a486172706572204d61676560a81b818801526101e08a01528951808b018b529283526823b2b7b6b0b731b2b960b91b838701526102008901929092528851808a018a5260058152642432bc32b960d91b818701526102208901528851808a018a528381526927b7bd32b6b0b9ba32b960b11b818701526102408901528851808a018a529182526629b434b33a32b960c91b82860152610260880191909152875180890189529081526b08cc2dccedecc4098ded8e8d60a31b8185015261028087015286518088018852948552848301939093526102a0850193909352845180860186528381526a213630b232b9b4b733b2b960a91b818301526102c0850152845180860186529283526a426c6f6f64204d6167757360a81b838201526102e08401929092528351808501855290815269022b73a3937b834b9ba160b51b818301526103008301528251808401845260128152714669656e64206f6620426c61737068656d7960701b8183015261032083015282518084018452601481527f4669656e64206f6620436f7272757074696f6e200000000000000000000000008183015261034083015282518084018452601381527f4669656e64206f6620506f7373657373696f6e0000000000000000000000000081830152610360830152825180840190935260118352705a68656e746172696d20536b796d61676560781b908301526103808101919091526200155a90602b90601d6200590b565b506040805161032081018252600a6102e0820190815269121a595c9bdc1a185b9d60b21b610300830152815281518083018352600e8082526d4d7973746963205468657572676560901b60208381018290528085019390935284518086018652600d8082526c151a185d5b585d1d5c99da5cdd609a1b828601528587019190915285518087018752600c81526b11195b5bdb9bdb1bd9da5cdd60a21b81860152606086015285518087018752600f8082526e21b7b9b6b4b1902232b9b1b93cb2b960891b828701526080870191909152865180880188528181526e446976696e6520456d69737361727960881b8187015260a0870152865180880188526009815268446f6f6d677569646560b81b8187015260c0870152865180880188526008815267417263686d61676560c01b8187015260e0870152865180880188528481526d2137b7329021b7b63632b1ba37b960911b8187015261010087015286518088018852601381527f446561746877617264656e204368616e74657200000000000000000000000000818701526101208701528651808801885260158082527f4569646f6c6f6e63657220636f726520636c61737300000000000000000000008288015261014088019190915287518089018952601681527f48656e7368696e204d79737469632048656e7368696e00000000000000000000818801526101608801528751808901895260188082527f4961696a75747375204d6173746572204961696a757473750000000000000000828901526101808901919091528851808a018a5260118152704d6f746f204176656e676572204d6f746f60781b818901526101a08901528851808a018a52600581526429b4b932b760d91b818901526101c08901528851808a018a528481526c21b0b73236329021b0b9ba32b960991b818901526101e08901528851808a018a529283526e447261676f6e204469736369706c6560881b8388015261020088019290925287518089018952601081526f115b195b595b9d185b0814d85d985b9d60821b81880152610220880152875180890189529182527f4d616765206f662074686520417263616e65204f7264657200000000000000008287015261024087019190915286518088018852600b81526a2237b7b6b23932b0b6b2b960a91b818701526102608701528651808801885293845283850192909252610280850192909252845180860186529081527f5261756d61746861726920426174746c656d6167650000000000000000000000818401526102a0840152835180850190945283526c52756279204469736369706c6560981b908301526102c08101919091526200193a90602c9060176200595d565b5060408051610260810182526009610220820181815268111a58589bdb1a5cdd60ba1b61024084015282528251808401845260148082527f4469736369706c65206f662041736d6f64657573000000000000000000000000602083810191909152808501929092528451808601865260128152712234b9b1b4b836329037b31026b0b6b6b7b760711b818401528486015284518086018652600d81526c223bb2b7b6b2b935b2b2b832b960991b8184015260608501528451808601865260108082526f22b632b6b2b73a30b61020b931b437b760811b82850152608086019190915285518087018752600780825266476f6c6465796560c81b8286015260a087019190915286518088018852600c81526b23b437b9ba1029b630bcb2b960a11b8186015260c087015286518088018852600f8082526e23b737b6b29020b93a34b334b1b2b960891b8287015260e088019190915287518089018952600b8082526a092dcc6c2dce8c2e8e4d2f60ab1b828801526101008901919091528851808a018a52600e81526d141e5c9bdada5b995d1a58da5cdd60921b818801526101208901528851808a018a529081526a29b832b63639b4b733b2b960a91b818701526101408801528751808901895291825266223ab93a3430b760c91b82860152610160870191909152865180880188529081526e2730b9102232b6b7b73134b73232b960891b81850152610180860152855180870187529182527f54656c666c616d6d617220536861646f6c6f7264000000000000000000000000828401526101a0850191909152845180860186529283526815d85c9c1c9a595cdd60ba1b838301526101c084019290925283518085018552600a81526923b934b6902839b4b7b760b11b818301526101e084015283518085019094529083526f131bdc99081bd9881d1a19481119585960821b9083015261020081019190915262001c0490602d906011620059af565b50604080516101e08101825260116101a082018181527021b43ab931b41024b738bab4b9b4ba37b960791b6101c0840152825282518084018452818152704d6173746572206f66205368726f75647360781b6020828101919091528084019190915283518085018552600b81526a223932b0b236b0b9ba32b960a91b81830152838501528351808501855260098082526814dd1bdc9b5b1bdc9960ba1b82840152606085019190915284518086018652600e81526d08af2ca40decc408ee4eaeadae6d60931b8184015260808501528451808601865283815270145d59595b881bd9881d1a194815da5b19607a1b8184015260a0850152845180860186529283527022b63b32b710213630b232b9b4b733b2b960791b8383015260c0840192909252835180850185526008815267105b1a595b9a5cdd60c21b8183015260e084015283518085018552600a81526926b4b7323132b73232b960b11b8183015261010084015283518085018552601081526f2a393ab2902732b1b937b6b0b731b2b960811b8183015261012084015283518085018552600c81526b111a5d9a5b99481059d95b9d60a21b81830152610140840152835180850185529182526829b0b733b2b434b93760b91b828201526101608301919091528251808401909352601483527f5370656c6c6669726520486965726f7068616e740000000000000000000000009083015261018081019190915262001e2590602e90600d62005a01565b5060408051606081018252600b602082019081526a2330ba32b9b834b73732b960a91b9282019290925290815262001e6290602f90600162005a53565b506040805160e081018252600660a08201818152652430b93832b960d11b60c084015282528251808401845290815265436c6572696360d01b6020828101919091528083019190915282518084018452600d8082526c436f6e74656d706c617469766560981b828401528385019190915283518085018552600b81526a5368696e74616f4d6f6e6b60a81b818401526060840152835180850190945283526c15d85c9c9a5bdc8814dad85b19609a1b90830152608081019190915262001f2d9060309060056200567b565b506040805160c081018252600a6080820181815269121a595c9bdc1a185b9d60b21b60a0840152825282518084018452600881526756697274756f736f60c01b6020828101919091528084019190915283518085018552600d81526c12185c9c195c88141c9a595cdd609a1b81830152838501528351808501909452908352692437b9b834ba30b632b960b11b90830152606081019190915262001fd6906031906004620056cd565b5060405180606001604052806040518060400160405280600881526020016756697274756f736f60c01b81525081526020016040518060400160405280600b81526020016a43616e636572204d61676560a81b81525081526020016040518060400160405280601081526020016f13585cdd195c88105b18da195b5a5cdd60821b81525081525060329060036200206f92919062005617565b506040805160808101825260128183019081527120b1b7b63cba32b7b3103a34329029b5b4b760711b606083015281528151808301909252601082526f25b734b3b43a10283937ba32b1ba37b960811b602083810191909152810191909152620020de9060339060026200571f565b50604080516080810182526011818301908152702434b3b410283937b9b2b63cba34bd32b960791b606083015281528151808301909252600d82526c2337b932b9ba1026b0b9ba32b960991b602083810191909152810191909152620021499060349060026200571f565b50604080516060810182526009602082019081526823b7b21022b0ba32b960b91b928201929092529081526200218490603590600162005a53565b506040805160c081018252600660808201908152652930b733b2b960d11b60a0830152815281518083018352600d8082526c20b931b0b7329020b931b432b960991b60208381019190915280840192909252835180850185529081526c26b7b93a30b610243ab73a32b960991b81830152828401528251808401909352600e83526d2832b2b93632b9b9a0b931b432b960911b90830152606081019190915262002233906036906004620056cd565b506040805160808101825260188183019081527f4f726465726f662074686520426f7720496e6974696174650000000000000000606083015281528151808301909252601382527f436f6e7365637261746564204861727269657200000000000000000000000000602083810191909152810191909152620022ba9060379060026200571f565b506040805160808101825260118183019081527020b93137b932b0b61023bab0b93234b0b760791b606083015281528151808301909252600f82526e2232b2b83bb7b7b21029b734b832b960891b602083810191909152810191909152620023279060389060026200571f565b50604080516060810182526017602082019081527f48616c666c696e67576172736c696e6720536e69706572000000000000000000928201929092529081526200237690603990600162005a53565b50604080516060810182526014602082019081527f45786f74696320576561706f6e204d617374657200000000000000000000000092820192909252908152620023c590603a90600162005a53565b50604080516060810182526017602082019081527f4d6173746572206f6620746865204d6574617665727365000000000000000000928201929092529081526200241490603b90600162005a53565b5060405180606001604052806040518060400160405280601081526020016f223bb0b93b32b7102232b332b73232b960811b81525081526020016040518060400160405280600f81526020016e21b0b93b32b7102232b332b73232b960891b81525081526020016040518060400160405280601481526020017f477561726469616e206f662074686520526f6164000000000000000000000000815250815250603c906003620024c692919062005617565b5060408051608081018252600c8183019081526b23b4b0b73a16a5b4b63632b960a11b606083015281528151808301909252601082526f2a3934b130b610283937ba32b1ba37b960811b6020838101919091528101919091526200252f90603d9060026200571f565b5060408051608081018252600b8183019081526a13dc98c815d85c9b1bdc9960aa1b60608301528152815180830190925260098252680a8cac6d0e6dad2e8d60bb1b6020838101919091528101919091526200259090603e9060026200571f565b5060408051608081018252600d8183019081526c29b1b0b632b2102437b93937b960991b606083015281528151808301909252600f82526e2832b7b836329021b430b6b834b7b760891b602083810191909152810191909152620025f990603f9060026200571f565b50604080516060810182526015602082019081527f4d617374657220417263616e65204172746973616e0000000000000000000000828401528152620026429190600162005a53565b5060405180606001604052806040518060400160405280600981526020016820bab9b834b1b4b0b760b91b81525081526020016040518060400160405280601381526020017f4b657368656e20426c6164656d6173746572200000000000000000000000000081525081526020016040518060400160405280601481526020017f5761726c6f7264206f66204d65746176657273650000000000000000000000008152508152506041906003620026fb92919062005617565b50604080516101608101825260076101208201908152662830b630b234b760c91b610140830152815281518083018352600e8082526d2437b63c902634b132b930ba37b960911b6020838101919091528084019290925283518085018552600f81526e2234bb34b7329021b430b6b834b7b760891b818401528385015283518085018552600c81526b15995c99185b9d08131bdc9960a21b81840152606084015283518085018552600d81526c45756e7563685761726c6f636b60981b81840152608084015283518085018552600b81526a23b0ba32b1b930b9b432b960a91b8184015260a084015283518085018552601081526f0283630b730b91021b430b6b834b7b7160851b8184015260c0840152835180850185529081526d029b83ab9103a3432902637b932160951b8183015260e08301528251808401909352601583527f5073796368696320576561706f6e204d61737465720000000000000000000000908301526101008101919091526200287b906042906009620057c3565b50604051806101c001604052806040518060400160405280600f81526020016e115b191c9a5d18da0812db9a59da1d608a1b8152508152602001604051806040016040528060078152602001662a32b6b83630b960c91b81525081526020016040518060400160405280601081526020016f4b6e69676874206f66204e6572616b6160801b8152508152602001604051806040016040528060128152602001714b6e69676874206f6620536f6c616d6e696160701b81525081526020016040518060400160405280600b81526020016a105b9a5b585b08131bdc9960aa1b81525081526020016040518060400160405280600c81526020016b2132b0b9102bb0b93934b7b960a11b81525081526020016040518060400160405280600a81526020016926b0b43796a13ab534b760b11b81525081526020016040518060400160405280600b81526020016a4d61686f2d5473756b616960a81b81525081526020016040518060400160405280600e81526020016d2937bcb0b61022bc383637b932b960911b81525081526020016040518060400160405280600d81526020016c53686f75204469736369706c6560981b81525081526020016040518060400160405280600d81526020016c2a3430bcb0b71029b630bb32b960991b8152508152602001604051806040016040528060078152602001664265727365726b60c81b815250815260200160405180604001604052806011815260200170029b7b63234b2b91037b3102634b3b43a1607d1b81525081526020016040518060400160405280600a8152602001692634b3329022b0ba32b960b11b815250815250604390600e62002aea92919062005aa5565b506040805161026081018252601561022082018181527f4b6e69676874206f6620746865204368616c6963650000000000000000000000610240840152825282518084018452600b81526a14d858dc995908119a5cdd60aa1b6020828101919091528084019190915283518085018552600f8082526e20b3b2b73a102932ba3934b2bb32b960891b828401528486019190915284518086018652600d8082526c2234bb34b7329029b2b2b5b2b960991b8285015260608601919091528551808701875260128152714569646f6c6f6e20636f726520636c61737360701b818501526080860152855180870187529182526e57617463682044657465637469766560881b8284015260a0850191909152845180860186526009808252682bb4b7323934b232b960b91b8285015260c0860191909152855180870187528281526c2130ba3a36329026b0b4b232b760991b8185015260e086015285518087018752600c8082526b213630b232902230b731b2b960a11b8286015261010087019190915286518088018852600881526729bab93b34bb37b960c11b8186015261012087015286518088018852918252682bb0bb32b934b232b960b91b82850152610140860191909152855180870187529182526c2437b9323290213932b0b5b2b960991b82840152610160850191909152845180860186529081526b44726561642050697261746560a01b8183015261018084015283518085018552600a81526914dc195b1b1cdddbdc9960b21b818301526101a084015283518085018552600e81526d576179666572657220477569646560901b818301526101c084015283518085018552601781527f41676c61726f6e64616e2047726966666f6e7269646572000000000000000000818301526101e084015283518085019094529083527f52756e6573636172726564204265727365726b657200000000000000000000009083015261020081019190915262002dc5906044906011620059af565b50604080516102a081018252601361026082018181527f57617272696f72206f66204461726b6e65737300000000000000000000000000610280840152825282518084018452601481527f4c6567696f6e6e61697265206f6620537465656c000000000000000000000000602082810191909152808401919091528351808501855260128082527111dd585c991a585b8814185c985b5bdd5b9d60721b828401528486019190915284518086018652600e81526d155b9a5bdb8814d95b9d1a5b995b60921b8184015260608501528451808601865281815271233932b73d34b2b2102132b939b2b935b2b960711b81840152608085015284518086018652600f8082526e54616d6572206f662042656173747360881b8285015260a08601919091528551808701875260078082526615195b5c195cdd60ca1b8286015260c087019190915286518088018852601881527f446169646f6a69426f6479677561726420446169646f6a6900000000000000008186015260e087015286518088018852600c8082526b546174746f6f65644d6f6e6b60a01b8287015261010088019190915287518089018952600b81526a427265616368676e6f6d6560a81b818701526101208801528751808901895284815271223bb0b93b32b72130ba3a3632b930b3b2b960711b81870152610140880152875180890189529384527111dc99585d149a599d0814dade59dd585c9960721b8486015261016087019390935286518088018852600a8082526913dc98d5d85c9b1bdc9960b21b82870152610180880191909152875180890189529283526e4d61737465726f6620436861696e7360881b838601526101a087019290925286518088018852600d81526c4d617374657253616d7572616960981b818601526101c087015286518088018852908152662930bb30b3b2b960c91b818501526101e08601528551808701875260098152682bb0b936b0b9ba32b960b91b81850152610200860152855180870187529182526b2bb2b0b837b726b0b9ba32b960a11b828401526102208501919091528451808601909552845269135a5b991adb9a59da1d60b21b90840152610240820192909252620030f6916045919062005af7565b50604080516103408101825260096103008201818152682130b93130b934b0b760b91b6103208401528252825180840184526007808252662334b3b43a32b960c91b602083810191909152808501929092528451808601865260048152634d6f6e6b60e01b818401528486015284518086018652600a815269109b1858dad9dd585c9960b21b8184015260608501528451808601865281815266111d595b1a5cdd60ca1b8184018190526080860191909152855180870187528281526641726163686e6560c81b8185015260a086015285518087018752600c8082526b29ba3934b332b632b0b232b960a11b8286015260c087019190915286518088018852600b81526a15d85d995cd95c9d985b9d60aa1b8186015260e087015286518088018852601481527f507572706c6520447261676f6e204b6e6967687400000000000000000000000081860152610100870152865180880188526011808252704869646120446566656e6465724869646160781b828701526101208801919091528751808901895260108082526f4d616e746973204d657263656e61727960801b828801526101408901919091528851808a018a52600f81526e29b434b13090283937ba32b1ba37b960891b818801526101608901528851808a018a52600e8082526d02bb2b0b837b71026b0b9ba32b9160951b828901526101808a01919091528951808b018b5260068082526529b630bcb2b960d11b828a01526101a08b01919091528a51808c018c5289815268566967696c616e746560b81b818a01526101c08b01528a51808c018c52600881526721b0bb30b634b2b960c11b818a01526101e08b01528a51808c018c529283526f2232bb37ba32b2102232b332b73232b960811b838901526102008a01929092528951808b018b528181526d22393ab735b2b71026b0b9ba32b960911b818901526102208a01528951808b018b5295865285870194909452610240880194909452875180890189529283526d2334b9ba1037b3102432bc3a37b960911b83860152610260870192909252865180880188529485526823b630b234b0ba37b960b91b8585015261028086019490945285518087018752908152702430b6333634b7339027baba3934b232b960791b818401526102a085015284518086018652908152652630b9b432b960d11b818301526102c084015283518085019094529083526b151a1e585b8812db9a59da1d60a21b908301526102e08101919091526200349190604690601862005b49565b5060405180610f0001604052806040518060400160405280600d81526020016c20b236b4b734b9ba3930ba37b960991b81525081526020016040518060400160405280600e81526020016d456c757369766520536861646f7760901b81525081526020016040518060400160405280600581526020016423b0b6b2b960d91b81525081526020016040518060400160405280600681526020016547656e69757360d01b81525081526020016040518060400160405280600d81526020016c4772657920456d696e656e636560981b815250815260200160405180604001604052806008815260200167125b5b5bdc9d185b60c21b81525081526020016040518060400160405280600d81526020016c135a59185cc8151bdd58da1959609a1b8152508152602001604051806040016040528060068152602001654d797374696360d01b81525081526020016040518060400160405280601481526020017f4272696c6c69616e74205374726174656769737400000000000000000000000081525081526020016040518060400160405280601681526020017f4368617269736d61746963204e65676f746961746f720000000000000000000081525081526020016040518060400160405280600f81526020016e2337b93a3ab73290213ab4b63232b960891b81525081526020016040518060400160405280601581526020017f4d61737465726d696e64205468656f6c6f6769616e000000000000000000000081525081526020016040518060400160405280600e81526020016d2730b4bb329020b83832b0b9b2b960911b81525081526020016040518060400160405280601081526020016f13985a5d9948115b9d1a1d5cda585cdd60821b815250815260200160405180604001604052806006815260200165139d591a5cdd60d21b815250815260200160405180604001604052806009815260200168141bdcdcd95cdcd95960ba1b8152508152602001604051806040016040528060098152602001685269676874656f757360b81b81525081526020016040518060400160405280601181526020017029b5b4b63632b2102a30b1ba34b1b4b0b760791b815250815260200160405180604001604052806008815260200167151bdb195c985b9d60c21b81525081526020016040518060400160405280601281526020017120b6b0ba32bab934b9b410283637ba3a32b960711b815250815260200160405180604001604052806009815260200168416d626974696f757360b81b815250815260200160405180604001604052806009815260200168105c98da1a5d1958dd60ba1b81525081526020016040518060400160405280601781526020017f4172636869746563747572616c20566973696f6e61727900000000000000000081525081526020016040518060400160405280600a81526020016910995b995d9bdb195b9d60b21b81525081526020016040518060400160405280600b81526020016a109bd91e48141d5c9a5cdd60aa1b81525081526020016040518060400160405280600881526020016711dc9858d9599d5b60c21b81525081526020016040518060400160405280601181526020017026b4b9b3bab4b232b2102bb0b93934b7b960791b81525081526020016040518060400160405280600981526020016828343cb9b4b1b4b0b760b91b81525081526020016040518060400160405280601481526020017f5363686f6c61726c79205468656f6c6f6769616e00000000000000000000000081525081526020016040518060400160405280600b81526020016a29b832b2b2102232b6b7b760a91b81525081526020016040518060400160405280600a8152602001692a3432b7b637b3b4b0b760b11b815250815260200160405180604001604052806009815260200168151bdbc814db585c9d60ba1b81525081526020016040518060400160405280600d81526020016c2a37bab3b41029b7b63234b2b960991b8152508152602001604051806040016040528060078152602001665a65616c6f757360c81b81525081526020016040518060400160405280600981526020016841726269747261727960b81b8152508152602001604051806040016040528060078152602001664173636574696360c81b815250815260200160405180604001604052806007815260200166105cd95e1d585b60ca1b81525081526020016040518060400160405280601081526020016f2130b1313634b73390213ab33337b7b760811b815250815260200160405180604001604052806008815260200167109a5cd95e1d585b60c21b815250815260200160405180604001604052806009815260200168109b1bdbd91b1d5cdd60ba1b81525081526020016040518060400160405280600b81526020016a2137b23c9026b7b23232b960a91b815250815260200160405180604001604052806011815260200170426f726e20496e74686520507572706c6560781b81525081526020016040518060400160405280600781526020016646657274696c6560c81b8152508152602001604051806040016040528060118152602001702334b2b931b2902732b3b7ba34b0ba37b960791b81525081526020016040518060400160405280600381526020016247617960e81b81525081526020016040518060400160405280600581526020016411da585b9d60da1b81525081526020016040518060400160405280600a815260200169477265676172696f757360b01b8152508152602001604051806040016040528060088152602001671219591bdb9a5cdd60c21b81525081526020016040518060400160405280600881526020016724b237b634bd32b960c11b815250815260200160405180604001604052806008815260200167125c9bdb8811dd5d60c21b81525081526020016040518060400160405280600c81526020016b4b65656e2048656172696e6760a01b81525081526020016040518060400160405280600a8152602001691319599d1a185b99195960b21b81525081526020016040518060400160405280600b81526020016a2634b3b43a1022b0ba32b960a91b81525081526020016040518060400160405280600a815260200169131bddc8151a1a5c9cdd60b21b81525081526020016040518060400160405280600e81526020016d4d61727469616c20436c6572696360901b81525081526020016040518060400160405280600c81526020016b4f7574204f6620536861706560a01b81525081526020016040518060400160405280600b81526020016a27baba3237b7b939b6b0b760a91b815250815260200160405180604001604052806007815260200166141b185e599d5b60ca1b815250815260200160405180604001604052806006815260200165149bd89d5cdd60d21b81525081526020016040518060400160405280600781526020016629b1b432b6b2b960c91b81525081526020016040518060400160405280600781526020016629b1b437b630b960c91b81525081526020016040518060400160405280600981526020016853656372657469766560b81b81525081526020016040518060400160405280600781526020016629b2b23ab1b2b960c91b81525081526020016040518060400160405280600a8152602001695365647563747265737360b01b81525081526020016040518060400160405280600381526020016253687960e81b81525081526020016040518060400160405280600b81526020016a29b637bb902932b0b232b960a91b81525081526020016040518060400160405280600a81526020016914dd1c985d1959da5cdd60b21b81525081526020016040518060400160405280600681526020016553747572647960d01b81525081526020016040518060400160405280600f81526020016e151bdc9d1d5c995908105c9d1a5cdd608a1b815250815260200160405180604001604052806011815260200170556e64657268616e64656420526f67756560781b81525081526020016040518060400160405280600781526020016615d85ad9599d5b60ca1b81525081526020016040518060400160405280600c81526020016b15d95b1b0810591d9a5cd95960a21b81525081526020016040518060400160405280600e81526020016d15d95b1b0810dbdb9b9958dd195960921b8152508152602001604051806040016040528060068152602001651699585b1bdd60d21b81525081526020016040518060400160405280600a8152602001695079726f6d616e69616360b01b81525081526020016040518060400160405280600d81526020016c28bab4b1b59029b632b2b832b960991b81525081526020016040518060400160405280601081526020016f2932b9ba3632b9b99029b632b2b832b960811b81525081526020016040518060400160405280600c81526020016b0a6c6c2e4e4cac84090d2ced60a31b81525081526020016040518060400160405280601081526020016f14d95d995c995b1e48125b9a9d5c995960821b81525081526020016040518060400160405280600d81526020016c14da1bdc9d0814da59da1d1959609a1b81525081526020016040518060400160405280600d81526020016c53696c76657220546f6e67756560981b81525081526020016040518060400160405280600a81526020016914db19595c1e5a19585960b21b81525081526020016040518060400160405280600681526020016529b6b7b5b2b960d11b81525081526020016040518060400160405280600a81526020016929b7b1b4b0b634bd32b960b11b81525081526020016040518060400160405280600f81526020016e546163746963616c2047656e69757360881b81525081526020016040518060400160405280601281526020017154726f75626c656420507265676e616e637960701b8152508152602001604051806040016040528060088152602001675472757374696e6760c01b8152508152602001604051806040016040528060048152602001632a3bb4b760e11b81525081526020016040518060400160405280600d81526020016c2ab73232b933b937bab73232b960991b81525081526020016040518060400160405280600b81526020016a155b99195c9dd95a59da1d60aa1b81525081526020016040518060400160405280601081526020016f15995c9e48155b99195c9dd95a59da1d60821b81525081526020016040518060400160405280600c81526020016b0aecac2d640a6e8dedac2c6d60a31b81525081526020016040518060400160405280600781526020016615da5b1b199d5b60ca1b8152508152602001604051806040016040528060058152602001640aee4dee8d60db1b81525081526020016040518060400160405280600781526020016610985cdd185c9960ca1b81525081526020016040518060400160405280600f81526020016e10da1a5b190813d998dbdb9cdbdc9d608a1b815250815260200160405180604001604052806005815260200164223bb0b93360d91b815250815260200160405180604001604052806006815260200165466565626c6560d01b8152508152602001604051806040016040528060058152602001642332bb32b960d91b81525081526020016040518060400160405280600e81526020016d466f6f6420506f69736f6e696e6760901b81525081526020016040518060400160405280600e81526020016d4861726420507265676e616e637960901b8152508152602001604051806040016040528060078152602001660486172656c69760cc1b81525081526020016040518060400160405280600b81526020016a486173204d6561736c657360a81b81525081526020016040518060400160405280600d81526020016c090c2e640a6dac2d8d840a0def609b1b81525081526020016040518060400160405280601081526020016f48617320547562657263756c6f73697360801b8152508152602001604051806040016040528060118152602001702430b9902a3cb83437b4b2102332bb32b960791b81525081526020016040518060400160405280600781526020016624b6b830b632b960c91b815250815260200160405180604001604052806008815260200167125b991bdb195b9d60c21b815250815260200160405180604001604052806009815260200168125b991d5b19d95b9d60ba1b81525081526020016040518060400160405280600981526020016824b73332b1ba34b7b760b91b815250815260200160405180604001604052806006815260200165496e6669726d60d01b81525081526020016040518060400160405280600481526020016304c6973760e41b81525081526020016040518060400160405280600a8152602001694c6f6f7365204c69707360b01b8152508152602001604051806040016040528060058152602001644f6265736560d81b81525081526020016040518060400160405280600881526020016713db9948115e595960c21b81525081526020016040518060400160405280600a81526020016913db994812185b99195960b21b81525081526020016040518060400160405280600a81526020016913db9948131959d9d95960b21b81525081526020016040518060400160405280600581526020016414dd1bdd5d60da1b81525081526020016040518060400160405280600881526020016714dd1c995cdcd95960c21b81525081526020016040518060400160405280600a81526020016953797068696c6974696360b01b8152508152506047906078620047db92919062005b9b565b506040805161028081018252600461024082018181526341626c6560e01b610260840152825282518084018452600580825264105b195c9d60da1b602083810191909152808501929092528451808601865260068082526510d85b991a5960d21b828501528587019190915285518087018752828152644672616e6b60d81b8185015260608601528551808701875281815265119c9d59d85b60d21b8185015260808601528551808701875282815264486170707960d81b8185015260a086015285518087018752938452634c617a7960e01b8484015260c08501939093528451808601865283815265135bd9195cdd60d21b8184015260e0850152845180860186528181526414db585c9d60da1b81840152610100850152845180860186528381526553746561647960d01b81840152610120850152845180860186528381526514dd1c9a58dd60d21b81840152610140850152845180860186528381526541637469766560d01b81840152610160850152845180860186528381526510591c9bda5d60d21b818401526101808501528451808601865281815264426f73737960d81b818401526101a08501528451808601865281815264427261766560d81b818401526101c08501528451808601865283815265436172696e6760d01b818401526101e0850152845180860186529081526446756e6e7960d81b8183015261020084015283518085019094529083526548656172747960d01b9083015261022081019190915262004a1390604890601262005bed565b506040805160c0810182526000815260046020820152600f918101919091526029606082015260526080820152606360a082015262004a5790604990600662005c3f565b506040805160c08101825260048152600e6020820152601d918101919091526030606082015260476080820152606360a082015262004a9b90604a90600662005c3f565b506040805160c081018252600781526012602082015260219181019190915260496060820152605d6080820152608160a082015262004adf90604b90600662005c3f565b5034801562004aed57600080fd5b50604080518082018252600580825264426164676560d81b60208084018281528551808701909652928552840152815191929162004b2e9160009162005c90565b50805162004b4490600190602084019062005c90565b50506001600a555062004b5733620055c5565b60016000526000805160206200b62d833981519152602052603b805462004ba0917f876c8b603817fe341b99bfd7e07b22687c3aac30e837767b05080faf2e75977f9162005d0d565b5060026000526000805160206200b62d8339815191526020526040805462004bea917f055726f87cb1fe242e471f635c38adc73c958be921fb0b70a0a8ae332df48bb09162005d0d565b5060036000526000805160206200b62d833981519152602052603f805462004c34917fc137e2c483cb51ec06fd7d2908969a35a02bc717a76d1966c9158a465d66a4ef9162005d0d565b5060046000526000805160206200b62d833981519152602052603e805462004c7e917f227c68f7b02ee5bd6034385390b1a05f3c4739eecf6c525666617c11222bb8579162005d0d565b5060056000526000805160206200b62d833981519152602052603d805462004cc8917f4b18e0011d956e2b234f4e13524ffd6d37c1c52d770ad2afd137a30a9c0424ff9162005d0d565b5060066000526000805160206200b62d833981519152602052603c805462004d12917f595c38f62e87a776a2affec3b54af4c1cffc2cba0ba51c8ad313ef11ef7b5d3b9162005d0d565b5060016000526000805160206200b60d8339815191526020526023805462004d5c917f49aa531f63e35fc03741b86b7305585d292855904e151c61c96b31fc2732dcd89162005d0d565b5060026000526000805160206200b60d8339815191526020526028805462004da6917f9b3e3c4a5fa6b43ad091a7fedbba15539f31f774b6d7a83b27fb10a72768b9c59162005d0d565b5060036000526000805160206200b60d8339815191526020526027805462004df0917ff90fd2129e6be058884076abfa8fccfd0ae07a139befe4a433b7755f90f3ffc79162005d0d565b5060046000526000805160206200b60d8339815191526020526026805462004e3a917f7612e040f26894829b2d31a8ba792b5adfa8f806b6bdce92158d12897084e1b69162005d0d565b5060056000526000805160206200b60d8339815191526020526025805462004e84917f7da2f890b83880ac7ef142e68356fddb1aa327f8a8ecae8cf9531c4788f64c839162005d0d565b5060066000526000805160206200b60d8339815191526020526024805462004ece917f79ac6535656923d838ac7668bc5b514a1e7c7850bddb4c86be2f88d645d4d49d9162005d0d565b5060016000526000805160206200b64d8339815191526020526035805462004f18917f6f8071a28f23095912d6679d1efebc44fe6a941f185a4fd07d2bb51802e1bc359162005d0d565b5060026000526000805160206200b64d833981519152602052603a805462004f62917f83b3c89fca915b4f21a4588caa0642d8f726407df119ad3263a8dbb0f7945bda9162005d0d565b5060036000526000805160206200b64d8339815191526020526039805462004fac917fa9ec85074db6f8406c4fb9e6b78ae35cddc8cc2f687a40e5f202211f3e99f8639162005d0d565b5060046000526000805160206200b64d8339815191526020526038805462004ff6917f09cf4e5b927b8ac9023cf50573c9af412952e29efed43118a09a53871314fccc9162005d0d565b5060056000526000805160206200b64d8339815191526020526037805462005040917ff00dc11c73225b14c7418af16ceb763738356f3d6a70b1c6084a9e04e1f9769c9162005d0d565b5060066000526000805160206200b64d833981519152602052603680546200508a917f5b3dd7c9e934a983379ddc7944e31e16331de2a147ecb807ff465da4d442bab29162005d0d565b5060016000526000805160206200b66d833981519152602052602f8054620050d4917fbd2691fc98a1a41fae8c68ff568c1ee765aabc672d8b485ed0b0eed3b6ff6f8d9162005d0d565b5060026000526000805160206200b66d833981519152602052603480546200511e917fe27c929a2b12c7f76ee62a174984b71d6f72c8461a150267e43967ee67a30b4d9162005d0d565b5060036000526000805160206200b66d8339815191526020526033805462005168917f0537d0094b9af1b93d66a3184e7a6a100c91f673035fb087abc3117fbcd905ca9162005d0d565b5060046000526000805160206200b66d83398151915260205260328054620051b2917f3185e821bfdb85deedc4e6a9ab520ba05fa332b82aacb9426d1c3c8bd9c7cd1f9162005d0d565b5060056000526000805160206200b66d83398151915260205260318054620051fc917f711d2d0bc465878928e574b7e52d19f04e0d1b52d477f70405289761f32c6b219162005d0d565b5060066000526000805160206200b66d8339815191526020526030805462005246917f51bd9f3a8592c046ccfd1a861b90a8b369a59e02259960ba8300797989c8180a9162005d0d565b5060016000526000805160206200b5cd8339815191526020526029805462005290917f61b12c2415ba3724dd62260e7bf7bf9d1cda99cf49df2faf445ec1c04eb9a67b9162005d0d565b5060026000526000805160206200b5cd833981519152602052602e8054620052da917f2e711b602749293d559fc006b5f8cabbf2f0d2fd0c7b9fd3327afed59178e8e09162005d0d565b5060036000526000805160206200b5cd833981519152602052602d805462005324917f45d18b77fee33d004bc76ee91ea3eb2fa876a8ca6d79f81403e0f1a3f92b373d9162005d0d565b5060046000526000805160206200b5cd833981519152602052602c80546200536e917f99b72cf02b448c50da0a5ebc79290c5f37188479de5d78ecdc4fb0f418a9a6ff9162005d0d565b5060056000526000805160206200b5cd833981519152602052602b8054620053b8917f1ed15164f95d904aa131344eda990cae378aa283199b47861e77ef6bd40f515f9162005d0d565b5060066000526000805160206200b5cd833981519152602052602a805462005402917fbd8a74dc0d908d3ea487e84fe7112354c954d0c627b0afc6176039a88bbab10a9162005d0d565b5060016000526000805160206200b5ed833981519152602052604180546200544c917f60c6b4e6c71eecfef824b15b8e65284ff5be4cdf4e8e8289029890fd88131c699162005d0d565b5060026000526000805160206200b5ed8339815191526020526042805462005496917f01862ccdb6695f835d4f6f9798eae04ff6cdcbc326e9f330f399d01466bbc1af9162005d0d565b5060036000526000805160206200b5ed83398151915260205260438054620054e0917f03761ee00ea4f7dd29d90908a5fce38bce6c75b9c5e760fd0eb7791688814b529162005d0d565b5060046000526000805160206200b5ed833981519152602052604480546200552a917f625588f49957a17a026f67580fcaaac3bb3e3a4b01ba4c5dd9e14ec9dd06baac9162005d0d565b5060056000526000805160206200b5ed8339815191526020526045805462005574917febc80592f30614316ff5a914342f81fcaf170f1ab784b921d6554078c26e09cd9162005d0d565b5060066000526000805160206200b5ed83398151915260205260468054620055be917fbf1e39b15c82c131dafb09d5b6d1041f9d78dceba13b27b46bd8c5cdca83edcd9162005d0d565b5062005ea5565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200565891849160209091019062005c90565b509160200191906001019062005638565b506200567792915062005d6a565b5090565b82805482825590600052602060002090810192821562005669579160200282015b82811115620056695782518051620056bc91849160209091019062005c90565b50916020019190600101906200569c565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200570e91849160209091019062005c90565b5091602001919060010190620056ee565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200576091849160209091019062005c90565b509160200191906001019062005740565b82805482825590600052602060002090810192821562005669579160200282015b82811115620056695782518051620057b291849160209091019062005c90565b509160200191906001019062005792565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200580491849160209091019062005c90565b5091602001919060010190620057e4565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200585691849160209091019062005c90565b509160200191906001019062005836565b82805482825590600052602060002090810192821562005669579160200282015b82811115620056695782518051620058a891849160209091019062005c90565b509160200191906001019062005888565b82805482825590600052602060002090810192821562005669579160200282015b82811115620056695782518051620058fa91849160209091019062005c90565b5091602001919060010190620058da565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200594c91849160209091019062005c90565b50916020019190600101906200592c565b82805482825590600052602060002090810192821562005669579160200282015b828111156200566957825180516200599e91849160209091019062005c90565b50916020019190600101906200597e565b82805482825590600052602060002090810192821562005669579160200282015b82811115620056695782518051620059f091849160209091019062005c90565b5091602001919060010190620059d0565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005a4291849160209091019062005c90565b509160200191906001019062005a22565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005a9491849160209091019062005c90565b509160200191906001019062005a74565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005ae691849160209091019062005c90565b509160200191906001019062005ac6565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005b3891849160209091019062005c90565b509160200191906001019062005b18565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005b8a91849160209091019062005c90565b509160200191906001019062005b6a565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005bdc91849160209091019062005c90565b509160200191906001019062005bbc565b82805482825590600052602060002090810192821562005669579160200282015b8281111562005669578251805162005c2e91849160209091019062005c90565b509160200191906001019062005c0e565b82805482825590600052602060002090810192821562005c82579160200282015b8281111562005c82578251829060ff1690559160200191906001019062005c60565b506200567792915062005d8b565b82805462005c9e9062005e68565b90600052602060002090601f01602090048101928262005cc2576000855562005c82565b82601f1062005cdd57805160ff191683800117855562005c82565b8280016001018555821562005c82579182015b8281111562005c8257825182559160200191906001019062005cf0565b828054828255906000526020600020908101928215620056695760005260206000209182015b828111156200566957828290805462005d4c9062005e68565b62005d5992919062005da2565b509160010191906001019062005d33565b808211156200567757600062005d81828262005e26565b5060010162005d6a565b5b8082111562005677576000815560010162005d8c565b82805462005db09062005e68565b90600052602060002090601f01602090048101928262005dd4576000855562005c82565b82601f1062005de7578054855562005c82565b8280016001018555821562005c8257600052602060002091601f016020900482015b8281111562005c8257825482559160010191906001019062005e09565b50805462005e349062005e68565b6000825580601f1062005e45575050565b601f01602090049060005260206000209081019062005e65919062005d8b565b50565b600181811c9082168062005e7d57607f821691505b6020821081141562005e9f57634e487b7160e01b600052602260045260246000fd5b50919050565b6157188062005eb56000396000f3fe6080604052600436106103c35760003560e01c80635c71c2dd116101f2578063b88d4fde1161010d578063e06d2eb5116100a0578063e985e9c51161006f578063e985e9c514610acc578063f2fde38b14610b15578063f4a0a52814610b35578063fd73518614610b5557600080fd5b8063e06d2eb514610a56578063e53fbda614610a76578063e622563014610a96578063e71115ae14610ab657600080fd5b8063d0b85093116100dc578063d0b85093146109f9578063d0e30db014610a0e578063d3b099cc14610a16578063d866e15214610a3657600080fd5b8063b88d4fde14610986578063baa5b27f146109a6578063c87b56dd146109c6578063d09e0591146109e657600080fd5b80638bbee1f31161018557806395d89b411161015457806395d89b41146109115780639f65325a14610926578063a22cb46514610946578063b05d06591461096657600080fd5b80638bbee1f3146108915780638da5cb5b146108b157806391ce7853146108cf57806394394d74146108f157600080fd5b8063715018a6116101c1578063715018a6146108265780637637fb7f1461083b57806381f56fe91461085b5780638559dff31461087b57600080fd5b80635c71c2dd146107b05780636352211e146107d05780636817c76c146107f057806370a082311461080657600080fd5b80632df78d31116102e257806340911db111610275578063432f320811610244578063432f320814610730578063499309c3146107505780634e77afab146107705780634f6ccce71461079057600080fd5b806340911db1146106c45780634092f6e8146106e45780634124fc74146106fa57806342842e0e1461071057600080fd5b80632f745c59116102b15780632f745c591461064e578063319b43e71461066e5780633a7d22bc146106845780633f3e4c11146106a457600080fd5b80632df78d31146105d85780632e1a7d4d146105f85780632eba8a9a146106185780632f38daeb1461063857600080fd5b806315b2d0f61161035a57806320847c6d1161032957806320847c6d1461057657806323b872dd1461058c57806324fcc76a146105ac5780632ab4d052146105c257600080fd5b806315b2d0f614610501578063176c41821461052157806318160ddd14610541578063200d494a1461055657600080fd5b8063081812fc11610396578063081812fc14610467578063095ea7b31461049f5780630d71aba5146104c15780630e439326146104e157600080fd5b806301716d9c146103c857806301ffc9a7146103fe5780630325c6411461042e57806306fdde0314610452575b600080fd5b3480156103d457600080fd5b506103e86103e3366004614491565b610b68565b6040516103f5919061450b565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004614534565b610c20565b60405190151581526020016103f5565b34801561043a57600080fd5b5061044460145481565b6040519081526020016103f5565b34801561045e57600080fd5b506103e8610c4b565b34801561047357600080fd5b50610487610482366004614551565b610cdd565b6040516001600160a01b0390911681526020016103f5565b3480156104ab57600080fd5b506104bf6104ba36600461457f565b610d77565b005b3480156104cd57600080fd5b506103e86104dc366004614551565b610e8d565b3480156104ed57600080fd5b50601954610487906001600160a01b031681565b34801561050d57600080fd5b506103e861051c366004614551565b610f5a565b34801561052d57600080fd5b5061044461053c366004614551565b610f65565b34801561054d57600080fd5b50600854610444565b34801561056257600080fd5b50610444610571366004614551565b610ff1565b34801561058257600080fd5b5061044460165481565b34801561059857600080fd5b506104bf6105a73660046145ab565b61102d565b3480156105b857600080fd5b50610444600f5481565b3480156105ce57600080fd5b5061044460125481565b3480156105e457600080fd5b506103e86105f3366004614551565b61105e565b34801561060457600080fd5b506104bf610613366004614551565b611084565b34801561062457600080fd5b506103e8610633366004614551565b611144565b34801561064457600080fd5b50610444600d5481565b34801561065a57600080fd5b5061044461066936600461457f565b61116e565b34801561067a57600080fd5b5061044460115481565b34801561069057600080fd5b506103e861069f366004614551565b611204565b3480156106b057600080fd5b506104bf6106bf366004614551565b611238565b3480156106d057600080fd5b506103e86106df366004614551565b611267565b3480156106f057600080fd5b5061044460175481565b34801561070657600080fd5b5061044460135481565b34801561071c57600080fd5b506104bf61072b3660046145ab565b61128f565b34801561073c57600080fd5b506104bf61074b3660046145ec565b6112aa565b34801561075c57600080fd5b506103e861076b366004614551565b61134f565b34801561077c57600080fd5b5061041e61078b366004614654565b611379565b34801561079c57600080fd5b506104446107ab366004614551565b61147c565b3480156107bc57600080fd5b506104bf6107cb366004614684565b61150f565b3480156107dc57600080fd5b506104876107eb366004614551565b61155b565b3480156107fc57600080fd5b50610444600e5481565b34801561081257600080fd5b50610444610821366004614684565b6115d2565b34801561083257600080fd5b506104bf611659565b34801561084757600080fd5b506104bf610856366004614551565b61168f565b34801561086757600080fd5b50610444610876366004614551565b6116be565b34801561088757600080fd5b50610444600c5481565b34801561089d57600080fd5b506103e86108ac366004614551565b611736565b3480156108bd57600080fd5b50600b546001600160a01b0316610487565b3480156108db57600080fd5b506108e461175b565b6040516103f591906146a1565b3480156108fd57600080fd5b506104bf61090c3660046145ec565b6117b2565b34801561091d57600080fd5b506103e861194e565b34801561093257600080fd5b50601b54610487906001600160a01b031681565b34801561095257600080fd5b506104bf6109613660046146f3565b61195d565b34801561097257600080fd5b5061041e610981366004614684565b611a22565b34801561099257600080fd5b506104bf6109a1366004614790565b611aa0565b3480156109b257600080fd5b506103e86109c1366004614551565b611ad8565b3480156109d257600080fd5b506103e86109e1366004614551565b611aff565b6104bf6109f43660046145ec565b612441565b348015610a0557600080fd5b50601154610444565b6104bf612528565b348015610a2257600080fd5b50610444610a31366004614551565b612552565b348015610a4257600080fd5b506103e8610a51366004614551565b61258e565b348015610a6257600080fd5b506103e8610a71366004614551565b6125b8565b348015610a8257600080fd5b506103e8610a91366004614551565b6125e2565b348015610aa257600080fd5b506103e8610ab1366004614551565b612605565b348015610ac257600080fd5b5061044460155481565b348015610ad857600080fd5b5061041e610ae736600461483f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610b2157600080fd5b506104bf610b30366004614684565b612629565b348015610b4157600080fd5b506104bf610b50366004614551565b6126c4565b6104bf610b6336600461486d565b6126f3565b60606000610ba6610b78846128be565b610b81866128be565b604051602001610b929291906148df565b6040516020818303038152906040526129c4565b604754909150600090610bb99083614938565b905060005b604b54811015610c0357604b8181548110610bdb57610bdb61494c565b90600052602060002001548211610bf157610c03565b80610bfb81614978565b915050610bbe565b610c16610c11826001614993565b6129f5565b9695505050505050565b60006001600160e01b0319821663780e9d6360e01b1480610c455750610c4582612af6565b92915050565b606060008054610c5a906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610c86906149ab565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610d5b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610d828261155b565b9050806001600160a01b0316836001600160a01b03161415610df05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610d52565b336001600160a01b0382161480610e0c5750610e0c8133610ae7565b610e7e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610d52565b610e888383612b46565b505050565b6000818152601e602052604090205460218054606092670100000000000000900460ff16908110610ec057610ec061494c565b906000526020600020018054610ed5906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610f01906149ab565b8015610f4e5780601f10610f2357610100808354040283529160200191610f4e565b820191906000526020600020905b815481529060010190602001808311610f3157829003601f168201915b50505050509050919050565b6060610c4582612bb4565b600080610f84610f74846128be565b604051602001610b9291906149e0565b90506000610f93606483614938565b905060005b604954811015610fdd5760498181548110610fb557610fb561494c565b90600052602060002001548211610fcb57610fdd565b80610fd581614978565b915050610f98565b610fe8816001614993565b95945050505050565b6000611e778210156110255760105460115461100d9190614a12565b611018906001614993565b600d54610c459190614a26565b5050600f5490565b6110373382612de9565b6110535760405162461bcd60e51b8152600401610d5290614a45565b610e88838383612edc565b6000818152601e6020526040902054606090610c4590640100000000900460ff166128be565b600b546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610d5290614a96565b601d546001600160a01b03166111065760405162461bcd60e51b815260206004820152601a60248201527f4d7573742073657420726f79616c747920726563697069656e740000000000006044820152606401610d52565b601d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611140573d6000803e3d6000fd5b5050565b6060610c45826040518060400160405280600681526020016554726169743160d01b815250613087565b6000611179836115d2565b82106111db5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610d52565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000818152601e60205260409020546022805460609268010000000000000000900460ff16908110610ec057610ec061494c565b600b546001600160a01b031633146112625760405162461bcd60e51b8152600401610d5290614a96565b601255565b6000818152601e6020526040902054606090610c45906601000000000000900460ff166128be565b610e8883838360405180602001604052806000815250611aa0565b6002600a5414156112cd5760405162461bcd60e51b8152600401610d5290614acb565b6002600a55600b546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610d5290614a96565b611e788a101580156113105750611f3f8a11155b61132c5760405162461bcd60e51b8152600401610d5290614b02565b61133e8a8a8a8a8a8a8a8a8a8a613107565b50506001600a555050505050505050565b6060610c45826040518060400160405280600681526020016554726169743360d01b815250613087565b6000828152600260205260408120546001600160a01b031615801561147557600184101580156113ab57506103e78411155b80156114315750601c5460405163b05d065960e01b81526001600160a01b0385811660048301529091169063b05d06599060240160206040518083038186803b1580156113f757600080fd5b505afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f9190614b2c565b155b1561143e57506000611475565b611e7884101580156114525750611f3f8411155b801561146c5750600b546001600160a01b03848116911614155b15611475575060005b9392505050565b600061148760085490565b82106114ea5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610d52565b600882815481106114fd576114fd61494c565b90600052602060002001549050919050565b600b546001600160a01b031633146115395760405162461bcd60e51b8152600401610d5290614a96565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b031680610c455760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610d52565b60006001600160a01b03821661163d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610d52565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146116835760405162461bcd60e51b8152600401610d5290614a96565b61168d60006135ab565b565b600b546001600160a01b031633146116b95760405162461bcd60e51b8152600401610d5290614a96565b600f55565b6000806116dd6116cd846128be565b604051602001610b929190614b49565b905060006116ec606483614938565b905060005b604a54811015610fdd57604a818154811061170e5761170e61494c565b9060005260206000200154821161172457610fdd565b8061172e81614978565b9150506116f1565b6000818152601e6020526040902054606090610c45906301000000900460ff166128be565b60606018805480602002602001604051908101604052809291908181526020018280548015610cd357602002820191906000526020600020905b815481526020019060010190808311611795575050505050905090565b6002600a5414156117d55760405162461bcd60e51b8152600401610d5290614acb565b6002600a5560018a108015906117ed57506103e78a11155b6118095760405162461bcd60e51b8152600401610d5290614b02565b601c546001600160a01b031663b05d0659336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190614b2c565b6118d15760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b6044820152606401610d52565b601c546001600160a01b0316633d0f963e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b5050505061133e8a8a8a8a8a8a8a8a8a8a613107565b606060018054610c5a906149ab565b6001600160a01b0382163314156119b65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d52565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b601c5460405163b05d065960e01b81526001600160a01b038381166004830152600092169063b05d06599060240160206040518083038186803b158015611a6857600080fd5b505afa158015611a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c459190614b2c565b611aaa3383612de9565b611ac65760405162461bcd60e51b8152600401610d5290614a45565b611ad2848484846135fd565b50505050565b6000818152601e6020526040902054606090610c459065010000000000900460ff166128be565b6060611b0961444e565b601c60009054906101000a90046001600160a01b03166001600160a01b031663c06a58286040518163ffffffff1660e01b815260040160006040518083038186803b158015611b5757600080fd5b505afa158015611b6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b939190810190614b76565b8152611b9e836125b8565b602082810191909152604080518082018252601e81527f3c2f747370616e3e3c747370616e20783d2236302220793d22323536223e000092810192909252820152611be883610e8d565b606082015260408051808201909152601e81527f3c2f747370616e3e3c747370616e20783d2236302220793d22333030223e000060208201526080820152611c2f83611204565b60a08201526040805180820182526002815261010160f51b60208083019190915260c08401919091526000858152601e90915220546901000000000000000000900460ff16600114611c905760405180602001604052806000815250611cac565b604051806040016040528060028152602001612b3160f01b8152505b60e0820152604080516060810190915260248082526153146020830139610100820152611cdb610c11846116be565b610120820152604080518082019091526002815261111f60f11b6020820152610140820152611d0983610f5a565b610160820152604080518082019091526002815261010160f51b6020820152610180820152611d3783613630565b6101a08201526040805160608101909152602480825261569b60208301396101c0820152611d66836001610b68565b6101e0820152604080518082019091526002815261111f60f11b6020820152610200820152611d9483611144565b6102208201526040805180820182526002815261010160f51b6020808301919091526102408401919091526000858152601e9091522054600160501b900460ff16600114611df15760405180602001604052806000815250611e0d565b604051806040016040528060028152602001612b3160f01b8152505b610260820152604080516060810190915260248082526153386020830139610280820152611e3c836002610b68565b6102a0820152604080518082019091526002815261111f60f11b60208201526102c0820152611e6a8361258e565b6102e08201526040805180820182526002815261010160f51b6020808301919091526103008401919091526000858152601e9091522054600160581b900460ff16600114611ec75760405180602001604052806000815250611ee3565b604051806040016040528060028152602001612b3160f01b8152505b610320820152604080516060810190915260248082526156bf6020830139610340820152611f12836003610b68565b610360820152604080518082019091526002815261111f60f11b6020820152610380820152611f408361134f565b6103a08201526040805180820182526002815261010160f51b6020808301919091526103c08401919091526000858152601e9091522054600160601b900460ff16600114611f9d5760405180602001604052806000815250611fb9565b604051806040016040528060028152602001612b3160f01b8152505b6103e08201526040805161022081019091526101e980825261535c6020830139610400820152611fe8836125e2565b61042082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22323630223e00602082015261044082015261203183612605565b61046082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22333034223e00602082015261048082015261207a83611736565b6104a082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22333438223e0060208201526104c08201526120c38361105e565b6104e082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22333932223e00602082015261050082015261210c83611ad8565b61052082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22343336223e00602082015261054082015261215583611267565b6105608201526040805160a0810190915260718082526155c0602083013961058082015260408051808201825260068152651e17b9bb339f60d11b6020808301919091526105a0840191909152825181840151838501516060860151608087015160a088015160c089015197516000986121d198909101614be4565b60408051808303601f190181529082905260e08401516101008501516101208601516101408701516101608801516101808901516101a08a01516101c08b0151979950612223988a9890602001614c76565b60408051808303601f19018152908290526101e08401516102008501516102208601516102408701516102608801516102808901516102a08a015196985061227097899790602001614d37565b60408051808303601f19018152908290526102c08401516102e08501516103008601516103208701516103408801516103608901516103808a01519698506122bd97899790602001614d37565b60408051601f19818403018152908290526103a08401516103c08501516103e086015161040087015161042088015161044089015195975061230496889690602001614be4565b60408051808303601f19018152908290526104608401516104808501516104a08601516104c087015193955061233f94869490602001614ddc565b60408051808303601f19018152908290526104e08401516105008501516105208601516105408701516105608801516105808901516105a08a015196985061238c97899790602001614d37565b604051602081830303815290604052905060006123d46123ab866125b8565b6123b487610e8d565b6123bd88611204565b6123c68961375f565b6123cf8a613884565b613995565b905060006124146123e4876128be565b6123ed85613b03565b8460405160200161240093929190614e47565b604051602081830303815290604052613b03565b9050806040516020016124279190614f6d565b60408051601f198184030181529190529695505050505050565b6002600a5414156124645760405162461bcd60e51b8152600401610d5290614acb565b6002600a556103e88a1080159061247d5750611e778a11155b806124975750611f408a1015801561249757506012548a11155b6124b35760405162461bcd60e51b8152600401610d5290614b02565b346124bd8b612552565b11156125015760405162461bcd60e51b8152602060048201526013602482015272506c6561736520706179206d696e742066656560681b6044820152606401610d52565b6011805490600061251183614978565b919050555061133e8a8a8a8a8a8a8a8a8a8a613107565b600b546001600160a01b0316331461168d5760405162461bcd60e51b8152600401610d5290614a96565b6000611e778210156125865760105460115461256e9190614a12565b612579906001614993565b600c54610c459190614a26565b5050600e5490565b6060610c4582604051806040016040528060068152602001652a3930b4ba1960d11b815250613087565b6000818152601e602090815260409091205481546060929160ff16908110610ec057610ec061494c565b6000818152601e6020526040902054606090610c4590610100900460ff166128be565b6000818152601e6020526040902054606090610c459062010000900460ff166128be565b600b546001600160a01b031633146126535760405162461bcd60e51b8152600401610d5290614a96565b6001600160a01b0381166126b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d52565b6126c1816135ab565b50565b600b546001600160a01b031633146126ee5760405162461bcd60e51b8152600401610d5290614a96565b600e55565b6002600a5414156127165760405162461bcd60e51b8152600401610d5290614acb565b6002600a556103e88b1080159061272f5750611e778b11155b806127495750611f408b1015801561274957506012548b11155b6127655760405162461bcd60e51b8152600401610d5290614b02565b601a546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156127a957600080fd5b505afa1580156127bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e19190614fb2565b6001600160a01b0316146128375760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420746865206f776e6572206f662074686973206c6f6f740000000000006044820152606401610d52565b346128418c610ff1565b11156128855760405162461bcd60e51b8152602060048201526013602482015272506c6561736520706179206d696e742066656560681b6044820152606401610d52565b6011805490600061289583614978565b91905055506128ac8b8b8b8b8b8b8b8b8b8b613107565b50506001600a55505050505050505050565b6060816128e25750506040805180820190915260018152600360fc1b602082015290565b8160005b811561290c57806128f681614978565b91506129059050600a83614a12565b91506128e6565b60008167ffffffffffffffff81111561292757612927614721565b6040519080825280601f01601f191660200182016040528015612951576020820181803683370190505b5090505b84156129bc57612966600183614fcf565b9150612973600a86614938565b61297e906030614993565b60f81b8183815181106129935761299361494c565b60200101906001600160f81b031916908160001a9053506129b5600a86614a12565b9450612955565b949350505050565b6000816040516020016129d79190614fe6565b60408051601f19818403018152919052805160209091012092915050565b60608160011415612a235750506040805180820190915260078152660236666633030360cc1b602082015290565b8160021415612a4f5750506040805180820190915260078152660236330303030360cc1b602082015290565b8160031415612a7b5750506040805180820190915260078152662365643764333160c81b602082015290565b8160041415612aa75750506040805180820190915260078152662335623962643560c81b602082015290565b8160051415612ad35750506040805180820190915260078152662337306164343760c81b602082015290565b505060408051808201909152600781526611b3333333333360c91b602082015290565b60006001600160e01b031982166380ac58cd60e01b1480612b2757506001600160e01b03198216635b5e139f60e01b145b80610c4557506301ffc9a760e01b6001600160e01b0319831614610c45565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b7b8261155b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000612bc183610f65565b90506000612bce846116be565b6000838152601f60209081526040808320848452825280832080548251818502810185019093528083529495509293909291849084015b82821015612cb1578382906000526020600020018054612c24906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612c50906149ab565b8015612c9d5780601f10612c7257610100808354040283529160200191612c9d565b820191906000526020600020905b815481529060010190602001808311612c8057829003601f168201915b505050505081526020019060010190612c05565b5050505090506000612cd5612cc5876128be565b604051602001610b929190615002565b9050600082835183612ce79190614938565b81518110612cf757612cf761494c565b6020026020010151905060006048808054905084612d159190614938565b81548110612d2557612d2561494c565b906000526020600020018054612d3a906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612d66906149ab565b8015612db35780601f10612d8857610100808354040283529160200191612db3565b820191906000526020600020905b815481529060010190602001808311612d9657829003601f168201915b505050505090508082604051602001612dcd92919061502e565b60408051601f1981840301815291905298975050505050505050565b6000818152600260205260408120546001600160a01b0316612e625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d52565b6000612e6d8361155b565b9050806001600160a01b0316846001600160a01b03161480612ea85750836001600160a01b0316612e9d84610cdd565b6001600160a01b0316145b806129bc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166129bc565b826001600160a01b0316612eef8261155b565b6001600160a01b031614612f575760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610d52565b6001600160a01b038216612fb95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d52565b612fc4838383613c69565b612fcf600082612b46565b6001600160a01b0383166000908152600360205260408120805460019290612ff8908490614fcf565b90915550506001600160a01b0382166000908152600360205260408120805460019290613026908490614993565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606060006130a983613098866128be565b604051602001610b9292919061506a565b6047549091506000906130bc9083614938565b90506000604782815481106130d3576130d361494c565b906000526020600020016040516020016130ed9190615099565b60408051808303601f190181529190529695505050505050565b60008a8152600260205260409020546001600160a01b03161561313c5760405162461bcd60e51b8152600401610d5290614b02565b60205489106131805760405162461bcd60e51b815260206004820152601060248201526f19d95b99195c9259081a5b9d985b1a5960821b6044820152606401610d52565b601e818385876131908a8c614993565b61319a9190614993565b6131a49190614993565b6131ae9190614993565b6131b89190614993565b11156131ff5760405162461bcd60e51b8152602060048201526016602482015275185d1d1c9a589d5d195cc81b9d5b481a5b9d985b1a5960521b6044820152606401610d52565b60215488106132415760405162461bcd60e51b815260206004820152600e60248201526d1c9858d95259081a5b9d985b1a5960921b6044820152606401610d52565b60225487106132865760405162461bcd60e51b8152602060048201526011602482015270195b195b595b9d1259081a5b9d985b1a59607a1b6044820152606401610d52565b88601e60008c815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555085601e60008c815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555084601e60008c815260200190815260200160002060000160026101000a81548160ff021916908360ff16021790555083601e60008c815260200190815260200160002060000160036101000a81548160ff021916908360ff16021790555082601e60008c815260200190815260200160002060000160046101000a81548160ff021916908360ff16021790555081601e60008c815260200190815260200160002060000160056101000a81548160ff021916908360ff16021790555080601e60008c815260200190815260200160002060000160066101000a81548160ff021916908360ff16021790555087601e60008c815260200190815260200160002060000160076101000a81548160ff021916908360ff16021790555086601e60008c815260200190815260200160002060000160086101000a81548160ff021916908360ff1602179055506000613437613d21565b90508060008151811061344c5761344c61494c565b6020026020010151601e60008d815260200190815260200160002060000160096101000a81548160ff021916908360ff160217905550806001815181106134955761349561494c565b6020026020010151601e60008d8152602001908152602001600020600001600a6101000a81548160ff021916908360ff160217905550806002815181106134de576134de61494c565b6020026020010151601e60008d8152602001908152602001600020600001600b6101000a81548160ff021916908360ff160217905550806003815181106135275761352761494c565b60209081029190910181015160008d8152601e90925260408220805460ff909216600160601b0260ff60601b199092169190911790556018805460018101825591527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018b905561359e6135983390565b8c613e45565b5050505050505050505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b613608848484612edc565b61361484848484613e5f565b611ad25760405162461bcd60e51b8152600401610d529061514c565b604080518082018252600880825267262378323542323b60c01b6020808401919091528351808501855282815267262378323033423b60c01b818301528451808601865283815267262378323139313b60c01b818401528551808701875284815267262378323543423b60c01b818501528651808801885285815267262378323543363b60c01b818601528751808901895295865267262378323541303b60c01b86860152875194850190975260008085526060979395929491939291906136f78a610f65565b9050806001141561370a57839150613752565b806002141561371b57879150613752565b806003141561372c57859150613752565b806004141561373d57849150613752565b806005141561374e57869150613752565b8291505b5098975050505050505050565b604080518082018252600881526720b9b9b0b9b9b4b760c11b602080830191909152825180840184526004808252634d61676560e01b8284015284518086018652600680825265243ab73a32b960d11b828601528651808801885281815265141c9a595cdd60d21b81870152875180890189529384526354616e6b60e01b848701528751808901909852908752652bb0b934b7b960d11b9487019490945260609592939092909190600061381289610f65565b6040805160208101909152600081529091506001821415613834575082613877565b8160021415613844575086613877565b8160031415613854575084613877565b8160041415613864575083613877565b8160051415613874575085613877565b50815b9998505050505050505050565b60606000613891836116be565b905080600114156138be57505060408051808201909152600481526319dbdb1960e21b6020820152919050565b80600214156138e85750506040805180820190915260038152621c995960ea1b6020820152919050565b80600314156139155750506040805180820190915260068152656f72616e676560d01b6020820152919050565b8060041415613940575050604080518082019091526004815263626c756560e01b6020820152919050565b806005141561396c57505060408051808201909152600581526433b932b2b760d91b6020820152919050565b5050604080518082019091526005815264776869746560d81b6020820152919050565b50919050565b606061399f614476565b60405180606001604052806025815260200161559b60259139815260208082018890526040805160608101909152602f808252909161556c908301396040808301919091526060808301859052815190810190915260278082526155456020830139608082015260a081018690526040805160608101909152602a808252615671602083013960c082015260e081018590526040805160608101909152602e8082526152e660208301396101008201526101208101849052604080518082018252600481526322207d5d60e01b602080830191909152610140840191909152825181840151838501516060860151608087015160a088015160c089015160e08a01519851600099613ab299909101614d37565b60408051808303601f1901815290829052610100840151610120850151610140860151929450613ae79385939060200161519e565b60408051808303601f1901815291905298975050505050505050565b805160609080613b23575050604080516020810190915260008152919050565b60006003613b32836002614993565b613b3c9190614a12565b613b47906004614a26565b90506000613b56826020614993565b67ffffffffffffffff811115613b6e57613b6e614721565b6040519080825280601f01601f191660200182016040528015613b98576020820181803683370190505b5090506000604051806060016040528060408152602001615631604091399050600181016020830160005b86811015613c24576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101613bc3565b506003860660018114613c3e5760028114613c4f57613c5b565b613d3d60f01b600119830152613c5b565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b038316613cc457613cbf81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613ce7565b816001600160a01b0316836001600160a01b031614613ce757613ce78382613f6c565b6001600160a01b038216613cfe57610e8881614009565b826001600160a01b0316826001600160a01b031614610e8857610e8882826140b8565b60606000613d37613d3260646140fc565b61413e565b60408051600480825260a082019092529192506000919060208201608080368337019050509050600060015b60048160ff1611613e3c576000613d7a60026140fc565b60ff16600114905060008386613d9091906151f5565b9050818015613da0575060ff8116155b15613daa57600091505b81158015613dc75750613dbe8360046151f5565b60ff168160ff16115b15613dd157600191505b8115613de55783613de181615218565b9450505b81613df1576000613df4565b60015b85613e006001866151f5565b60ff1681518110613e1357613e1361494c565b602002602001019060ff16908160ff168152505050508080613e3490615218565b915050613d63565b50909392505050565b6111408282604051806020016040528060008152506142cd565b60006001600160a01b0384163b15613f6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613ea3903390899088908890600401615238565b602060405180830381600087803b158015613ebd57600080fd5b505af1925050508015613eed575060408051601f3d908101601f19168201909252613eea9181019061526b565b60015b613f47573d808015613f1b576040519150601f19603f3d011682016040523d82523d6000602084013e613f20565b606091505b508051613f3f5760405162461bcd60e51b8152600401610d529061514c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506129bc565b506001949350505050565b60006001613f79846115d2565b613f839190614fcf565b600083815260076020526040902054909150808214613fd6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061401b90600190614fcf565b600083815260096020526040812054600880549394509092849081106140435761404361494c565b9060005260206000200154905080600883815481106140645761406461494c565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061409c5761409c615288565b6001900381819060005260206000200160009055905550505050565b60006140c3836115d2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600081424460405160200161411b929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c610c45919061529e565b60008060ff831615801561416c5750606460125461415c9190614a12565b614167906001614a26565b601754105b1561418f576017805490600061418183614978565b909155506004949350505050565b61419a6003826152c0565b90508060ff168360ff16111580156141cc575060646012546141bc9190614a12565b6141c7906003614a26565b601654105b156141ef57601680549060006141e183614978565b909155506003949350505050565b6141fa6005826152c0565b90508060ff168360ff161115801561422c5750606460125461421c9190614a12565b614227906005614a26565b601554105b1561424f576015805490600061424183614978565b909155506002949350505050565b61425a600a826152c0565b90508060ff168360ff161115801561428c5750606460125461427c9190614a12565b61428790600a614a26565b601454105b156142af57601480549060006142a183614978565b909155506001949350505050565b601380549060006142bf83614978565b909155506000949350505050565b6142d78383614300565b6142e46000848484613e5f565b610e885760405162461bcd60e51b8152600401610d529061514c565b6001600160a01b0382166143565760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d52565b6000818152600260205260409020546001600160a01b0316156143bb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d52565b6143c760008383613c69565b6001600160a01b03821660009081526003602052604081208054600192906143f0908490614993565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b604051806105c00160405280602e905b606081526020019060019003908161445e5790505090565b60408051610160810190915260608152600a6020820161445e565b600080604083850312156144a457600080fd5b50508035926020909101359150565b60005b838110156144ce5781810151838201526020016144b6565b83811115611ad25750506000910152565b600081518084526144f78160208601602086016144b3565b601f01601f19169290920160200192915050565b60208152600061147560208301846144df565b6001600160e01b0319811681146126c157600080fd5b60006020828403121561454657600080fd5b81356114758161451e565b60006020828403121561456357600080fd5b5035919050565b6001600160a01b03811681146126c157600080fd5b6000806040838503121561459257600080fd5b823561459d8161456a565b946020939093013593505050565b6000806000606084860312156145c057600080fd5b83356145cb8161456a565b925060208401356145db8161456a565b929592945050506040919091013590565b6000806000806000806000806000806101408b8d03121561460c57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b6000806040838503121561466757600080fd5b8235915060208301356146798161456a565b809150509250929050565b60006020828403121561469657600080fd5b81356114758161456a565b6020808252825182820181905260009190848201906040850190845b818110156146d9578351835292840192918401916001016146bd565b50909695505050505050565b80151581146126c157600080fd5b6000806040838503121561470657600080fd5b82356147118161456a565b91506020830135614679816146e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561476057614760614721565b604052919050565b600067ffffffffffffffff82111561478257614782614721565b50601f01601f191660200190565b600080600080608085870312156147a657600080fd5b84356147b18161456a565b935060208501356147c18161456a565b925060408501359150606085013567ffffffffffffffff8111156147e457600080fd5b8501601f810187136147f557600080fd5b803561480861480382614768565b614737565b81815288602083850101111561481d57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561485257600080fd5b823561485d8161456a565b915060208301356146798161456a565b60008060008060008060008060008060006101608c8e03121561488f57600080fd5b505089359b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e0810135965061010081013595506101208101359450610140013592509050565b64151c985a5d60da1b8152600083516148ff8160058501602088016144b3565b8351908301906149168160058401602088016144b3565b01600501949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261494757614947614922565b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561498c5761498c614962565b5060010190565b600082198211156149a6576149a6614962565b500190565b600181811c908216806149bf57607f821691505b6020821081141561398f57634e487b7160e01b600052602260045260246000fd5b6927b1b1bab830ba34b7b760b11b815260008251614a0581600a8501602087016144b3565b91909101600a0192915050565b600082614a2157614a21614922565b500490565b6000816000190483118215151615614a4057614a40614962565b500290565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f151bdad95b881251081a5b9d985b1a5960821b604082015260600190565b600060208284031215614b3e57600080fd5b8151611475816146e5565b6431b7b637b960d91b815260008251614b698160058501602087016144b3565b9190910160050192915050565b600060208284031215614b8857600080fd5b815167ffffffffffffffff811115614b9f57600080fd5b8201601f81018413614bb057600080fd5b8051614bbe61480382614768565b818152856020838501011115614bd357600080fd5b610fe88260208301602086016144b3565b600088516020614bf78285838e016144b3565b895191840191614c0a8184848e016144b3565b8951920191614c1c8184848d016144b3565b8851920191614c2e8184848c016144b3565b8751920191614c408184848b016144b3565b8651920191614c528184848a016144b3565b8551920191614c6481848489016144b3565b919091019a9950505050505050505050565b60008a51614c88818460208f016144b3565b8a51614c9a8183860160208f016144b3565b8a519184010190614caf818360208e016144b3565b8951614cc18183850160208e016144b3565b8951929091010190614cd7818360208c016144b3565b8751614ce98183850160208c016144b3565b8751929091010190614cff818360208a016144b3565b8551614d118183850160208a016144b3565b8551929091010190614d278183602088016144b3565b019b9a5050505050505050505050565b600089516020614d4a8285838f016144b3565b8a5191840191614d5d8184848f016144b3565b8a51920191614d6f8184848e016144b3565b8951920191614d818184848d016144b3565b8851920191614d938184848c016144b3565b8751920191614da58184848b016144b3565b8651920191614db78184848a016144b3565b8551920191614dc981848489016144b3565b919091019b9a5050505050505050505050565b60008651614dee818460208b016144b3565b865190830190614e02818360208b016144b3565b8651910190614e15818360208a016144b3565b8551910190614e288183602089016144b3565b8451910190614e3b8183602088016144b3565b01979650505050505050565b707b226e616d65223a20224261646765202360781b81528351600090614e748160118501602089016144b3565b7f222c20226465736372697074696f6e223a2022426164676520697320612073656011918401918201527f65642c20612073656564206163636f756e7420666f72206120505650204d657460318201527f6176657273652047616d652e222c2022696d616765223a2022646174613a696d6051820152721859d94bdcdd99cade1b5b0ed8985cd94d8d0b606a1b60718201528451614f198160848401602089016144b3565b601160f91b608492909101918201526d161130ba3a3934b13aba32b9911d60911b60858201528351614f528160938401602088016144b3565b607d60f81b6093929091019182015260940195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251614fa581601d8501602087016144b3565b91909101601d0192915050565b600060208284031215614fc457600080fd5b81516114758161456a565b600082821015614fe157614fe1614962565b500390565b60008251614ff88184602087016144b3565b9190910192915050565b636974656d60e01b8152600082516150218160048501602087016144b3565b9190910160040192915050565b600083516150408184602088016144b3565b600160fd1b908301908152835161505e8160018401602088016144b3565b01600101949350505050565b6000835161507c8184602088016144b3565b8351908301906150908183602088016144b3565b01949350505050565b601160f91b81528154600090600190829080831c818416806150bc57607f821691505b60208083108214156150dc57634e487b7160e01b85526022600452602485fd5b8180156150f0576001811461510557615136565b60ff1985168988015283890187019550615136565b60008a81526020902060005b8581101561512c5781548b82018a0152908801908301615111565b505086848a010195505b5050505050610fe881601160f91b815260010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600085516151b0818460208a016144b3565b8551908301906151c4818360208a016144b3565b85519101906151d78183602089016144b3565b84519101906151ea8183602088016144b3565b019695505050505050565b600060ff821660ff84168082101561520f5761520f614962565b90039392505050565b600060ff821660ff81141561522f5761522f614962565b60010192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610c16908301846144df565b60006020828403121561527d57600080fd5b81516114758161451e565b634e487b7160e01b600052603160045260246000fd5b600060ff8316806152b1576152b1614922565b8060ff84160691505092915050565b600060ff821660ff84168060ff038211156152dd576152dd614962565b01939250505056fe22207d2c207b202274726169745f74797065223a20224f636375706174466c6167222c202276616c7565223a20223c2f747370616e3e3c747370616e20783d2236302220793d22333434222066696c6c3d223c2f747370616e3e3c747370616e20783d2236302220793d22343332222066696c6c3d223c2f747370616e3e3c2f746578743e3c746578742069643d225374722d5374612d4167692d4368612d496e742d5368692220666f6e742d66616d696c793d2247656f726769612220666f6e742d73697a653d2232382220666f6e742d7765696768743d226e6f726d616c22206c696e652d73706163696e673d223434222066696c6c3d2223464646464646223e3c747370616e20783d223532322220793d22323136223e5374723c2f747370616e3e3c747370616e20783d223532322220793d22323630223e5374613c2f747370616e3e3c747370616e20783d223532322220793d22333034223e4167693c2f747370616e3e3c747370616e20783d223532322220793d22333438223e4368613c2f747370616e3e3c747370616e20783d223532322220793d22333932223e496e743c2f747370616e3e3c747370616e20783d223532322220793d22343336223e5368693c2f747370616e3e3c2f746578743e3c746578742069643d22322d332d362d372d312d312220666f6e742d66616d696c793d2247656f726769612220666f6e742d73697a653d2232382220666f6e742d7765696768743d226e6f726d616c22206c696e652d73706163696e673d223434222066696c6c3d2223464646464646223e3c747370616e20783d223631382220793d22323136223e22207d2c207b202274726169745f74797065223a202252616365222c202276616c7565223a202222207d2c207b202274726169745f74797065223a20224f636375706174436f6c6f72222c202276616c7565223a20225b7b202274726169745f74797065223a202247656e646572222c202276616c7565223a20223c2f747370616e3e3c2f746578743e3c6c696e652078313d223439302e35222079313d223139322e35222078323d223439302e35222079323d223437352e3522207374726f6b653d222339373937393722207374726f6b652d6c696e656361703d22737175617265223e3c2f6c696e653e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f22207d2c207b202274726169745f74797065223a2022456c656d656e74222c202276616c7565223a20223c2f747370616e3e3c747370616e20783d2236302220793d22333838222066696c6c3d223c2f747370616e3e3c747370616e20783d2236302220793d22343736222066696c6c3d22a2646970667358221220b3d52f34e554e47386999178ee74f47e3acac0367d111d8c743aa16f9ae9bfcb64736f6c634300080800338f7baaeb89fd2366535b48ed7d56321470a1399e8ab1b2456eb79477a77d951bb59afb99c4de88e28b26eef6d7a02f582ab97b4ec5fdb5cf1f0116f112f13bde5af4fb70d755f38349f04272636124ff9474fedf9ea09deea577daa305383b10820fef5837650fa3b8e45045b88059d8deaf0810350ec511c47ef768a28c2c9b9e71908050462d95d85d10ec71f33c35476f5af9a2363ff3b4f561b1ea62005044ef42eef5af19d25d4e44ae57c825e0d0624b9f37f2474ab961410a0aa295ff
Deployed Bytecode
0x6080604052600436106103c35760003560e01c80635c71c2dd116101f2578063b88d4fde1161010d578063e06d2eb5116100a0578063e985e9c51161006f578063e985e9c514610acc578063f2fde38b14610b15578063f4a0a52814610b35578063fd73518614610b5557600080fd5b8063e06d2eb514610a56578063e53fbda614610a76578063e622563014610a96578063e71115ae14610ab657600080fd5b8063d0b85093116100dc578063d0b85093146109f9578063d0e30db014610a0e578063d3b099cc14610a16578063d866e15214610a3657600080fd5b8063b88d4fde14610986578063baa5b27f146109a6578063c87b56dd146109c6578063d09e0591146109e657600080fd5b80638bbee1f31161018557806395d89b411161015457806395d89b41146109115780639f65325a14610926578063a22cb46514610946578063b05d06591461096657600080fd5b80638bbee1f3146108915780638da5cb5b146108b157806391ce7853146108cf57806394394d74146108f157600080fd5b8063715018a6116101c1578063715018a6146108265780637637fb7f1461083b57806381f56fe91461085b5780638559dff31461087b57600080fd5b80635c71c2dd146107b05780636352211e146107d05780636817c76c146107f057806370a082311461080657600080fd5b80632df78d31116102e257806340911db111610275578063432f320811610244578063432f320814610730578063499309c3146107505780634e77afab146107705780634f6ccce71461079057600080fd5b806340911db1146106c45780634092f6e8146106e45780634124fc74146106fa57806342842e0e1461071057600080fd5b80632f745c59116102b15780632f745c591461064e578063319b43e71461066e5780633a7d22bc146106845780633f3e4c11146106a457600080fd5b80632df78d31146105d85780632e1a7d4d146105f85780632eba8a9a146106185780632f38daeb1461063857600080fd5b806315b2d0f61161035a57806320847c6d1161032957806320847c6d1461057657806323b872dd1461058c57806324fcc76a146105ac5780632ab4d052146105c257600080fd5b806315b2d0f614610501578063176c41821461052157806318160ddd14610541578063200d494a1461055657600080fd5b8063081812fc11610396578063081812fc14610467578063095ea7b31461049f5780630d71aba5146104c15780630e439326146104e157600080fd5b806301716d9c146103c857806301ffc9a7146103fe5780630325c6411461042e57806306fdde0314610452575b600080fd5b3480156103d457600080fd5b506103e86103e3366004614491565b610b68565b6040516103f5919061450b565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004614534565b610c20565b60405190151581526020016103f5565b34801561043a57600080fd5b5061044460145481565b6040519081526020016103f5565b34801561045e57600080fd5b506103e8610c4b565b34801561047357600080fd5b50610487610482366004614551565b610cdd565b6040516001600160a01b0390911681526020016103f5565b3480156104ab57600080fd5b506104bf6104ba36600461457f565b610d77565b005b3480156104cd57600080fd5b506103e86104dc366004614551565b610e8d565b3480156104ed57600080fd5b50601954610487906001600160a01b031681565b34801561050d57600080fd5b506103e861051c366004614551565b610f5a565b34801561052d57600080fd5b5061044461053c366004614551565b610f65565b34801561054d57600080fd5b50600854610444565b34801561056257600080fd5b50610444610571366004614551565b610ff1565b34801561058257600080fd5b5061044460165481565b34801561059857600080fd5b506104bf6105a73660046145ab565b61102d565b3480156105b857600080fd5b50610444600f5481565b3480156105ce57600080fd5b5061044460125481565b3480156105e457600080fd5b506103e86105f3366004614551565b61105e565b34801561060457600080fd5b506104bf610613366004614551565b611084565b34801561062457600080fd5b506103e8610633366004614551565b611144565b34801561064457600080fd5b50610444600d5481565b34801561065a57600080fd5b5061044461066936600461457f565b61116e565b34801561067a57600080fd5b5061044460115481565b34801561069057600080fd5b506103e861069f366004614551565b611204565b3480156106b057600080fd5b506104bf6106bf366004614551565b611238565b3480156106d057600080fd5b506103e86106df366004614551565b611267565b3480156106f057600080fd5b5061044460175481565b34801561070657600080fd5b5061044460135481565b34801561071c57600080fd5b506104bf61072b3660046145ab565b61128f565b34801561073c57600080fd5b506104bf61074b3660046145ec565b6112aa565b34801561075c57600080fd5b506103e861076b366004614551565b61134f565b34801561077c57600080fd5b5061041e61078b366004614654565b611379565b34801561079c57600080fd5b506104446107ab366004614551565b61147c565b3480156107bc57600080fd5b506104bf6107cb366004614684565b61150f565b3480156107dc57600080fd5b506104876107eb366004614551565b61155b565b3480156107fc57600080fd5b50610444600e5481565b34801561081257600080fd5b50610444610821366004614684565b6115d2565b34801561083257600080fd5b506104bf611659565b34801561084757600080fd5b506104bf610856366004614551565b61168f565b34801561086757600080fd5b50610444610876366004614551565b6116be565b34801561088757600080fd5b50610444600c5481565b34801561089d57600080fd5b506103e86108ac366004614551565b611736565b3480156108bd57600080fd5b50600b546001600160a01b0316610487565b3480156108db57600080fd5b506108e461175b565b6040516103f591906146a1565b3480156108fd57600080fd5b506104bf61090c3660046145ec565b6117b2565b34801561091d57600080fd5b506103e861194e565b34801561093257600080fd5b50601b54610487906001600160a01b031681565b34801561095257600080fd5b506104bf6109613660046146f3565b61195d565b34801561097257600080fd5b5061041e610981366004614684565b611a22565b34801561099257600080fd5b506104bf6109a1366004614790565b611aa0565b3480156109b257600080fd5b506103e86109c1366004614551565b611ad8565b3480156109d257600080fd5b506103e86109e1366004614551565b611aff565b6104bf6109f43660046145ec565b612441565b348015610a0557600080fd5b50601154610444565b6104bf612528565b348015610a2257600080fd5b50610444610a31366004614551565b612552565b348015610a4257600080fd5b506103e8610a51366004614551565b61258e565b348015610a6257600080fd5b506103e8610a71366004614551565b6125b8565b348015610a8257600080fd5b506103e8610a91366004614551565b6125e2565b348015610aa257600080fd5b506103e8610ab1366004614551565b612605565b348015610ac257600080fd5b5061044460155481565b348015610ad857600080fd5b5061041e610ae736600461483f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610b2157600080fd5b506104bf610b30366004614684565b612629565b348015610b4157600080fd5b506104bf610b50366004614551565b6126c4565b6104bf610b6336600461486d565b6126f3565b60606000610ba6610b78846128be565b610b81866128be565b604051602001610b929291906148df565b6040516020818303038152906040526129c4565b604754909150600090610bb99083614938565b905060005b604b54811015610c0357604b8181548110610bdb57610bdb61494c565b90600052602060002001548211610bf157610c03565b80610bfb81614978565b915050610bbe565b610c16610c11826001614993565b6129f5565b9695505050505050565b60006001600160e01b0319821663780e9d6360e01b1480610c455750610c4582612af6565b92915050565b606060008054610c5a906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610c86906149ab565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610d5b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610d828261155b565b9050806001600160a01b0316836001600160a01b03161415610df05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610d52565b336001600160a01b0382161480610e0c5750610e0c8133610ae7565b610e7e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610d52565b610e888383612b46565b505050565b6000818152601e602052604090205460218054606092670100000000000000900460ff16908110610ec057610ec061494c565b906000526020600020018054610ed5906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610f01906149ab565b8015610f4e5780601f10610f2357610100808354040283529160200191610f4e565b820191906000526020600020905b815481529060010190602001808311610f3157829003601f168201915b50505050509050919050565b6060610c4582612bb4565b600080610f84610f74846128be565b604051602001610b9291906149e0565b90506000610f93606483614938565b905060005b604954811015610fdd5760498181548110610fb557610fb561494c565b90600052602060002001548211610fcb57610fdd565b80610fd581614978565b915050610f98565b610fe8816001614993565b95945050505050565b6000611e778210156110255760105460115461100d9190614a12565b611018906001614993565b600d54610c459190614a26565b5050600f5490565b6110373382612de9565b6110535760405162461bcd60e51b8152600401610d5290614a45565b610e88838383612edc565b6000818152601e6020526040902054606090610c4590640100000000900460ff166128be565b600b546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610d5290614a96565b601d546001600160a01b03166111065760405162461bcd60e51b815260206004820152601a60248201527f4d7573742073657420726f79616c747920726563697069656e740000000000006044820152606401610d52565b601d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611140573d6000803e3d6000fd5b5050565b6060610c45826040518060400160405280600681526020016554726169743160d01b815250613087565b6000611179836115d2565b82106111db5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610d52565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000818152601e60205260409020546022805460609268010000000000000000900460ff16908110610ec057610ec061494c565b600b546001600160a01b031633146112625760405162461bcd60e51b8152600401610d5290614a96565b601255565b6000818152601e6020526040902054606090610c45906601000000000000900460ff166128be565b610e8883838360405180602001604052806000815250611aa0565b6002600a5414156112cd5760405162461bcd60e51b8152600401610d5290614acb565b6002600a55600b546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610d5290614a96565b611e788a101580156113105750611f3f8a11155b61132c5760405162461bcd60e51b8152600401610d5290614b02565b61133e8a8a8a8a8a8a8a8a8a8a613107565b50506001600a555050505050505050565b6060610c45826040518060400160405280600681526020016554726169743360d01b815250613087565b6000828152600260205260408120546001600160a01b031615801561147557600184101580156113ab57506103e78411155b80156114315750601c5460405163b05d065960e01b81526001600160a01b0385811660048301529091169063b05d06599060240160206040518083038186803b1580156113f757600080fd5b505afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f9190614b2c565b155b1561143e57506000611475565b611e7884101580156114525750611f3f8411155b801561146c5750600b546001600160a01b03848116911614155b15611475575060005b9392505050565b600061148760085490565b82106114ea5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610d52565b600882815481106114fd576114fd61494c565b90600052602060002001549050919050565b600b546001600160a01b031633146115395760405162461bcd60e51b8152600401610d5290614a96565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b031680610c455760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610d52565b60006001600160a01b03821661163d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610d52565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146116835760405162461bcd60e51b8152600401610d5290614a96565b61168d60006135ab565b565b600b546001600160a01b031633146116b95760405162461bcd60e51b8152600401610d5290614a96565b600f55565b6000806116dd6116cd846128be565b604051602001610b929190614b49565b905060006116ec606483614938565b905060005b604a54811015610fdd57604a818154811061170e5761170e61494c565b9060005260206000200154821161172457610fdd565b8061172e81614978565b9150506116f1565b6000818152601e6020526040902054606090610c45906301000000900460ff166128be565b60606018805480602002602001604051908101604052809291908181526020018280548015610cd357602002820191906000526020600020905b815481526020019060010190808311611795575050505050905090565b6002600a5414156117d55760405162461bcd60e51b8152600401610d5290614acb565b6002600a5560018a108015906117ed57506103e78a11155b6118095760405162461bcd60e51b8152600401610d5290614b02565b601c546001600160a01b031663b05d0659336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118929190614b2c565b6118d15760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b6044820152606401610d52565b601c546001600160a01b0316633d0f963e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b5050505061133e8a8a8a8a8a8a8a8a8a8a613107565b606060018054610c5a906149ab565b6001600160a01b0382163314156119b65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d52565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b601c5460405163b05d065960e01b81526001600160a01b038381166004830152600092169063b05d06599060240160206040518083038186803b158015611a6857600080fd5b505afa158015611a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c459190614b2c565b611aaa3383612de9565b611ac65760405162461bcd60e51b8152600401610d5290614a45565b611ad2848484846135fd565b50505050565b6000818152601e6020526040902054606090610c459065010000000000900460ff166128be565b6060611b0961444e565b601c60009054906101000a90046001600160a01b03166001600160a01b031663c06a58286040518163ffffffff1660e01b815260040160006040518083038186803b158015611b5757600080fd5b505afa158015611b6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b939190810190614b76565b8152611b9e836125b8565b602082810191909152604080518082018252601e81527f3c2f747370616e3e3c747370616e20783d2236302220793d22323536223e000092810192909252820152611be883610e8d565b606082015260408051808201909152601e81527f3c2f747370616e3e3c747370616e20783d2236302220793d22333030223e000060208201526080820152611c2f83611204565b60a08201526040805180820182526002815261010160f51b60208083019190915260c08401919091526000858152601e90915220546901000000000000000000900460ff16600114611c905760405180602001604052806000815250611cac565b604051806040016040528060028152602001612b3160f01b8152505b60e0820152604080516060810190915260248082526153146020830139610100820152611cdb610c11846116be565b610120820152604080518082019091526002815261111f60f11b6020820152610140820152611d0983610f5a565b610160820152604080518082019091526002815261010160f51b6020820152610180820152611d3783613630565b6101a08201526040805160608101909152602480825261569b60208301396101c0820152611d66836001610b68565b6101e0820152604080518082019091526002815261111f60f11b6020820152610200820152611d9483611144565b6102208201526040805180820182526002815261010160f51b6020808301919091526102408401919091526000858152601e9091522054600160501b900460ff16600114611df15760405180602001604052806000815250611e0d565b604051806040016040528060028152602001612b3160f01b8152505b610260820152604080516060810190915260248082526153386020830139610280820152611e3c836002610b68565b6102a0820152604080518082019091526002815261111f60f11b60208201526102c0820152611e6a8361258e565b6102e08201526040805180820182526002815261010160f51b6020808301919091526103008401919091526000858152601e9091522054600160581b900460ff16600114611ec75760405180602001604052806000815250611ee3565b604051806040016040528060028152602001612b3160f01b8152505b610320820152604080516060810190915260248082526156bf6020830139610340820152611f12836003610b68565b610360820152604080518082019091526002815261111f60f11b6020820152610380820152611f408361134f565b6103a08201526040805180820182526002815261010160f51b6020808301919091526103c08401919091526000858152601e9091522054600160601b900460ff16600114611f9d5760405180602001604052806000815250611fb9565b604051806040016040528060028152602001612b3160f01b8152505b6103e08201526040805161022081019091526101e980825261535c6020830139610400820152611fe8836125e2565b61042082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22323630223e00602082015261044082015261203183612605565b61046082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22333034223e00602082015261048082015261207a83611736565b6104a082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22333438223e0060208201526104c08201526120c38361105e565b6104e082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22333932223e00602082015261050082015261210c83611ad8565b61052082015260408051808201909152601f81527f3c2f747370616e3e3c747370616e20783d223631382220793d22343336223e00602082015261054082015261215583611267565b6105608201526040805160a0810190915260718082526155c0602083013961058082015260408051808201825260068152651e17b9bb339f60d11b6020808301919091526105a0840191909152825181840151838501516060860151608087015160a088015160c089015197516000986121d198909101614be4565b60408051808303601f190181529082905260e08401516101008501516101208601516101408701516101608801516101808901516101a08a01516101c08b0151979950612223988a9890602001614c76565b60408051808303601f19018152908290526101e08401516102008501516102208601516102408701516102608801516102808901516102a08a015196985061227097899790602001614d37565b60408051808303601f19018152908290526102c08401516102e08501516103008601516103208701516103408801516103608901516103808a01519698506122bd97899790602001614d37565b60408051601f19818403018152908290526103a08401516103c08501516103e086015161040087015161042088015161044089015195975061230496889690602001614be4565b60408051808303601f19018152908290526104608401516104808501516104a08601516104c087015193955061233f94869490602001614ddc565b60408051808303601f19018152908290526104e08401516105008501516105208601516105408701516105608801516105808901516105a08a015196985061238c97899790602001614d37565b604051602081830303815290604052905060006123d46123ab866125b8565b6123b487610e8d565b6123bd88611204565b6123c68961375f565b6123cf8a613884565b613995565b905060006124146123e4876128be565b6123ed85613b03565b8460405160200161240093929190614e47565b604051602081830303815290604052613b03565b9050806040516020016124279190614f6d565b60408051601f198184030181529190529695505050505050565b6002600a5414156124645760405162461bcd60e51b8152600401610d5290614acb565b6002600a556103e88a1080159061247d5750611e778a11155b806124975750611f408a1015801561249757506012548a11155b6124b35760405162461bcd60e51b8152600401610d5290614b02565b346124bd8b612552565b11156125015760405162461bcd60e51b8152602060048201526013602482015272506c6561736520706179206d696e742066656560681b6044820152606401610d52565b6011805490600061251183614978565b919050555061133e8a8a8a8a8a8a8a8a8a8a613107565b600b546001600160a01b0316331461168d5760405162461bcd60e51b8152600401610d5290614a96565b6000611e778210156125865760105460115461256e9190614a12565b612579906001614993565b600c54610c459190614a26565b5050600e5490565b6060610c4582604051806040016040528060068152602001652a3930b4ba1960d11b815250613087565b6000818152601e602090815260409091205481546060929160ff16908110610ec057610ec061494c565b6000818152601e6020526040902054606090610c4590610100900460ff166128be565b6000818152601e6020526040902054606090610c459062010000900460ff166128be565b600b546001600160a01b031633146126535760405162461bcd60e51b8152600401610d5290614a96565b6001600160a01b0381166126b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d52565b6126c1816135ab565b50565b600b546001600160a01b031633146126ee5760405162461bcd60e51b8152600401610d5290614a96565b600e55565b6002600a5414156127165760405162461bcd60e51b8152600401610d5290614acb565b6002600a556103e88b1080159061272f5750611e778b11155b806127495750611f408b1015801561274957506012548b11155b6127655760405162461bcd60e51b8152600401610d5290614b02565b601a546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156127a957600080fd5b505afa1580156127bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e19190614fb2565b6001600160a01b0316146128375760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420746865206f776e6572206f662074686973206c6f6f740000000000006044820152606401610d52565b346128418c610ff1565b11156128855760405162461bcd60e51b8152602060048201526013602482015272506c6561736520706179206d696e742066656560681b6044820152606401610d52565b6011805490600061289583614978565b91905055506128ac8b8b8b8b8b8b8b8b8b8b613107565b50506001600a55505050505050505050565b6060816128e25750506040805180820190915260018152600360fc1b602082015290565b8160005b811561290c57806128f681614978565b91506129059050600a83614a12565b91506128e6565b60008167ffffffffffffffff81111561292757612927614721565b6040519080825280601f01601f191660200182016040528015612951576020820181803683370190505b5090505b84156129bc57612966600183614fcf565b9150612973600a86614938565b61297e906030614993565b60f81b8183815181106129935761299361494c565b60200101906001600160f81b031916908160001a9053506129b5600a86614a12565b9450612955565b949350505050565b6000816040516020016129d79190614fe6565b60408051601f19818403018152919052805160209091012092915050565b60608160011415612a235750506040805180820190915260078152660236666633030360cc1b602082015290565b8160021415612a4f5750506040805180820190915260078152660236330303030360cc1b602082015290565b8160031415612a7b5750506040805180820190915260078152662365643764333160c81b602082015290565b8160041415612aa75750506040805180820190915260078152662335623962643560c81b602082015290565b8160051415612ad35750506040805180820190915260078152662337306164343760c81b602082015290565b505060408051808201909152600781526611b3333333333360c91b602082015290565b60006001600160e01b031982166380ac58cd60e01b1480612b2757506001600160e01b03198216635b5e139f60e01b145b80610c4557506301ffc9a760e01b6001600160e01b0319831614610c45565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b7b8261155b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000612bc183610f65565b90506000612bce846116be565b6000838152601f60209081526040808320848452825280832080548251818502810185019093528083529495509293909291849084015b82821015612cb1578382906000526020600020018054612c24906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612c50906149ab565b8015612c9d5780601f10612c7257610100808354040283529160200191612c9d565b820191906000526020600020905b815481529060010190602001808311612c8057829003601f168201915b505050505081526020019060010190612c05565b5050505090506000612cd5612cc5876128be565b604051602001610b929190615002565b9050600082835183612ce79190614938565b81518110612cf757612cf761494c565b6020026020010151905060006048808054905084612d159190614938565b81548110612d2557612d2561494c565b906000526020600020018054612d3a906149ab565b80601f0160208091040260200160405190810160405280929190818152602001828054612d66906149ab565b8015612db35780601f10612d8857610100808354040283529160200191612db3565b820191906000526020600020905b815481529060010190602001808311612d9657829003601f168201915b505050505090508082604051602001612dcd92919061502e565b60408051601f1981840301815291905298975050505050505050565b6000818152600260205260408120546001600160a01b0316612e625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610d52565b6000612e6d8361155b565b9050806001600160a01b0316846001600160a01b03161480612ea85750836001600160a01b0316612e9d84610cdd565b6001600160a01b0316145b806129bc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166129bc565b826001600160a01b0316612eef8261155b565b6001600160a01b031614612f575760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610d52565b6001600160a01b038216612fb95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d52565b612fc4838383613c69565b612fcf600082612b46565b6001600160a01b0383166000908152600360205260408120805460019290612ff8908490614fcf565b90915550506001600160a01b0382166000908152600360205260408120805460019290613026908490614993565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606060006130a983613098866128be565b604051602001610b9292919061506a565b6047549091506000906130bc9083614938565b90506000604782815481106130d3576130d361494c565b906000526020600020016040516020016130ed9190615099565b60408051808303601f190181529190529695505050505050565b60008a8152600260205260409020546001600160a01b03161561313c5760405162461bcd60e51b8152600401610d5290614b02565b60205489106131805760405162461bcd60e51b815260206004820152601060248201526f19d95b99195c9259081a5b9d985b1a5960821b6044820152606401610d52565b601e818385876131908a8c614993565b61319a9190614993565b6131a49190614993565b6131ae9190614993565b6131b89190614993565b11156131ff5760405162461bcd60e51b8152602060048201526016602482015275185d1d1c9a589d5d195cc81b9d5b481a5b9d985b1a5960521b6044820152606401610d52565b60215488106132415760405162461bcd60e51b815260206004820152600e60248201526d1c9858d95259081a5b9d985b1a5960921b6044820152606401610d52565b60225487106132865760405162461bcd60e51b8152602060048201526011602482015270195b195b595b9d1259081a5b9d985b1a59607a1b6044820152606401610d52565b88601e60008c815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555085601e60008c815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555084601e60008c815260200190815260200160002060000160026101000a81548160ff021916908360ff16021790555083601e60008c815260200190815260200160002060000160036101000a81548160ff021916908360ff16021790555082601e60008c815260200190815260200160002060000160046101000a81548160ff021916908360ff16021790555081601e60008c815260200190815260200160002060000160056101000a81548160ff021916908360ff16021790555080601e60008c815260200190815260200160002060000160066101000a81548160ff021916908360ff16021790555087601e60008c815260200190815260200160002060000160076101000a81548160ff021916908360ff16021790555086601e60008c815260200190815260200160002060000160086101000a81548160ff021916908360ff1602179055506000613437613d21565b90508060008151811061344c5761344c61494c565b6020026020010151601e60008d815260200190815260200160002060000160096101000a81548160ff021916908360ff160217905550806001815181106134955761349561494c565b6020026020010151601e60008d8152602001908152602001600020600001600a6101000a81548160ff021916908360ff160217905550806002815181106134de576134de61494c565b6020026020010151601e60008d8152602001908152602001600020600001600b6101000a81548160ff021916908360ff160217905550806003815181106135275761352761494c565b60209081029190910181015160008d8152601e90925260408220805460ff909216600160601b0260ff60601b199092169190911790556018805460018101825591527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018b905561359e6135983390565b8c613e45565b5050505050505050505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b613608848484612edc565b61361484848484613e5f565b611ad25760405162461bcd60e51b8152600401610d529061514c565b604080518082018252600880825267262378323542323b60c01b6020808401919091528351808501855282815267262378323033423b60c01b818301528451808601865283815267262378323139313b60c01b818401528551808701875284815267262378323543423b60c01b818501528651808801885285815267262378323543363b60c01b818601528751808901895295865267262378323541303b60c01b86860152875194850190975260008085526060979395929491939291906136f78a610f65565b9050806001141561370a57839150613752565b806002141561371b57879150613752565b806003141561372c57859150613752565b806004141561373d57849150613752565b806005141561374e57869150613752565b8291505b5098975050505050505050565b604080518082018252600881526720b9b9b0b9b9b4b760c11b602080830191909152825180840184526004808252634d61676560e01b8284015284518086018652600680825265243ab73a32b960d11b828601528651808801885281815265141c9a595cdd60d21b81870152875180890189529384526354616e6b60e01b848701528751808901909852908752652bb0b934b7b960d11b9487019490945260609592939092909190600061381289610f65565b6040805160208101909152600081529091506001821415613834575082613877565b8160021415613844575086613877565b8160031415613854575084613877565b8160041415613864575083613877565b8160051415613874575085613877565b50815b9998505050505050505050565b60606000613891836116be565b905080600114156138be57505060408051808201909152600481526319dbdb1960e21b6020820152919050565b80600214156138e85750506040805180820190915260038152621c995960ea1b6020820152919050565b80600314156139155750506040805180820190915260068152656f72616e676560d01b6020820152919050565b8060041415613940575050604080518082019091526004815263626c756560e01b6020820152919050565b806005141561396c57505060408051808201909152600581526433b932b2b760d91b6020820152919050565b5050604080518082019091526005815264776869746560d81b6020820152919050565b50919050565b606061399f614476565b60405180606001604052806025815260200161559b60259139815260208082018890526040805160608101909152602f808252909161556c908301396040808301919091526060808301859052815190810190915260278082526155456020830139608082015260a081018690526040805160608101909152602a808252615671602083013960c082015260e081018590526040805160608101909152602e8082526152e660208301396101008201526101208101849052604080518082018252600481526322207d5d60e01b602080830191909152610140840191909152825181840151838501516060860151608087015160a088015160c089015160e08a01519851600099613ab299909101614d37565b60408051808303601f1901815290829052610100840151610120850151610140860151929450613ae79385939060200161519e565b60408051808303601f1901815291905298975050505050505050565b805160609080613b23575050604080516020810190915260008152919050565b60006003613b32836002614993565b613b3c9190614a12565b613b47906004614a26565b90506000613b56826020614993565b67ffffffffffffffff811115613b6e57613b6e614721565b6040519080825280601f01601f191660200182016040528015613b98576020820181803683370190505b5090506000604051806060016040528060408152602001615631604091399050600181016020830160005b86811015613c24576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101613bc3565b506003860660018114613c3e5760028114613c4f57613c5b565b613d3d60f01b600119830152613c5b565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b038316613cc457613cbf81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b613ce7565b816001600160a01b0316836001600160a01b031614613ce757613ce78382613f6c565b6001600160a01b038216613cfe57610e8881614009565b826001600160a01b0316826001600160a01b031614610e8857610e8882826140b8565b60606000613d37613d3260646140fc565b61413e565b60408051600480825260a082019092529192506000919060208201608080368337019050509050600060015b60048160ff1611613e3c576000613d7a60026140fc565b60ff16600114905060008386613d9091906151f5565b9050818015613da0575060ff8116155b15613daa57600091505b81158015613dc75750613dbe8360046151f5565b60ff168160ff16115b15613dd157600191505b8115613de55783613de181615218565b9450505b81613df1576000613df4565b60015b85613e006001866151f5565b60ff1681518110613e1357613e1361494c565b602002602001019060ff16908160ff168152505050508080613e3490615218565b915050613d63565b50909392505050565b6111408282604051806020016040528060008152506142cd565b60006001600160a01b0384163b15613f6157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613ea3903390899088908890600401615238565b602060405180830381600087803b158015613ebd57600080fd5b505af1925050508015613eed575060408051601f3d908101601f19168201909252613eea9181019061526b565b60015b613f47573d808015613f1b576040519150601f19603f3d011682016040523d82523d6000602084013e613f20565b606091505b508051613f3f5760405162461bcd60e51b8152600401610d529061514c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506129bc565b506001949350505050565b60006001613f79846115d2565b613f839190614fcf565b600083815260076020526040902054909150808214613fd6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061401b90600190614fcf565b600083815260096020526040812054600880549394509092849081106140435761404361494c565b9060005260206000200154905080600883815481106140645761406461494c565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061409c5761409c615288565b6001900381819060005260206000200160009055905550505050565b60006140c3836115d2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600081424460405160200161411b929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c610c45919061529e565b60008060ff831615801561416c5750606460125461415c9190614a12565b614167906001614a26565b601754105b1561418f576017805490600061418183614978565b909155506004949350505050565b61419a6003826152c0565b90508060ff168360ff16111580156141cc575060646012546141bc9190614a12565b6141c7906003614a26565b601654105b156141ef57601680549060006141e183614978565b909155506003949350505050565b6141fa6005826152c0565b90508060ff168360ff161115801561422c5750606460125461421c9190614a12565b614227906005614a26565b601554105b1561424f576015805490600061424183614978565b909155506002949350505050565b61425a600a826152c0565b90508060ff168360ff161115801561428c5750606460125461427c9190614a12565b61428790600a614a26565b601454105b156142af57601480549060006142a183614978565b909155506001949350505050565b601380549060006142bf83614978565b909155506000949350505050565b6142d78383614300565b6142e46000848484613e5f565b610e885760405162461bcd60e51b8152600401610d529061514c565b6001600160a01b0382166143565760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d52565b6000818152600260205260409020546001600160a01b0316156143bb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d52565b6143c760008383613c69565b6001600160a01b03821660009081526003602052604081208054600192906143f0908490614993565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b604051806105c00160405280602e905b606081526020019060019003908161445e5790505090565b60408051610160810190915260608152600a6020820161445e565b600080604083850312156144a457600080fd5b50508035926020909101359150565b60005b838110156144ce5781810151838201526020016144b6565b83811115611ad25750506000910152565b600081518084526144f78160208601602086016144b3565b601f01601f19169290920160200192915050565b60208152600061147560208301846144df565b6001600160e01b0319811681146126c157600080fd5b60006020828403121561454657600080fd5b81356114758161451e565b60006020828403121561456357600080fd5b5035919050565b6001600160a01b03811681146126c157600080fd5b6000806040838503121561459257600080fd5b823561459d8161456a565b946020939093013593505050565b6000806000606084860312156145c057600080fd5b83356145cb8161456a565b925060208401356145db8161456a565b929592945050506040919091013590565b6000806000806000806000806000806101408b8d03121561460c57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b6000806040838503121561466757600080fd5b8235915060208301356146798161456a565b809150509250929050565b60006020828403121561469657600080fd5b81356114758161456a565b6020808252825182820181905260009190848201906040850190845b818110156146d9578351835292840192918401916001016146bd565b50909695505050505050565b80151581146126c157600080fd5b6000806040838503121561470657600080fd5b82356147118161456a565b91506020830135614679816146e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561476057614760614721565b604052919050565b600067ffffffffffffffff82111561478257614782614721565b50601f01601f191660200190565b600080600080608085870312156147a657600080fd5b84356147b18161456a565b935060208501356147c18161456a565b925060408501359150606085013567ffffffffffffffff8111156147e457600080fd5b8501601f810187136147f557600080fd5b803561480861480382614768565b614737565b81815288602083850101111561481d57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561485257600080fd5b823561485d8161456a565b915060208301356146798161456a565b60008060008060008060008060008060006101608c8e03121561488f57600080fd5b505089359b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e0810135965061010081013595506101208101359450610140013592509050565b64151c985a5d60da1b8152600083516148ff8160058501602088016144b3565b8351908301906149168160058401602088016144b3565b01600501949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261494757614947614922565b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561498c5761498c614962565b5060010190565b600082198211156149a6576149a6614962565b500190565b600181811c908216806149bf57607f821691505b6020821081141561398f57634e487b7160e01b600052602260045260246000fd5b6927b1b1bab830ba34b7b760b11b815260008251614a0581600a8501602087016144b3565b91909101600a0192915050565b600082614a2157614a21614922565b500490565b6000816000190483118215151615614a4057614a40614962565b500290565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f151bdad95b881251081a5b9d985b1a5960821b604082015260600190565b600060208284031215614b3e57600080fd5b8151611475816146e5565b6431b7b637b960d91b815260008251614b698160058501602087016144b3565b9190910160050192915050565b600060208284031215614b8857600080fd5b815167ffffffffffffffff811115614b9f57600080fd5b8201601f81018413614bb057600080fd5b8051614bbe61480382614768565b818152856020838501011115614bd357600080fd5b610fe88260208301602086016144b3565b600088516020614bf78285838e016144b3565b895191840191614c0a8184848e016144b3565b8951920191614c1c8184848d016144b3565b8851920191614c2e8184848c016144b3565b8751920191614c408184848b016144b3565b8651920191614c528184848a016144b3565b8551920191614c6481848489016144b3565b919091019a9950505050505050505050565b60008a51614c88818460208f016144b3565b8a51614c9a8183860160208f016144b3565b8a519184010190614caf818360208e016144b3565b8951614cc18183850160208e016144b3565b8951929091010190614cd7818360208c016144b3565b8751614ce98183850160208c016144b3565b8751929091010190614cff818360208a016144b3565b8551614d118183850160208a016144b3565b8551929091010190614d278183602088016144b3565b019b9a5050505050505050505050565b600089516020614d4a8285838f016144b3565b8a5191840191614d5d8184848f016144b3565b8a51920191614d6f8184848e016144b3565b8951920191614d818184848d016144b3565b8851920191614d938184848c016144b3565b8751920191614da58184848b016144b3565b8651920191614db78184848a016144b3565b8551920191614dc981848489016144b3565b919091019b9a5050505050505050505050565b60008651614dee818460208b016144b3565b865190830190614e02818360208b016144b3565b8651910190614e15818360208a016144b3565b8551910190614e288183602089016144b3565b8451910190614e3b8183602088016144b3565b01979650505050505050565b707b226e616d65223a20224261646765202360781b81528351600090614e748160118501602089016144b3565b7f222c20226465736372697074696f6e223a2022426164676520697320612073656011918401918201527f65642c20612073656564206163636f756e7420666f72206120505650204d657460318201527f6176657273652047616d652e222c2022696d616765223a2022646174613a696d6051820152721859d94bdcdd99cade1b5b0ed8985cd94d8d0b606a1b60718201528451614f198160848401602089016144b3565b601160f91b608492909101918201526d161130ba3a3934b13aba32b9911d60911b60858201528351614f528160938401602088016144b3565b607d60f81b6093929091019182015260940195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251614fa581601d8501602087016144b3565b91909101601d0192915050565b600060208284031215614fc457600080fd5b81516114758161456a565b600082821015614fe157614fe1614962565b500390565b60008251614ff88184602087016144b3565b9190910192915050565b636974656d60e01b8152600082516150218160048501602087016144b3565b9190910160040192915050565b600083516150408184602088016144b3565b600160fd1b908301908152835161505e8160018401602088016144b3565b01600101949350505050565b6000835161507c8184602088016144b3565b8351908301906150908183602088016144b3565b01949350505050565b601160f91b81528154600090600190829080831c818416806150bc57607f821691505b60208083108214156150dc57634e487b7160e01b85526022600452602485fd5b8180156150f0576001811461510557615136565b60ff1985168988015283890187019550615136565b60008a81526020902060005b8581101561512c5781548b82018a0152908801908301615111565b505086848a010195505b5050505050610fe881601160f91b815260010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600085516151b0818460208a016144b3565b8551908301906151c4818360208a016144b3565b85519101906151d78183602089016144b3565b84519101906151ea8183602088016144b3565b019695505050505050565b600060ff821660ff84168082101561520f5761520f614962565b90039392505050565b600060ff821660ff81141561522f5761522f614962565b60010192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610c16908301846144df565b60006020828403121561527d57600080fd5b81516114758161451e565b634e487b7160e01b600052603160045260246000fd5b600060ff8316806152b1576152b1614922565b8060ff84160691505092915050565b600060ff821660ff84168060ff038211156152dd576152dd614962565b01939250505056fe22207d2c207b202274726169745f74797065223a20224f636375706174466c6167222c202276616c7565223a20223c2f747370616e3e3c747370616e20783d2236302220793d22333434222066696c6c3d223c2f747370616e3e3c747370616e20783d2236302220793d22343332222066696c6c3d223c2f747370616e3e3c2f746578743e3c746578742069643d225374722d5374612d4167692d4368612d496e742d5368692220666f6e742d66616d696c793d2247656f726769612220666f6e742d73697a653d2232382220666f6e742d7765696768743d226e6f726d616c22206c696e652d73706163696e673d223434222066696c6c3d2223464646464646223e3c747370616e20783d223532322220793d22323136223e5374723c2f747370616e3e3c747370616e20783d223532322220793d22323630223e5374613c2f747370616e3e3c747370616e20783d223532322220793d22333034223e4167693c2f747370616e3e3c747370616e20783d223532322220793d22333438223e4368613c2f747370616e3e3c747370616e20783d223532322220793d22333932223e496e743c2f747370616e3e3c747370616e20783d223532322220793d22343336223e5368693c2f747370616e3e3c2f746578743e3c746578742069643d22322d332d362d372d312d312220666f6e742d66616d696c793d2247656f726769612220666f6e742d73697a653d2232382220666f6e742d7765696768743d226e6f726d616c22206c696e652d73706163696e673d223434222066696c6c3d2223464646464646223e3c747370616e20783d223631382220793d22323136223e22207d2c207b202274726169745f74797065223a202252616365222c202276616c7565223a202222207d2c207b202274726169745f74797065223a20224f636375706174436f6c6f72222c202276616c7565223a20225b7b202274726169745f74797065223a202247656e646572222c202276616c7565223a20223c2f747370616e3e3c2f746578743e3c6c696e652078313d223439302e35222079313d223139322e35222078323d223439302e35222079323d223437352e3522207374726f6b653d222339373937393722207374726f6b652d6c696e656361703d22737175617265223e3c2f6c696e653e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f22207d2c207b202274726169745f74797065223a2022456c656d656e74222c202276616c7565223a20223c2f747370616e3e3c747370616e20783d2236302220793d22333838222066696c6c3d223c2f747370616e3e3c747370616e20783d2236302220793d22343736222066696c6c3d22a2646970667358221220b3d52f34e554e47386999178ee74f47e3acac0367d111d8c743aa16f9ae9bfcb64736f6c63430008080033
Deployed Bytecode Sourcemap
44834:36724:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59331:452;;;;;;;;;;-1:-1:-1;59331:452:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38338:224;;;;;;;;;;-1:-1:-1;38338:224:0;;;;;:::i;:::-;;:::i;:::-;;;1569:14:1;;1562:22;1544:41;;1532:2;1517:18;38338:224:0;1404:187:1;45360:36:0;;;;;;;;;;;;;;;;;;;1742:25:1;;;1730:2;1715:18;45360:36:0;1596:177:1;25452:100:0;;;;;;;;;;;;;:::i;27011:221::-;;;;;;;;;;-1:-1:-1;27011:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2127:32:1;;;2109:51;;2097:2;2082:18;27011:221:0;1963:203:1;26534:411:0;;;;;;;;;;-1:-1:-1;26534:411:0;;;;;:::i;:::-;;:::i;:::-;;57680:127;;;;;;;;;;-1:-1:-1;57680:127:0;;;;;:::i;:::-;;:::i;45637:71::-;;;;;;;;;;-1:-1:-1;45637:71:0;;;;-1:-1:-1;;;;;45637:71:0;;;57959:117;;;;;;;;;;-1:-1:-1;57959:117:0;;;;;:::i;:::-;;:::i;58103:397::-;;;;;;;;;;-1:-1:-1;58103:397:0;;;;;:::i;:::-;;:::i;38978:113::-;;;;;;;;;;-1:-1:-1;39066:10:0;:17;38978:113;;55497:250;;;;;;;;;;-1:-1:-1;55497:250:0;;;;;:::i;:::-;;:::i;45450:38::-;;;;;;;;;;;;;;;;27901:339;;;;;;;;;;-1:-1:-1;27901:339:0;;;;;:::i;:::-;;:::i;45109:51::-;;;;;;;;;;;;;;;;45269:36;;;;;;;;;;;;;;;;57238:138;;;;;;;;;;-1:-1:-1;57238:138:0;;;;;:::i;:::-;;:::i;56268:187::-;;;;;;;;;;-1:-1:-1;56268:187:0;;;;;:::i;:::-;;:::i;58938:123::-;;;;;;;;;;-1:-1:-1;58938:123:0;;;;;:::i;:::-;;:::i;44971:55::-;;;;;;;;;;;;;;;;38646:256;;;;;;;;;;-1:-1:-1;38646:256:0;;;;;:::i;:::-;;:::i;45222:38::-;;;;;;;;;;;;;;;;57815:136;;;;;;;;;;-1:-1:-1;57815:136:0;;;;;:::i;:::-;;:::i;56011:124::-;;;;;;;;;;-1:-1:-1;56011:124:0;;;;;:::i;:::-;;:::i;57538:134::-;;;;;;;;;;-1:-1:-1;57538:134:0;;;;;:::i;:::-;;:::i;45497:37::-;;;;;;;;;;;;;;;;45314;;;;;;;;;;;;;;;;28311:185;;;;;;;;;;-1:-1:-1;28311:185:0;;;;;:::i;:::-;;:::i;79028:455::-;;;;;;;;;;-1:-1:-1;79028:455:0;;;;;:::i;:::-;;:::i;59200:123::-;;;;;;;;;;-1:-1:-1;59200:123:0;;;;;:::i;:::-;;:::i;76705:507::-;;;;;;;;;;-1:-1:-1;76705:507:0;;;;;:::i;:::-;;:::i;39168:233::-;;;;;;;;;;-1:-1:-1;39168:233:0;;;;;:::i;:::-;;:::i;56143:117::-;;;;;;;;;;-1:-1:-1;56143:117:0;;;;;:::i;:::-;;:::i;25146:239::-;;;;;;;;;;-1:-1:-1;25146:239:0;;;;;:::i;:::-;;:::i;45046:44::-;;;;;;;;;;;;;;;;24876:208;;;;;;;;;;-1:-1:-1;24876:208:0;;;;;:::i;:::-;;:::i;9856:94::-;;;;;;;;;;;;;:::i;55867:136::-;;;;;;;;;;-1:-1:-1;55867:136:0;;;;;:::i;:::-;;:::i;58527:403::-;;;;;;;;;;-1:-1:-1;58527:403:0;;;;;:::i;:::-;;:::i;44904:48::-;;;;;;;;;;;;;;;;57094:136;;;;;;;;;;-1:-1:-1;57094:136:0;;;;;:::i;:::-;;:::i;9205:87::-;;;;;;;;;;-1:-1:-1;9278:6:0;;-1:-1:-1;;;;;9278:6:0;9205:87;;55145:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;78481:539::-;;;;;;;;;;-1:-1:-1;78481:539:0;;;;;:::i;:::-;;:::i;25621:104::-;;;;;;;;;;;;;:::i;45843:71::-;;;;;;;;;;-1:-1:-1;45843:71:0;;;;-1:-1:-1;;;;;45843:71:0;;;27304:295;;;;;;;;;;-1:-1:-1;27304:295:0;;;;;:::i;:::-;;:::i;76558:139::-;;;;;;;;;;-1:-1:-1;76558:139:0;;;;;:::i;:::-;;:::i;28567:328::-;;;;;;;;;;-1:-1:-1;28567:328:0;;;;;:::i;:::-;;:::i;57384:146::-;;;;;;;;;;-1:-1:-1;57384:146:0;;;;;:::i;:::-;;:::i;63392:8898::-;;;;;;;;;;-1:-1:-1;63392:8898:0;;;;;:::i;:::-;;:::i;77220:561::-;;;;;;:::i;:::-;;:::i;55023:114::-;;;;;;;;;;-1:-1:-1;55110:19:0;;55023:114;;56463:46;;;:::i;55263:226::-;;;;;;;;;;-1:-1:-1;55263:226:0;;;;;:::i;:::-;;:::i;59069:123::-;;;;;;;;;;-1:-1:-1;59069:123:0;;;;;:::i;:::-;;:::i;56663:133::-;;;;;;;;;;-1:-1:-1;56663:133:0;;;;;:::i;:::-;;:::i;56804:138::-;;;;;;;;;;-1:-1:-1;56804:138:0;;;;;:::i;:::-;;:::i;56950:136::-;;;;;;;;;;-1:-1:-1;56950:136:0;;;;;:::i;:::-;;:::i;45405:36::-;;;;;;;;;;;;;;;;27670:164;;;;;;;;;;-1:-1:-1;27670:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27791:25:0;;;27767:4;27791:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27670:164;10105:192;;;;;;;;;;-1:-1:-1;10105:192:0;;;;;:::i;:::-;;:::i;55755:104::-;;;;;;;;;;-1:-1:-1;55755:104:0;;;;;:::i;:::-;;:::i;77789:684::-;;;;;;:::i;:::-;;:::i;59331:452::-;59407:13;59433:12;59448:77;59488:15;59497:5;59488:8;:15::i;:::-;59505:17;59514:7;59505:8;:17::i;:::-;59462:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59448:6;:77::i;:::-;59559:6;:13;59433:92;;-1:-1:-1;59536:13:0;;59552:20;;59433:92;59552:20;:::i;:::-;59536:36;;59585:6;59606:135;59616:15;:22;59612:26;;59606:135;;;59671:15;59687:1;59671:18;;;;;;;;:::i;:::-;;;;;;;;;59662:5;:27;59659:71;;59709:5;;59659:71;59640:3;;;;:::i;:::-;;;;59606:135;;;59758:17;59771:3;:1;59773;59771:3;:::i;:::-;59758:12;:17::i;:::-;59751:24;59331:452;-1:-1:-1;;;;;;59331:452:0:o;38338:224::-;38440:4;-1:-1:-1;;;;;;38464:50:0;;-1:-1:-1;;;38464:50:0;;:90;;;38518:36;38542:11;38518:23;:36::i;:::-;38457:97;38338:224;-1:-1:-1;;38338:224:0:o;25452:100::-;25506:13;25539:5;25532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25452:100;:::o;27011:221::-;27087:7;30494:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30494:16:0;27107:73;;;;-1:-1:-1;;;27107:73:0;;10756:2:1;27107:73:0;;;10738:21:1;10795:2;10775:18;;;10768:30;10834:34;10814:18;;;10807:62;-1:-1:-1;;;10885:18:1;;;10878:42;10937:19;;27107:73:0;;;;;;;;;-1:-1:-1;27200:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27200:24:0;;27011:221::o;26534:411::-;26615:13;26631:23;26646:7;26631:14;:23::i;:::-;26615:39;;26679:5;-1:-1:-1;;;;;26673:11:0;:2;-1:-1:-1;;;;;26673:11:0;;;26665:57;;;;-1:-1:-1;;;26665:57:0;;11169:2:1;26665:57:0;;;11151:21:1;11208:2;11188:18;;;11181:30;11247:34;11227:18;;;11220:62;-1:-1:-1;;;11298:18:1;;;11291:31;11339:19;;26665:57:0;10967:397:1;26665:57:0;8145:10;-1:-1:-1;;;;;26757:21:0;;;;:62;;-1:-1:-1;26782:37:0;26799:5;8145:10;27670:164;:::i;26782:37::-;26735:168;;;;-1:-1:-1;;;26735:168:0;;11571:2:1;26735:168:0;;;11553:21:1;11610:2;11590:18;;;11583:30;11649:34;11629:18;;;11622:62;11720:26;11700:18;;;11693:54;11764:19;;26735:168:0;11369:420:1;26735:168:0;26916:21;26925:2;26929:7;26916:8;:21::i;:::-;26604:341;26534:411;;:::o;57680:127::-;57774:19;;;;:10;:19;;;;;:24;57768:5;:31;;57735:13;;57774:24;;;;;;57768:31;;;;;;:::i;:::-;;;;;;;;57761:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57680:127;;;:::o;57959:117::-;58020:13;58053:15;58060:7;58053:6;:15::i;58103:397::-;58168:7;58188:12;58203:65;58248:17;58257:7;58248:8;:17::i;:::-;58217:49;;;;;;;;:::i;58203:65::-;58188:80;-1:-1:-1;58279:13:0;58295:10;58302:3;58188:80;58295:10;:::i;:::-;58279:26;;58318:6;58339:133;58349:14;:21;58345:25;;58339:133;;;58403:14;58418:1;58403:17;;;;;;;;:::i;:::-;;;;;;;;;58394:5;:26;58391:70;;58440:5;;58391:70;58372:3;;;;:::i;:::-;;;;58339:133;;;58489:3;:1;58491;58489:3;:::i;:::-;58482:10;58103:397;-1:-1:-1;;;;;58103:397:0:o;55497:250::-;55569:7;55600:4;55592:7;:12;55589:116;;;55682:10;;55662:19;;:30;;;;:::i;:::-;55660:32;;:1;:32;:::i;:::-;55637:21;;:56;;;;:::i;55589:116::-;-1:-1:-1;;55722:17:0;;;55497:250::o;27901:339::-;28096:41;8145:10;28129:7;28096:18;:41::i;:::-;28088:103;;;;-1:-1:-1;;;28088:103:0;;;;;;;:::i;:::-;28204:28;28214:4;28220:2;28224:7;28204:9;:28::i;57238:138::-;57339:19;;;;:10;:19;;;;;:28;57297:13;;57330:38;;57339:28;;;;;57330:8;:38::i;56268:187::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;56338:17:::1;::::0;-1:-1:-1;;;;;56338:17:0::1;56330:72;;;::::0;-1:-1:-1;;;56330:72:0;;13507:2:1;56330:72:0::1;::::0;::::1;13489:21:1::0;13546:2;13526:18;;;13519:30;13585:28;13565:18;;;13558:56;13631:18;;56330:72:0::1;13305:350:1::0;56330:72:0::1;56413:17;::::0;:34:::1;::::0;-1:-1:-1;;;;;56413:17:0;;::::1;::::0;:34;::::1;;;::::0;56440:6;;56413:17:::1;:34:::0;:17;:34;56440:6;56413:17;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;56268:187:::0;:::o;58938:123::-;58995:13;59028:25;59035:7;59028:25;;;;;;;;;;;;;-1:-1:-1;;;59028:25:0;;;:6;:25::i;38646:256::-;38743:7;38779:23;38796:5;38779:16;:23::i;:::-;38771:5;:31;38763:87;;;;-1:-1:-1;;;38763:87:0;;13862:2:1;38763:87:0;;;13844:21:1;13901:2;13881:18;;;13874:30;13940:34;13920:18;;;13913:62;-1:-1:-1;;;13991:18:1;;;13984:41;14042:19;;38763:87:0;13660:407:1;38763:87:0;-1:-1:-1;;;;;;38868:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38646:256::o;57815:136::-;57915:19;;;;:10;:19;;;;;:27;57906:8;:37;;57873:13;;57915:27;;;;;;57906:37;;;;;;:::i;56011:124::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;56093:14:::1;:34:::0;56011:124::o;57538:134::-;57637:19;;;;:10;:19;;;;;:26;57595:13;;57628:36;;57637:26;;;;;57628:8;:36::i;28311:185::-;28449:39;28466:4;28472:2;28476:7;28449:39;;;;;;;;;;;;:16;:39::i;79028:455::-;12144:1;12740:7;;:19;;12732:63;;;;-1:-1:-1;;;12732:63:0;;;;;;;:::i;:::-;12144:1;12873:7;:18;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23:::1;9417:68;;;;-1:-1:-1::0;;;9417:68:0::1;;;;;;;:::i;:::-;79276:4:::2;79265:7;:15;;:34;;;;;79295:4;79284:7;:15;;79265:34;79257:63;;;;-1:-1:-1::0;;;79257:63:0::2;;;;;;;:::i;:::-;79333:92;79340:7;79349:8;79359:6;79367:9;79378:6;79386;79394;79402;79410;79418;79333;:92::i;:::-;-1:-1:-1::0;;12100:1:0;13052:7;:22;-1:-1:-1;;;;;;;;79028:455:0:o;59200:123::-;59257:13;59290:25;59297:7;59290:25;;;;;;;;;;;;;-1:-1:-1;;;59290:25:0;;;:6;:25::i;76705:507::-;76787:4;30494:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30494:16:0;:30;;;76849:332;;76896:1;76887:7;:10;;:26;;;;;76910:3;76901:7;:12;;76887:26;:69;;;;-1:-1:-1;76918:12:0;;:38;;-1:-1:-1;;;76918:38:0;;-1:-1:-1;;;;;2127:32:1;;;76918:38:0;;;2109:51:1;76918:12:0;;;;:32;;2082:18:1;;76918:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76917:39;76887:69;76884:286;;;-1:-1:-1;77008:5:0;76884:286;;;77062:4;77051:7;:15;;:34;;;;;77081:4;77070:7;:15;;77051:34;:51;;;;-1:-1:-1;9278:6:0;;-1:-1:-1;;;;;77089:13:0;;;9278:6;;77089:13;;77051:51;77048:122;;;-1:-1:-1;77149:5:0;77048:122;77198:6;76705:507;-1:-1:-1;;;76705:507:0:o;39168:233::-;39243:7;39279:30;39066:10;:17;;38978:113;39279:30;39271:5;:38;39263:95;;;;-1:-1:-1;;;39263:95:0;;15229:2:1;39263:95:0;;;15211:21:1;15268:2;15248:18;;;15241:30;15307:34;15287:18;;;15280:62;-1:-1:-1;;;15358:18:1;;;15351:42;15410:19;;39263:95:0;15027:408:1;39263:95:0;39376:10;39387:5;39376:17;;;;;;;;:::i;:::-;;;;;;;;;39369:24;;39168:233;;;:::o;56143:117::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;56223:17:::1;:29:::0;;-1:-1:-1;;;;;;56223:29:0::1;-1:-1:-1::0;;;;;56223:29:0;;;::::1;::::0;;;::::1;::::0;;56143:117::o;25146:239::-;25218:7;25254:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25254:16:0;25289:19;25281:73;;;;-1:-1:-1;;;25281:73:0;;15642:2:1;25281:73:0;;;15624:21:1;15681:2;15661:18;;;15654:30;15720:34;15700:18;;;15693:62;-1:-1:-1;;;15771:18:1;;;15764:39;15820:19;;25281:73:0;15440:405:1;24876:208:0;24948:7;-1:-1:-1;;;;;24976:19:0;;24968:74;;;;-1:-1:-1;;;24968:74:0;;16052:2:1;24968:74:0;;;16034:21:1;16091:2;16071:18;;;16064:30;16130:34;16110:18;;;16103:62;-1:-1:-1;;;16181:18:1;;;16174:40;16231:19;;24968:74:0;15850:406:1;24968:74:0;-1:-1:-1;;;;;;25060:16:0;;;;;:9;:16;;;;;;;24876:208::o;9856:94::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;9921:21:::1;9939:1;9921:9;:21::i;:::-;9856:94::o:0;55867:136::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;55955:17:::1;:40:::0;55867:136::o;58527:403::-;58593:7;58613:13;58629:60;58669:17;58678:7;58669:8;:17::i;:::-;58643:44;;;;;;;;:::i;58629:60::-;58613:76;-1:-1:-1;58700:18:0;58721:11;58729:3;58613:76;58721:11;:::i;:::-;58700:32;;58743:6;58764:138;58774:14;:21;58770:25;;58764:138;;;58833:14;58848:1;58833:17;;;;;;;;:::i;:::-;;;;;;;;;58819:10;:31;58816:75;;58870:5;;58816:75;58797:3;;;;:::i;:::-;;;;58764:138;;57094:136;57194:19;;;;:10;:19;;;;;:27;57152:13;;57185:37;;57194:27;;;;;57185:8;:37::i;55145:110::-;55195:13;55233:14;55226:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55145:110;:::o;78481:539::-;12144:1;12740:7;;:19;;12732:63;;;;-1:-1:-1;;;12732:63:0;;;;;;;:::i;:::-;12144:1;12873:7;:18;78725:1:::1;78714:12:::0;::::1;::::0;::::1;::::0;:30:::1;;;78741:3;78730:7;:14;;78714:30;78706:60;;;;-1:-1:-1::0;;;78706:60:0::1;;;;;;;:::i;:::-;78787:12;::::0;-1:-1:-1;;;;;78787:12:0::1;:32;8145:10:::0;78787:46:::1;::::0;-1:-1:-1;;;;;;78787:46:0::1;::::0;;;;;;-1:-1:-1;;;;;2127:32:1;;;78787:46:0::1;::::0;::::1;2109:51:1::0;2082:18;;78787:46:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78779:75;;;::::0;-1:-1:-1;;;78779:75:0;;16890:2:1;78779:75:0::1;::::0;::::1;16872:21:1::0;16929:2;16909:18;;;16902:30;-1:-1:-1;;;16948:18:1;;;16941:46;17004:18;;78779:75:0::1;16688:340:1::0;78779:75:0::1;78865:12;::::0;-1:-1:-1;;;;;78865:12:0::1;:28;8145:10:::0;78865:42:::1;::::0;-1:-1:-1;;;;;;78865:42:0::1;::::0;;;;;;-1:-1:-1;;;;;2127:32:1;;;78865:42:0::1;::::0;::::1;2109:51:1::0;2082:18;;78865:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;78920:92;78927:7;78936:8;78946:6;78954:9;78965:6;78973;78981;78989;78997;79005;78920;:92::i;25621:104::-:0;25677:13;25710:7;25703:14;;;;;:::i;27304:295::-;-1:-1:-1;;;;;27407:24:0;;8145:10;27407:24;;27399:62;;;;-1:-1:-1;;;27399:62:0;;17235:2:1;27399:62:0;;;17217:21:1;17274:2;17254:18;;;17247:30;17313:27;17293:18;;;17286:55;17358:18;;27399:62:0;17033:349:1;27399:62:0;8145:10;27474:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27474:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;27474:53:0;;;;;;;;;;27543:48;;1544:41:1;;;27474:42:0;;8145:10;27543:48;;1517:18:1;27543:48:0;;;;;;;27304:295;;:::o;76558:139::-;76651:12;;:38;;-1:-1:-1;;;76651:38:0;;-1:-1:-1;;;;;2127:32:1;;;76651:38:0;;;2109:51:1;76622:4:0;;76651:12;;:32;;2082:18:1;;76651:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28567:328::-;28742:41;8145:10;28775:7;28742:18;:41::i;:::-;28734:103;;;;-1:-1:-1;;;28734:103:0;;;;;;;:::i;:::-;28848:39;28862:4;28868:2;28872:7;28881:5;28848:13;:39::i;:::-;28567:328;;;;:::o;57384:146::-;57489:19;;;;:10;:19;;;;;:32;57447:13;;57480:42;;57489:32;;;;;57480:8;:42::i;63392:8898::-;63457:13;63483:23;;:::i;:::-;63528:12;;;;;;;;;-1:-1:-1;;;;;63528:12:0;-1:-1:-1;;;;;63528:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;63528:30:0;;;;;;;;;;;;:::i;:::-;63519:39;;68224:18;68234:7;68224:9;:18::i;:::-;68213:8;;;;:29;;;;68253:43;;;;;;;;;;;;;;;;;;;:8;;:43;68318:16;68326:7;68318;:16::i;:::-;68307:8;;;:27;68345:43;;;;;;;;;;;;;-1:-1:-1;68345:43:0;;;:8;;;:43;68410:19;68421:7;68410:10;:19::i;:::-;68399:8;;;:30;68442:15;;;;;;;;;;;-1:-1:-1;;;68399:8:0;68442:15;;;;;;;:8;;;:15;;;;-1:-1:-1;68481:19:0;;;:10;:19;;;;:27;;;;;;68512:1;68481:32;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;68481:44:0;;;;68470:8;;;:55;68538:49;;;;;;;;;;;;;;68470:8;68538:49;;;:8;;;:49;68609:41;68622:27;68641:7;68622:18;:27::i;68609:41::-;68598:8;;;:52;68661:16;;;;;;;;;;;;-1:-1:-1;;;68598:8:0;68661:16;;;:9;;;:16;68700:22;68714:7;68700:13;:22::i;:::-;68688:9;;;:34;68733:16;;;;;;;;;;;;-1:-1:-1;;;68688:9:0;68733:16;;;:9;;;:16;68772;68780:7;68772;:16::i;:::-;68760:9;;;:28;68799:50;;;;;;;;;;;;;;68760:9;68799:50;;;:9;;;:50;68872:25;68886:7;68895:1;68872:13;:25::i;:::-;68860:9;;;:37;68908:16;;;;;;;;;;;;-1:-1:-1;;;68860:9:0;68908:16;;;:9;;;:16;68947:18;68957:7;68947:9;:18::i;:::-;68935:9;;;:30;68978:16;;;;;;;;;;;-1:-1:-1;;;68935:9:0;68978:16;;;;;;;:9;;;:16;;;;-1:-1:-1;69019:19:0;;;:10;:19;;;;:27;-1:-1:-1;;;69019:27:0;;;;69050:1;69019:32;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;69019:44:0;;;;69007:9;;;:56;69076:50;;;;;;;;;;;;;;69007:9;69076:50;;;:9;;;:50;69149:25;69163:7;69172:1;69149:13;:25::i;:::-;69137:9;;;:37;69185:16;;;;;;;;;;;;-1:-1:-1;;;69137:9:0;69185:16;;;:9;;;:16;69224:18;69234:7;69224:9;:18::i;:::-;69212:9;;;:30;69255:16;;;;;;;;;;;-1:-1:-1;;;69212:9:0;69255:16;;;;;;;:9;;;:16;;;;-1:-1:-1;69296:19:0;;;:10;:19;;;;:27;-1:-1:-1;;;69296:27:0;;;;69327:1;69296:32;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;69296:44:0;;;;69284:9;;;:56;69353:50;;;;;;;;;;;;;;69284:9;69353:50;;;:9;;;:50;69426:25;69440:7;69449:1;69426:13;:25::i;:::-;69414:9;;;:37;69462:16;;;;;;;;;;;;-1:-1:-1;;;69414:9:0;69462:16;;;:9;;;:16;69501:18;69511:7;69501:9;:18::i;:::-;69489:9;;;:30;69532:16;;;;;;;;;;;-1:-1:-1;;;69489:9:0;69532:16;;;;;;;:9;;;:16;;;;-1:-1:-1;69573:19:0;;;69538:2;69573:19;;;;:27;-1:-1:-1;;;69573:27:0;;;;69604:1;69573:32;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;69573:44:0;;;;69561:9;;;:56;69630:503;;;;;;;;;;;;;;69561:9;69630:503;;;:9;;;:503;70156:20;70168:7;70156:11;:20::i;:::-;70144:9;;;:32;70187:45;;;;;;;;;;;;;70144:9;70187:45;;;:9;;;:45;70255:19;70266:7;70255:10;:19::i;:::-;70243:9;;;:31;70285:45;;;;;;;;;;;;;70243:9;70285:45;;;:9;;;:45;70353:19;70364:7;70353:10;:19::i;:::-;70341:9;;;:31;70383:45;;;;;;;;;;;;;70341:9;70383:45;;;:9;;;:45;70451:20;70463:7;70451:11;:20::i;:::-;70439:9;;;:32;70482:45;;;;;;;;;;;;;70439:9;70482:45;;;:9;;;:45;70550:24;70566:7;70550:15;:24::i;:::-;70538:9;;;:36;70585:45;;;;;;;;;;;;;70538:9;70585:45;;;:9;;;:45;70653:18;70663:7;70653:9;:18::i;:::-;70641:9;;;:30;70682:127;;;;;;;;;;;;;;70641:9;70682:127;;;:9;;;:127;70820:20;;;;;;;;;;;-1:-1:-1;;;70682:9:0;70820:20;;;;;;;:9;;;:20;;;;70900:8;;70910;;;;70920;;;;70930;;;;70940;;;;70950;;;;70960;;;;70883:86;;-1:-1:-1;;70883:86:0;;70960:8;;70883:86;;:::i;:::-;;;;;;;-1:-1:-1;;70883:86:0;;;;;;;71022:8;;;;71032;;;;71041;;;;71051:9;;;;71062;;;;71073;;;;71084;;;;71095;;;;70883:86;;-1:-1:-1;70997:108:0;;70883:86;;71095:9;71022:8;70997:108;;:::i;:::-;;;;;;;-1:-1:-1;;70997:108:0;;;;;;;71158:9;;;;71169;;;;71179;;;;71190;;;;71201;;;;71212;;;;71223;;;;70997:108;;-1:-1:-1;71133:100:0;;70997:108;;71223:9;71158;71133:100;;:::i;:::-;;;;;;;-1:-1:-1;;71133:100:0;;;;;;;71286:9;;;;71297;;;;71308;;;;71318;;;;71329;;;;71340;;;;71351;;;;71133:100;;-1:-1:-1;71261:100:0;;71133;;71351:9;71286;71261:100;;:::i;:::-;;;;-1:-1:-1;;71261:100:0;;;;;;;;;;71414:9;;;;71425;;;;71436;;;;71446;;;;71457;;;;71468;;;;71261:100;;-1:-1:-1;71389:89:0;;71261:100;;71468:9;71414;71389:89;;:::i;:::-;;;;;;;-1:-1:-1;;71389:89:0;;;;;;;71531:9;;;;71542;;;;71553;;;;71564;;;;71389:89;;-1:-1:-1;71506:68:0;;71389:89;;71564:9;71531;71506:68;;:::i;:::-;;;;;;;-1:-1:-1;;71506:68:0;;;;;;;71627:9;;;;71638;;;;71649;;;;71660;;;;71671;;;;71682;;;;71693;;;;71506:68;;-1:-1:-1;71602:101:0;;71506:68;;71693:9;71627;71602:101;;:::i;:::-;;;;;;;;;;;;;71586:118;;71717:24;71744:122;71763:18;71773:7;71763:9;:18::i;:::-;71783:16;71791:7;71783;:16::i;:::-;71801:19;71812:7;71801:10;:19::i;:::-;71822:20;71834:7;71822:11;:20::i;:::-;71844:21;71857:7;71844:12;:21::i;:::-;71744:18;:122::i;:::-;71717:149;;71877:18;71898:275;71963:17;71972:7;71963:8;:17::i;:::-;72101:28;72121:6;72101:13;:28::i;:::-;72154:10;71925:245;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;71898:13;:275::i;:::-;71877:296;;72250:4;72200:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;72200:55:0;;;;;;;;;;63392:8898;-1:-1:-1;;;;;;63392:8898:0:o;77220:561::-;12144:1;12740:7;;:19;;12732:63;;;;-1:-1:-1;;;12732:63:0;;;;;;;:::i;:::-;12144:1;12873:7;:18;77460:4:::1;77449:15:::0;::::1;::::0;::::1;::::0;:34:::1;;;77479:4;77468:7;:15;;77449:34;77448:86;;;;77500:4;77489:7;:15;;:44;;;;;77519:14;;77508:7;:25;;77489:44;77440:115;;;;-1:-1:-1::0;;;77440:115:0::1;;;;;;;:::i;:::-;77603:9;77574:25;77591:7;77574:16;:25::i;:::-;:38;;77566:70;;;::::0;-1:-1:-1;;;77566:70:0;;26479:2:1;77566:70:0::1;::::0;::::1;26461:21:1::0;26518:2;26498:18;;;26491:30;-1:-1:-1;;;26537:18:1;;;26530:49;26596:18;;77566:70:0::1;26277:343:1::0;77566:70:0::1;77649:19;:21:::0;;;:19:::1;:21;::::0;::::1;:::i;:::-;;;;;;77681:92;77688:7;77697:8;77707:6;77715:9;77726:6;77734;77742;77750;77758;77766;77681;:92::i;56463:46::-:0;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;55263:226::-;55327:7;55358:4;55350:7;:12;55347:108;;;55432:10;;55412:19;;:30;;;;:::i;:::-;55410:32;;:1;:32;:::i;:::-;55395:13;;:48;;;;:::i;55347:108::-;-1:-1:-1;;55472:9:0;;;55263:226::o;59069:123::-;59126:13;59159:25;59166:7;59159:25;;;;;;;;;;;;;-1:-1:-1;;;59159:25:0;;;:6;:25::i;56663:133::-;56761:19;;;;:10;56753:7;56761:19;;;;;;;:26;56753:35;;56720:13;;56753:7;56761:26;;;56753:35;;;;;;:::i;56804:138::-;56905:19;;;;:10;:19;;;;;:28;56863:13;;56896:38;;56905:28;;;;;56896:8;:38::i;56950:136::-;57050:19;;;;:10;:19;;;;;:27;57008:13;;57041:37;;57050:27;;;;;57041:8;:37::i;10105:192::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10194:22:0;::::1;10186:73;;;::::0;-1:-1:-1;;;10186:73:0;;26827:2:1;10186:73:0::1;::::0;::::1;26809:21:1::0;26866:2;26846:18;;;26839:30;26905:34;26885:18;;;26878:62;-1:-1:-1;;;26956:18:1;;;26949:36;27002:19;;10186:73:0::1;26625:402:1::0;10186:73:0::1;10270:19;10280:8;10270:9;:19::i;:::-;10105:192:::0;:::o;55755:104::-;9278:6;;-1:-1:-1;;;;;9278:6:0;8145:10;9425:23;9417:68;;;;-1:-1:-1;;;9417:68:0;;;;;;;:::i;:::-;55827:9:::1;:24:::0;55755:104::o;77789:684::-;12144:1;12740:7;;:19;;12732:63;;;;-1:-1:-1;;;12732:63:0;;;;;;;:::i;:::-;12144:1;12873:7;:18;78052:4:::1;78041:15:::0;::::1;::::0;::::1;::::0;:34:::1;;;78071:4;78060:7;:15;;78041:34;78040:86;;;;78092:4;78081:7;:15;;:44;;;;;78111:14;;78100:7;:25;;78081:44;78032:115;;;;-1:-1:-1::0;;;78032:115:0::1;;;;;;;:::i;:::-;78166:12;::::0;:28:::1;::::0;-1:-1:-1;;;78166:28:0;;::::1;::::0;::::1;1742:25:1::0;;;78198:10:0::1;::::0;-1:-1:-1;;;;;78166:12:0::1;::::0;:20:::1;::::0;1715:18:1;;78166:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;78166:42:0::1;;78158:81;;;::::0;-1:-1:-1;;;78158:81:0;;27490:2:1;78158:81:0::1;::::0;::::1;27472:21:1::0;27529:2;27509:18;;;27502:30;27568:28;27548:18;;;27541:56;27614:18;;78158:81:0::1;27288:350:1::0;78158:81:0::1;78295:9;78258:33;78283:7;78258:24;:33::i;:::-;:46;;78250:78;;;::::0;-1:-1:-1;;;78250:78:0;;26479:2:1;78250:78:0::1;::::0;::::1;26461:21:1::0;26518:2;26498:18;;;26491:30;-1:-1:-1;;;26537:18:1;;;26530:49;26596:18;;78250:78:0::1;26277:343:1::0;78250:78:0::1;78341:19;:21:::0;;;:19:::1;:21;::::0;::::1;:::i;:::-;;;;;;78373:92;78380:7;78389:8;78399:6;78407:9;78418:6;78426;78434;78442;78450;78458;78373;:92::i;:::-;-1:-1:-1::0;;12100:1:0;13052:7;:22;-1:-1:-1;;;;;;;;;77789:684:0:o;79491:723::-;79547:13;79768:10;79764:53;;-1:-1:-1;;79795:10:0;;;;;;;;;;;;-1:-1:-1;;;79795:10:0;;;;;79491:723::o;79764:53::-;79842:5;79827:12;79883:78;79890:9;;79883:78;;79916:8;;;;:::i;:::-;;-1:-1:-1;79939:10:0;;-1:-1:-1;79947:2:0;79939:10;;:::i;:::-;;;79883:78;;;79971:19;80003:6;79993:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;79993:17:0;;79971:39;;80021:154;80028:10;;80021:154;;80055:11;80065:1;80055:11;;:::i;:::-;;-1:-1:-1;80124:10:0;80132:2;80124:5;:10;:::i;:::-;80111:24;;:2;:24;:::i;:::-;80098:39;;80081:6;80088;80081:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;80081:56:0;;;;;;;;-1:-1:-1;80152:11:0;80161:2;80152:11;;:::i;:::-;;;80021:154;;;80199:6;79491:723;-1:-1:-1;;;;79491:723:0:o;56517:138::-;56577:7;56639:5;56622:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;56622:23:0;;;;;;;;;56612:34;;56622:23;56612:34;;;;;56517:138;-1:-1:-1;;56517:138:0:o;59791:445::-;59851:13;59880:5;59889:1;59880:10;59877:352;;;-1:-1:-1;;59906:16:0;;;;;;;;;;;;-1:-1:-1;;;59906:16:0;;;;;59791:445::o;59877:352::-;59942:5;59951:1;59942:10;59939:290;;;-1:-1:-1;;59968:16:0;;;;;;;;;;;;-1:-1:-1;;;59968:16:0;;;;;59791:445::o;59939:290::-;60004:5;60013:1;60004:10;60001:228;;;-1:-1:-1;;60030:16:0;;;;;;;;;;;;-1:-1:-1;;;60030:16:0;;;;;59791:445::o;60001:228::-;60066:5;60075:1;60066:10;60063:166;;;-1:-1:-1;;60092:16:0;;;;;;;;;;;;-1:-1:-1;;;60092:16:0;;;;;59791:445::o;60063:166::-;60128:5;60137:1;60128:10;60125:104;;;-1:-1:-1;;60154:16:0;;;;;;;;;;;;-1:-1:-1;;;60154:16:0;;;;;59791:445::o;60125:104::-;-1:-1:-1;;60201:16:0;;;;;;;;;;;;-1:-1:-1;;;60201:16:0;;;;;59791:445::o;24519:293::-;24621:4;-1:-1:-1;;;;;;24654:40:0;;-1:-1:-1;;;24654:40:0;;:101;;-1:-1:-1;;;;;;;24707:48:0;;-1:-1:-1;;;24707:48:0;24654:101;:150;;;-1:-1:-1;;;;;;;;;;23235:40:0;;;24768:36;23126:157;34387:174;34462:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34462:29:0;-1:-1:-1;;;;;34462:29:0;;;;;;;;:24;;34516:23;34462:24;34516:14;:23::i;:::-;-1:-1:-1;;;;;34507:46:0;;;;;;;;;;;34387:174;;:::o;60244:580::-;60300:13;60326:16;60345:26;60363:7;60345:17;:26::i;:::-;60326:45;;60382:17;60402:27;60421:7;60402:18;:27::i;:::-;60440;60470:17;;;:7;:17;;;;;;;;:28;;;;;;;;60440:58;;;;;;;;;;;;;;;;;60382:47;;-1:-1:-1;60440:27:0;;:58;;60470:28;60440:27;;:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60511:12;60526:59;60565:17;60574:7;60565:8;:17::i;:::-;60540:43;;;;;;;;:::i;60526:59::-;60511:74;;60596:20;60619:11;60638;:18;60631:4;:25;;;;:::i;:::-;60619:38;;;;;;;;:::i;:::-;;;;;;;60596:61;;60670:20;60693:9;60710;:16;;;;60703:4;:23;;;;:::i;:::-;60693:34;;;;;;;;:::i;:::-;;;;;;;;60670:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60771:6;60784;60754:37;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;60754:37:0;;;;;;;;;;60244:580;-1:-1:-1;;;;;;;;60244:580:0:o;30699:348::-;30792:4;30494:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30494:16:0;30809:73;;;;-1:-1:-1;;;30809:73:0;;29301:2:1;30809:73:0;;;29283:21:1;29340:2;29320:18;;;29313:30;29379:34;29359:18;;;29352:62;-1:-1:-1;;;29430:18:1;;;29423:42;29482:19;;30809:73:0;29099:408:1;30809:73:0;30893:13;30909:23;30924:7;30909:14;:23::i;:::-;30893:39;;30962:5;-1:-1:-1;;;;;30951:16:0;:7;-1:-1:-1;;;;;30951:16:0;;:51;;;;30995:7;-1:-1:-1;;;;;30971:31:0;:20;30983:7;30971:11;:20::i;:::-;-1:-1:-1;;;;;30971:31:0;;30951:51;:87;;;-1:-1:-1;;;;;;27791:25:0;;;27767:4;27791:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31006:32;27670:164;33691:578;33850:4;-1:-1:-1;;;;;33823:31:0;:23;33838:7;33823:14;:23::i;:::-;-1:-1:-1;;;;;33823:31:0;;33815:85;;;;-1:-1:-1;;;33815:85:0;;29714:2:1;33815:85:0;;;29696:21:1;29753:2;29733:18;;;29726:30;29792:34;29772:18;;;29765:62;-1:-1:-1;;;29843:18:1;;;29836:39;29892:19;;33815:85:0;29512:405:1;33815:85:0;-1:-1:-1;;;;;33919:16:0;;33911:65;;;;-1:-1:-1;;;33911:65:0;;30124:2:1;33911:65:0;;;30106:21:1;30163:2;30143:18;;;30136:30;30202:34;30182:18;;;30175:62;-1:-1:-1;;;30253:18:1;;;30246:34;30297:19;;33911:65:0;29922:400:1;33911:65:0;33989:39;34010:4;34016:2;34020:7;33989:20;:39::i;:::-;34093:29;34110:1;34114:7;34093:8;:29::i;:::-;-1:-1:-1;;;;;34135:15:0;;;;;;:9;:15;;;;;:20;;34154:1;;34135:15;:20;;34154:1;;34135:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34166:13:0;;;;;;:9;:13;;;;;:18;;34183:1;;34166:13;:18;;34183:1;;34166:18;:::i;:::-;;;;-1:-1:-1;;34195:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34195:21:0;-1:-1:-1;;;;;34195:21:0;;;;;;;;;34234:27;;34195:16;;34234:27;;;;;;;33691:578;;;:::o;60832:346::-;60913:13;60939:12;60954:62;60985:9;60996:17;61005:7;60996:8;:17::i;:::-;60968:46;;;;;;;;;:::i;60954:62::-;61050:6;:13;60939:77;;-1:-1:-1;61027:13:0;;61043:20;;60939:77;61043:20;:::i;:::-;61027:36;;61074:20;61126:6;61133:5;61126:13;;;;;;;;:::i;:::-;;;;;;;;61104:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;61104:41:0;;;;;;;60832:346;-1:-1:-1;;;;;;60832:346:0:o;75162:1388::-;30470:4;30494:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30494:16:0;:30;75367:46;;;;-1:-1:-1;;;75367:46:0;;;;;;;:::i;:::-;75443:7;:14;75432:25;;75424:54;;;;-1:-1:-1;;;75424:54:0;;32537:2:1;75424:54:0;;;32519:21:1;32576:2;32556:18;;;32549:30;-1:-1:-1;;;32595:18:1;;;32588:46;32651:18;;75424:54:0;32335:340:1;75424:54:0;75548:2;75538:6;75530;75522;75514;75497:15;75506:6;75497;:15;:::i;:::-;:23;;;;:::i;:::-;:31;;;;:::i;:::-;:39;;;;:::i;:::-;:47;;;;:::i;:::-;:53;;75489:88;;;;-1:-1:-1;;;75489:88:0;;32882:2:1;75489:88:0;;;32864:21:1;32921:2;32901:18;;;32894:30;-1:-1:-1;;;32940:18:1;;;32933:52;33002:18;;75489:88:0;32680:346:1;75489:88:0;75605:5;:12;75596:21;;75588:48;;;;-1:-1:-1;;;75588:48:0;;33233:2:1;75588:48:0;;;33215:21:1;33272:2;33252:18;;;33245:30;-1:-1:-1;;;33291:18:1;;;33284:44;33345:18;;75588:48:0;33031:338:1;75588:48:0;75667:8;:15;75655:27;;75647:57;;;;-1:-1:-1;;;75647:57:0;;33576:2:1;75647:57:0;;;33558:21:1;33615:2;33595:18;;;33588:30;-1:-1:-1;;;33634:18:1;;;33627:47;33691:18;;75647:57:0;33374:341:1;75647:57:0;75752:8;75717:10;:19;75728:7;75717:19;;;;;;;;;;;:26;;;:44;;;;;;;;;;;;;;;;;;75809:6;75772:10;:19;75783:7;75772:19;;;;;;;;;;;:28;;;:44;;;;;;;;;;;;;;;;;;75863:6;75827:10;:19;75838:7;75827:19;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;75917:6;75881:10;:19;75892:7;75881:19;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;75972:6;75935:10;:19;75946:7;75935:19;;;;;;;;;;;:28;;;:44;;;;;;;;;;;;;;;;;;76031:6;75990:10;:19;76001:7;75990:19;;;;;;;;;;;:32;;;:48;;;;;;;;;;;;;;;;;;76084:6;76049:10;:19;76060:7;76049:19;;;;;;;;;;;:26;;;:42;;;;;;;;;;;;;;;;;;76135:6;76102:10;:19;76113:7;76102:19;;;;;;;;;;;:24;;;:40;;;;;;;;;;;;;;;;;;76189:9;76153:10;:19;76164:7;76153:19;;;;;;;;;;;:27;;;:46;;;;;;;;;;;;;;;;;;76212:24;76239:15;:13;:15::i;:::-;76212:42;;76293:9;76303:1;76293:12;;;;;;;;:::i;:::-;;;;;;;76265:10;:19;76276:7;76265:19;;;;;;;;;;;:27;;;:40;;;;;;;;;;;;;;;;;;76344:9;76354:1;76344:12;;;;;;;;:::i;:::-;;;;;;;76316:10;:19;76327:7;76316:19;;;;;;;;;;;:27;;;:40;;;;;;;;;;;;;;;;;;76395:9;76405:1;76395:12;;;;;;;;:::i;:::-;;;;;;;76367:10;:19;76378:7;76367:19;;;;;;;;;;;:27;;;:40;;;;;;;;;;;;;;;;;;76446:9;76456:1;76446:12;;;;;;;;:::i;:::-;;;;;;;;;;;;76418:19;;;;:10;:19;;;;;;:40;;;;;;-1:-1:-1;;;76418:40:0;-1:-1:-1;;;;76418:40:0;;;;;;;;;76471:14;:28;;-1:-1:-1;76471:28:0;;;;;;;;;;;76510:32;76520:12;8145:10;;8065:98;76520:12;76534:7;76510:9;:32::i;:::-;75356:1194;75162:1388;;;;;;;;;;:::o;10305:173::-;10380:6;;;-1:-1:-1;;;;;10397:17:0;;;-1:-1:-1;;;;;;10397:17:0;;;;;;;10430:40;;10380:6;;;10397:17;10380:6;;10430:40;;10361:16;;10430:40;10350:128;10305:173;:::o;29777:315::-;29934:28;29944:4;29950:2;29954:7;29934:9;:28::i;:::-;29981:48;30004:4;30010:2;30014:7;30023:5;29981:22;:48::i;:::-;29973:111;;;;-1:-1:-1;;;29973:111:0;;;;;;;:::i;61186:839::-;61269:35;;;;;;;;;;;;-1:-1:-1;;;61269:35:0;;;;;;;;61315:31;;;;;;;;;;-1:-1:-1;;;61315:31:0;;;;61357:33;;;;;;;;;;-1:-1:-1;;;61357:33:0;;;;61401;;;;;;;;;;-1:-1:-1;;;61401:33:0;;;;61445:31;;;;;;;;;;-1:-1:-1;;;61445:31:0;;;;61487:33;;;;;;;;;;-1:-1:-1;;;61487:33:0;;;;61533:23;;;;;;;;61269:22;61533:23;;;61243:13;;61315:31;;61357:33;;61401;;61445:31;61487:33;61533:23;61587:26;61605:7;61587:17;:26::i;:::-;61567:46;;61629:9;61642:1;61629:14;61626:368;;;61668:4;61659:13;;61626:368;;;61693:9;61706:1;61693:14;61689:305;;;61732:8;61723:17;;61689:305;;;61761:9;61774:1;61761:14;61757:237;;;61800:6;61791:15;;61757:237;;;61827:9;61840:1;61827:14;61823:171;;;61866:6;61857:15;;61823:171;;;61893:9;61906:1;61893:14;61889:105;;;61932:4;61923:13;;61889:105;;;61976:6;61967:15;;61889:105;-1:-1:-1;62011:6:0;61186:839;-1:-1:-1;;;;;;;;61186:839:0:o;62033:829::-;62120:35;;;;;;;;;;;-1:-1:-1;;;62120:35:0;;;;;;;;62166:27;;;;;;;;;;;-1:-1:-1;;;62166:27:0;;;;62204:31;;;;;;;;;;;-1:-1:-1;;;62204:31:0;;;;62246;;;;;;;;;;-1:-1:-1;;;62246:31:0;;;;62288:27;;;;;;;;;;-1:-1:-1;;;62288:27:0;;;;62326:31;;;;;;;;;;;-1:-1:-1;;;62326:31:0;;;;;;;62094:13;;62166:27;;62204:31;;62246;;62288:27;62120:22;62390:26;62408:7;62390:17;:26::i;:::-;62427:25;;;;;;;;;:20;:25;;62370:46;;-1:-1:-1;62479:1:0;62466:14;;62463:368;;;-1:-1:-1;62505:4:0;62463:368;;;62530:9;62543:1;62530:14;62526:305;;;-1:-1:-1;62569:8:0;62526:305;;;62598:9;62611:1;62598:14;62594:237;;;-1:-1:-1;62637:6:0;62594:237;;;62664:9;62677:1;62664:14;62660:171;;;-1:-1:-1;62703:6:0;62660:171;;;62730:9;62743:1;62730:14;62726:105;;;-1:-1:-1;62769:4:0;62726:105;;;-1:-1:-1;62813:6:0;62726:105;62848:6;62033:829;-1:-1:-1;;;;;;;;;62033:829:0:o;62870:514::-;62932:13;62958:17;62978:27;62997:7;62978:18;:27::i;:::-;62958:47;;63019:9;63032:1;63019:14;63016:361;;;-1:-1:-1;;63049:13:0;;;;;;;;;;;;-1:-1:-1;;;63049:13:0;;;;;62870:514;-1:-1:-1;62870:514:0:o;63016:361::-;63083:9;63096:1;63083:14;63079:298;;;-1:-1:-1;;63113:12:0;;;;;;;;;;;;-1:-1:-1;;;63113:12:0;;;;;62870:514;-1:-1:-1;62870:514:0:o;63079:298::-;63146:9;63159:1;63146:14;63142:235;;;-1:-1:-1;;63176:15:0;;;;;;;;;;;;-1:-1:-1;;;63176:15:0;;;;;62870:514;-1:-1:-1;62870:514:0:o;63142:235::-;63212:9;63225:1;63212:14;63208:169;;;-1:-1:-1;;63242:13:0;;;;;;;;;;;;-1:-1:-1;;;63242:13:0;;;;;62870:514;-1:-1:-1;62870:514:0:o;63208:169::-;63276:9;63289:1;63276:14;63272:105;;;-1:-1:-1;;63306:14:0;;;;;;;;;;;;-1:-1:-1;;;63306:14:0;;;;;62870:514;-1:-1:-1;62870:514:0:o;63272:105::-;-1:-1:-1;;63351:14:0;;;;;;;;;;;;-1:-1:-1;;;63351:14:0;;;;;62870:514;-1:-1:-1;62870:514:0:o;63272:105::-;62947:437;62870:514;;;:::o;72298:1056::-;72451:13;72476:27;;:::i;:::-;72514:54;;;;;;;;;;;;;;;;;;;:12;72579;;;:21;;;72611:64;;;;;;;;;;;;;;;;;;;;:12;;;;:64;;;;72686:12;;;;:20;;;72717:56;;;;;;;;;;;;;72611:12;72717:56;;;:12;;;:56;72784:12;;;:19;;;72814:59;;;;;;;;;;;;;;72717:12;72814:59;;;:12;;;:59;72884:12;;;:18;;;72913:63;;;;;;;;;;;;;;72814:12;72913:63;;;:12;;;:63;72987:12;;;:19;;;73017:22;;;;;;;;;;;-1:-1:-1;;;72913:12:0;73017:22;;;;;;;:13;;;:22;;;;73103:12;;73117;;;;73131;;;;73145;;;;73159;;;;73173;;;;-1:-1:-1;;;73187:12:0;-1:-1:-1;;;73201:12:0;73086:128;;-1:-1:-1;;73086:128:0;;73201:12;;73086:128;;:::i;:::-;;;;;;;-1:-1:-1;;73086:128:0;;;;;;;73275:12;;;;73289;;;;73303:13;;;;73086:128;;-1:-1:-1;73246:71:0;;73086:128;;73303:13;73275:12;73246:71;;:::i;:::-;;;;;;;-1:-1:-1;;73246:71:0;;;;;;;72298:1056;-1:-1:-1;;;;;;;;72298:1056:0:o;81758:1607::-;81856:11;;81816:13;;81882:8;81878:23;;-1:-1:-1;;81892:9:0;;;;;;;;;-1:-1:-1;81892:9:0;;;81758:1607;-1:-1:-1;81758:1607:0:o;81878:23::-;81953:18;81991:1;81980:7;:3;81986:1;81980:7;:::i;:::-;81979:13;;;;:::i;:::-;81974:19;;:1;:19;:::i;:::-;81953:40;-1:-1:-1;82051:19:0;82083:15;81953:40;82096:2;82083:15;:::i;:::-;82073:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;82073:26:0;;82051:48;;82112:18;82133:5;;;;;;;;;;;;;;;;;82112:26;;82202:1;82195:5;82191:13;82247:2;82239:6;82235:15;82298:1;82266:777;82321:3;82318:1;82315:10;82266:777;;;82376:1;82419:12;;;;;82413:19;82514:4;82502:2;82498:14;;;;;82480:40;;82474:47;82623:2;82619:14;;;82615:25;;82601:40;;82595:47;82752:1;82748:13;;;82744:24;;82730:39;;82724:46;82872:16;;;;82858:31;;82852:38;82550:1;82546:11;;;82644:4;82591:58;;;82582:68;82675:11;;82720:57;;;82711:67;;;;82803:11;;82848:49;;82839:59;82927:3;82923:13;82956:22;;83026:1;83011:17;;;;82369:9;82266:777;;;82270:44;83075:1;83070:3;83066:11;83096:1;83091:84;;;;83194:1;83189:82;;;;83059:212;;83091:84;-1:-1:-1;;;;;83124:17:0;;83117:43;83091:84;;83189:82;-1:-1:-1;;;;;83222:17:0;;83215:41;83059:212;-1:-1:-1;;;83287:26:0;;;83294:6;81758:1607;-1:-1:-1;;;;81758:1607:0:o;40014:589::-;-1:-1:-1;;;;;40220:18:0;;40216:187;;40255:40;40287:7;41430:10;:17;;41403:24;;;;:15;:24;;;;;:44;;;41458:24;;;;;;;;;;;;41326:164;40255:40;40216:187;;;40325:2;-1:-1:-1;;;;;40317:10:0;:4;-1:-1:-1;;;;;40317:10:0;;40313:90;;40344:47;40377:4;40383:7;40344:32;:47::i;:::-;-1:-1:-1;;;;;40417:16:0;;40413:183;;40450:45;40487:7;40450:36;:45::i;40413:183::-;40523:4;-1:-1:-1;;;;;40517:10:0;:2;-1:-1:-1;;;;;40517:10:0;;40513:83;;40544:40;40572:2;40576:7;40544:27;:40::i;74389:763::-;74431:14;74457:11;74471:25;74481:14;74491:3;74481:9;:14::i;:::-;74471:9;:25::i;:::-;74534:14;;;74546:1;74534:14;;;;;;;;;74457:39;;-1:-1:-1;74507:24:0;;74534:14;;;;;;;;;;;-1:-1:-1;;74507:41:0;-1:-1:-1;74559:17:0;74605:1;74590:528;74613:1;74608;:6;;;74590:528;;74645:13;74661:12;74671:1;74661:9;:12::i;:::-;:17;;74677:1;74661:17;74645:33;;74693:16;74720:11;74712:5;:19;;;;:::i;:::-;74693:38;;74752:8;:27;;;;-1:-1:-1;74764:15:0;;;;74752:27;74748:97;;;74824:5;74813:16;;74748:97;74863:17;;;;:39;;-1:-1:-1;74897:5:0;74901:1;74897;:5;:::i;:::-;74884:18;;:10;:18;;;74863:39;74859:108;;;74947:4;74936:15;;74859:108;74984:8;74981:74;;;75026:13;;;;:::i;:::-;;;;74981:74;75090:8;:16;;75105:1;75090:16;;;75101:1;75090:16;75071:9;75081:5;75085:1;75081;:5;:::i;:::-;75071:16;;;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;74630:488;;74616:3;;;;;:::i;:::-;;;;74590:528;;;-1:-1:-1;75135:9:0;;74389:763;-1:-1:-1;;;74389:763:0:o;31389:110::-;31465:26;31475:2;31479:7;31465:26;;;;;;;;;;;;:9;:26::i;35126:803::-;35281:4;-1:-1:-1;;;;;35302:13:0;;15621:20;15669:8;35298:624;;35338:72;;-1:-1:-1;;;35338:72:0;;-1:-1:-1;;;;;35338:36:0;;;;;:72;;8145:10;;35389:4;;35395:7;;35404:5;;35338:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35338:72:0;;;;;;;;-1:-1:-1;;35338:72:0;;;;;;;;;;;;:::i;:::-;;;35334:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35584:13:0;;35580:272;;35627:60;;-1:-1:-1;;;35627:60:0;;;;;;;:::i;35580:272::-;35802:6;35796:13;35787:6;35783:2;35779:15;35772:38;35334:533;-1:-1:-1;;;;;;35461:55:0;-1:-1:-1;;;35461:55:0;;-1:-1:-1;35454:62:0;;35298:624;-1:-1:-1;35906:4:0;35126:803;;;;;;:::o;42117:988::-;42383:22;42433:1;42408:22;42425:4;42408:16;:22::i;:::-;:26;;;;:::i;:::-;42445:18;42466:26;;;:17;:26;;;;;;42383:51;;-1:-1:-1;42599:28:0;;;42595:328;;-1:-1:-1;;;;;42666:18:0;;42644:19;42666:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42717:30;;;;;;:44;;;42834:30;;:17;:30;;;;;:43;;;42595:328;-1:-1:-1;43019:26:0;;;;:17;:26;;;;;;;;43012:33;;;-1:-1:-1;;;;;43063:18:0;;;;;:12;:18;;;;;:34;;;;;;;43056:41;42117:988::o;43400:1079::-;43678:10;:17;43653:22;;43678:21;;43698:1;;43678:21;:::i;:::-;43710:18;43731:24;;;:15;:24;;;;;;44104:10;:26;;43653:46;;-1:-1:-1;43731:24:0;;43653:46;;44104:26;;;;;;:::i;:::-;;;;;;;;;44082:48;;44168:11;44143:10;44154;44143:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44248:28;;;:15;:28;;;;;;;:41;;;44420:24;;;;;44413:31;44455:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43471:1008;;;43400:1079;:::o;40904:221::-;40989:14;41006:20;41023:2;41006:16;:20::i;:::-;-1:-1:-1;;;;;41037:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41082:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40904:221:0:o;73364:175::-;73419:5;73525:6;73485:15;73502:16;73468:51;;;;;;;;36419:19:1;;;36463:2;36454:12;;36447:28;36500:2;36491:12;;36262:247;73468:51:0;;;;;;;;;;;;;73458:62;;;;;;73450:71;;73444:87;;;;:::i;73547:834::-;73594:5;;73643:13;;;;;;:63;;;73698:3;73681:14;;:20;;;;:::i;:::-;:25;;73705:1;73681:25;:::i;:::-;73660:18;;:46;73643:63;73639:148;;;73732:18;:20;;;:18;:20;;;:::i;:::-;;;;-1:-1:-1;73774:1:0;;73547:834;-1:-1:-1;;;;73547:834:0:o;73639:148::-;73797:11;73807:1;73797:11;;:::i;:::-;;;73830:6;73823:13;;:3;:13;;;;:63;;;;;73879:3;73862:14;;:20;;;;:::i;:::-;:24;;73885:1;73862:24;:::i;:::-;73840:19;;:46;73823:63;73819:149;;;73912:19;:21;;;:19;:21;;;:::i;:::-;;;;-1:-1:-1;73955:1:0;;73547:834;-1:-1:-1;;;;73547:834:0:o;73819:149::-;73978:11;73988:1;73978:11;;:::i;:::-;;;74011:6;74004:13;;:3;:13;;;;:61;;;;;74058:3;74041:14;;:20;;;;:::i;:::-;:24;;74064:1;74041:24;:::i;:::-;74021:17;;:44;74004:61;74000:145;;;74091:17;:19;;;:17;:19;;;:::i;:::-;;;;-1:-1:-1;74132:1:0;;73547:834;-1:-1:-1;;;;73547:834:0:o;74000:145::-;74155:12;74165:2;74155:12;;:::i;:::-;;;74189:6;74182:13;;:3;:13;;;;:62;;;;;74236:3;74219:14;;:20;;;;:::i;:::-;:25;;74242:2;74219:25;:::i;:::-;74199:17;;:45;74182:62;74178:146;;;74270:17;:19;;;:17;:19;;;:::i;:::-;;;;-1:-1:-1;74311:1:0;;73547:834;-1:-1:-1;;;;73547:834:0:o;74178:146::-;74334:18;:20;;;:18;:20;;;:::i;:::-;;;;-1:-1:-1;74372:1:0;;73547:834;-1:-1:-1;;;;73547:834:0:o;31726:321::-;31856:18;31862:2;31866:7;31856:5;:18::i;:::-;31907:54;31938:1;31942:2;31946:7;31955:5;31907:22;:54::i;:::-;31885:154;;;;-1:-1:-1;;;31885:154:0;;;;;;;:::i;32383:382::-;-1:-1:-1;;;;;32463:16:0;;32455:61;;;;-1:-1:-1;;;32455:61:0;;37087:2:1;32455:61:0;;;37069:21:1;;;37106:18;;;37099:30;37165:34;37145:18;;;37138:62;37217:18;;32455:61:0;36885:356:1;32455:61:0;30470:4;30494:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30494:16:0;:30;32527:58;;;;-1:-1:-1;;;32527:58:0;;37448:2:1;32527:58:0;;;37430:21:1;37487:2;37467:18;;;37460:30;37526;37506:18;;;37499:58;37574:18;;32527:58:0;37246:352:1;32527:58:0;32598:45;32627:1;32631:2;32635:7;32598:20;:45::i;:::-;-1:-1:-1;;;;;32656:13:0;;;;;;:9;:13;;;;;:18;;32673:1;;32656:13;:18;;32673:1;;32656:18;:::i;:::-;;;;-1:-1:-1;;32685:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32685:21:0;-1:-1:-1;;;;;32685:21:0;;;;;;;;32724:33;;32685:16;;;32724:33;;32685:16;;32724:33;32383:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;14:248:1;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:258::-;339:1;349:113;363:6;360:1;357:13;349:113;;;439:11;;;433:18;420:11;;;413:39;385:2;378:10;349:113;;;480:6;477:1;474:13;471:48;;;-1:-1:-1;;515:1:1;497:16;;490:27;267:258::o;530:::-;572:3;610:5;604:12;637:6;632:3;625:19;653:63;709:6;702:4;697:3;693:14;686:4;679:5;675:16;653:63;:::i;:::-;770:2;749:15;-1:-1:-1;;745:29:1;736:39;;;;777:4;732:50;;530:258;-1:-1:-1;;530:258:1:o;793:220::-;942:2;931:9;924:21;905:4;962:45;1003:2;992:9;988:18;980:6;962:45;:::i;1018:131::-;-1:-1:-1;;;;;;1092:32:1;;1082:43;;1072:71;;1139:1;1136;1129:12;1154:245;1212:6;1265:2;1253:9;1244:7;1240:23;1236:32;1233:52;;;1281:1;1278;1271:12;1233:52;1320:9;1307:23;1339:30;1363:5;1339:30;:::i;1778:180::-;1837:6;1890:2;1878:9;1869:7;1865:23;1861:32;1858:52;;;1906:1;1903;1896:12;1858:52;-1:-1:-1;1929:23:1;;1778:180;-1:-1:-1;1778:180:1:o;2171:131::-;-1:-1:-1;;;;;2246:31:1;;2236:42;;2226:70;;2292:1;2289;2282:12;2307:315;2375:6;2383;2436:2;2424:9;2415:7;2411:23;2407:32;2404:52;;;2452:1;2449;2442:12;2404:52;2491:9;2478:23;2510:31;2535:5;2510:31;:::i;:::-;2560:5;2612:2;2597:18;;;;2584:32;;-1:-1:-1;;;2307:315:1:o;2627:456::-;2704:6;2712;2720;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;:::-;2897:5;-1:-1:-1;2954:2:1;2939:18;;2926:32;2967:33;2926:32;2967:33;:::i;:::-;2627:456;;3019:7;;-1:-1:-1;;;3073:2:1;3058:18;;;;3045:32;;2627:456::o;3088:799::-;3228:6;3236;3244;3252;3260;3268;3276;3284;3292;3300;3353:3;3341:9;3332:7;3328:23;3324:33;3321:53;;;3370:1;3367;3360:12;3321:53;-1:-1:-1;;3393:23:1;;;3463:2;3448:18;;3435:32;;-1:-1:-1;3514:2:1;3499:18;;3486:32;;3565:2;3550:18;;3537:32;;-1:-1:-1;3616:3:1;3601:19;;3588:33;;-1:-1:-1;3668:3:1;3653:19;;3640:33;;-1:-1:-1;3720:3:1;3705:19;;3692:33;;-1:-1:-1;3772:3:1;3757:19;;3744:33;;-1:-1:-1;3824:3:1;3809:19;;3796:33;;-1:-1:-1;3876:3:1;3861:19;3848:33;;-1:-1:-1;3088:799:1;-1:-1:-1;3088:799:1:o;3892:315::-;3960:6;3968;4021:2;4009:9;4000:7;3996:23;3992:32;3989:52;;;4037:1;4034;4027:12;3989:52;4073:9;4060:23;4050:33;;4133:2;4122:9;4118:18;4105:32;4146:31;4171:5;4146:31;:::i;:::-;4196:5;4186:15;;;3892:315;;;;;:::o;4212:255::-;4279:6;4332:2;4320:9;4311:7;4307:23;4303:32;4300:52;;;4348:1;4345;4338:12;4300:52;4387:9;4374:23;4406:31;4431:5;4406:31;:::i;4724:632::-;4895:2;4947:21;;;5017:13;;4920:18;;;5039:22;;;4866:4;;4895:2;5118:15;;;;5092:2;5077:18;;;4866:4;5161:169;5175:6;5172:1;5169:13;5161:169;;;5236:13;;5224:26;;5305:15;;;;5270:12;;;;5197:1;5190:9;5161:169;;;-1:-1:-1;5347:3:1;;4724:632;-1:-1:-1;;;;;;4724:632:1:o;5361:118::-;5447:5;5440:13;5433:21;5426:5;5423:32;5413:60;;5469:1;5466;5459:12;5484:382;5549:6;5557;5610:2;5598:9;5589:7;5585:23;5581:32;5578:52;;;5626:1;5623;5616:12;5578:52;5665:9;5652:23;5684:31;5709:5;5684:31;:::i;:::-;5734:5;-1:-1:-1;5791:2:1;5776:18;;5763:32;5804:30;5763:32;5804:30;:::i;5871:127::-;5932:10;5927:3;5923:20;5920:1;5913:31;5963:4;5960:1;5953:15;5987:4;5984:1;5977:15;6003:275;6074:2;6068:9;6139:2;6120:13;;-1:-1:-1;;6116:27:1;6104:40;;6174:18;6159:34;;6195:22;;;6156:62;6153:88;;;6221:18;;:::i;:::-;6257:2;6250:22;6003:275;;-1:-1:-1;6003:275:1:o;6283:186::-;6331:4;6364:18;6356:6;6353:30;6350:56;;;6386:18;;:::i;:::-;-1:-1:-1;6452:2:1;6431:15;-1:-1:-1;;6427:29:1;6458:4;6423:40;;6283:186::o;6474:1016::-;6569:6;6577;6585;6593;6646:3;6634:9;6625:7;6621:23;6617:33;6614:53;;;6663:1;6660;6653:12;6614:53;6702:9;6689:23;6721:31;6746:5;6721:31;:::i;:::-;6771:5;-1:-1:-1;6828:2:1;6813:18;;6800:32;6841:33;6800:32;6841:33;:::i;:::-;6893:7;-1:-1:-1;6947:2:1;6932:18;;6919:32;;-1:-1:-1;7002:2:1;6987:18;;6974:32;7029:18;7018:30;;7015:50;;;7061:1;7058;7051:12;7015:50;7084:22;;7137:4;7129:13;;7125:27;-1:-1:-1;7115:55:1;;7166:1;7163;7156:12;7115:55;7202:2;7189:16;7227:48;7243:31;7271:2;7243:31;:::i;:::-;7227:48;:::i;:::-;7298:2;7291:5;7284:17;7338:7;7333:2;7328;7324;7320:11;7316:20;7313:33;7310:53;;;7359:1;7356;7349:12;7310:53;7414:2;7409;7405;7401:11;7396:2;7389:5;7385:14;7372:45;7458:1;7453:2;7448;7441:5;7437:14;7433:23;7426:34;7479:5;7469:15;;;;;6474:1016;;;;;;;:::o;7495:388::-;7563:6;7571;7624:2;7612:9;7603:7;7599:23;7595:32;7592:52;;;7640:1;7637;7630:12;7592:52;7679:9;7666:23;7698:31;7723:5;7698:31;:::i;:::-;7748:5;-1:-1:-1;7805:2:1;7790:18;;7777:32;7818:33;7777:32;7818:33;:::i;7888:870::-;8037:6;8045;8053;8061;8069;8077;8085;8093;8101;8109;8117:7;8171:3;8159:9;8150:7;8146:23;8142:33;8139:53;;;8188:1;8185;8178:12;8139:53;-1:-1:-1;;8211:23:1;;;8281:2;8266:18;;8253:32;;-1:-1:-1;8332:2:1;8317:18;;8304:32;;8383:2;8368:18;;8355:32;;-1:-1:-1;8434:3:1;8419:19;;8406:33;;-1:-1:-1;8486:3:1;8471:19;;8458:33;;-1:-1:-1;8538:3:1;8523:19;;8510:33;;-1:-1:-1;8590:3:1;8575:19;;8562:33;;-1:-1:-1;8642:3:1;8627:19;;8614:33;;-1:-1:-1;8694:3:1;8679:19;;8666:33;;-1:-1:-1;8747:3:1;8732:19;8719:33;;-1:-1:-1;7888:870:1;-1:-1:-1;7888:870:1:o;8763:615::-;-1:-1:-1;;;9068:3:1;9061:20;9043:3;9110:6;9104:13;9126:61;9180:6;9176:1;9171:3;9167:11;9160:4;9152:6;9148:17;9126:61;:::i;:::-;9247:13;;9206:16;;;;9269:62;9247:13;9318:1;9310:10;;9303:4;9291:17;;9269:62;:::i;:::-;9351:17;9370:1;9347:25;;8763:615;-1:-1:-1;;;;8763:615:1:o;9383:127::-;9444:10;9439:3;9435:20;9432:1;9425:31;9475:4;9472:1;9465:15;9499:4;9496:1;9489:15;9515:112;9547:1;9573;9563:35;;9578:18;;:::i;:::-;-1:-1:-1;9612:9:1;;9515:112::o;9632:127::-;9693:10;9688:3;9684:20;9681:1;9674:31;9724:4;9721:1;9714:15;9748:4;9745:1;9738:15;9764:127;9825:10;9820:3;9816:20;9813:1;9806:31;9856:4;9853:1;9846:15;9880:4;9877:1;9870:15;9896:135;9935:3;-1:-1:-1;;9956:17:1;;9953:43;;;9976:18;;:::i;:::-;-1:-1:-1;10023:1:1;10012:13;;9896:135::o;10036:128::-;10076:3;10107:1;10103:6;10100:1;10097:13;10094:39;;;10113:18;;:::i;:::-;-1:-1:-1;10149:9:1;;10036:128::o;10169:380::-;10248:1;10244:12;;;;10291;;;10312:61;;10366:4;10358:6;10354:17;10344:27;;10312:61;10419:2;10411:6;10408:14;10388:18;10385:38;10382:161;;;10465:10;10460:3;10456:20;10453:1;10446:31;10500:4;10497:1;10490:15;10528:4;10525:1;10518:15;11794:429;-1:-1:-1;;;12051:3:1;12044:25;12026:3;12098:6;12092:13;12114:62;12169:6;12164:2;12159:3;12155:12;12148:4;12140:6;12136:17;12114:62;:::i;:::-;12196:16;;;;12214:2;12192:25;;11794:429;-1:-1:-1;;11794:429:1:o;12228:120::-;12268:1;12294;12284:35;;12299:18;;:::i;:::-;-1:-1:-1;12333:9:1;;12228:120::o;12353:168::-;12393:7;12459:1;12455;12451:6;12447:14;12444:1;12441:21;12436:1;12429:9;12422:17;12418:45;12415:71;;;12466:18;;:::i;:::-;-1:-1:-1;12506:9:1;;12353:168::o;12526:413::-;12728:2;12710:21;;;12767:2;12747:18;;;12740:30;12806:34;12801:2;12786:18;;12779:62;-1:-1:-1;;;12872:2:1;12857:18;;12850:47;12929:3;12914:19;;12526:413::o;12944:356::-;13146:2;13128:21;;;13165:18;;;13158:30;13224:34;13219:2;13204:18;;13197:62;13291:2;13276:18;;12944:356::o;14072:355::-;14274:2;14256:21;;;14313:2;14293:18;;;14286:30;14352:33;14347:2;14332:18;;14325:61;14418:2;14403:18;;14072:355::o;14432:340::-;14634:2;14616:21;;;14673:2;14653:18;;;14646:30;-1:-1:-1;;;14707:2:1;14692:18;;14685:46;14763:2;14748:18;;14432:340::o;14777:245::-;14844:6;14897:2;14885:9;14876:7;14872:23;14868:32;14865:52;;;14913:1;14910;14903:12;14865:52;14945:9;14939:16;14964:28;14986:5;14964:28;:::i;16261:422::-;-1:-1:-1;;;16518:3:1;16511:20;16493:3;16560:6;16554:13;16576:61;16630:6;16626:1;16621:3;16617:11;16610:4;16602:6;16598:17;16576:61;:::i;:::-;16657:16;;;;16675:1;16653:24;;16261:422;-1:-1:-1;;16261:422:1:o;17387:635::-;17467:6;17520:2;17508:9;17499:7;17495:23;17491:32;17488:52;;;17536:1;17533;17526:12;17488:52;17569:9;17563:16;17602:18;17594:6;17591:30;17588:50;;;17634:1;17631;17624:12;17588:50;17657:22;;17710:4;17702:13;;17698:27;-1:-1:-1;17688:55:1;;17739:1;17736;17729:12;17688:55;17768:2;17762:9;17793:48;17809:31;17837:2;17809:31;:::i;17793:48::-;17864:2;17857:5;17850:17;17904:7;17899:2;17894;17890;17886:11;17882:20;17879:33;17876:53;;;17925:1;17922;17915:12;17876:53;17938:54;17989:2;17984;17977:5;17973:14;17968:2;17964;17960:11;17938:54;:::i;18027:1449::-;18446:3;18484:6;18478:13;18510:4;18523:51;18567:6;18562:3;18557:2;18549:6;18545:15;18523:51;:::i;:::-;18637:13;;18596:16;;;;18659:55;18637:13;18596:16;18681:15;;;18659:55;:::i;:::-;18781:13;;18736:20;;;18803:55;18781:13;18736:20;18825:15;;;18803:55;:::i;:::-;18925:13;;18880:20;;;18947:55;18925:13;18880:20;18969:15;;;18947:55;:::i;:::-;19069:13;;19024:20;;;19091:55;19069:13;19024:20;19113:15;;;19091:55;:::i;:::-;19213:13;;19168:20;;;19235:55;19213:13;19168:20;19257:15;;;19235:55;:::i;:::-;19357:13;;19312:20;;;19379:55;19357:13;19312:20;19401:15;;;19379:55;:::i;:::-;19450:20;;;;;18027:1449;-1:-1:-1;;;;;;;;;;18027:1449:1:o;19481:1767::-;19996:3;20034:6;20028:13;20050:53;20096:6;20091:3;20084:4;20076:6;20072:17;20050:53;:::i;:::-;20134:6;20128:13;20150:68;20209:8;20200:6;20195:3;20191:16;20184:4;20176:6;20172:17;20150:68;:::i;:::-;20296:13;;20244:16;;;20240:31;;20318:57;20296:13;20240:31;20352:4;20340:17;;20318:57;:::i;:::-;20406:6;20400:13;20422:72;20485:8;20474;20467:5;20463:20;20456:4;20448:6;20444:17;20422:72;:::i;:::-;20576:13;;20520:20;;;;20516:35;;20598:57;20576:13;20516:35;20632:4;20620:17;;20598:57;:::i;:::-;20686:6;20680:13;20702:72;20765:8;20754;20747:5;20743:20;20736:4;20728:6;20724:17;20702:72;:::i;:::-;20856:13;;20800:20;;;;20796:35;;20878:57;20856:13;20796:35;20912:4;20900:17;;20878:57;:::i;:::-;20966:6;20960:13;20982:72;21045:8;21034;21027:5;21023:20;21016:4;21008:6;21004:17;20982:72;:::i;:::-;21133:13;;21077:20;;;;21073:35;;21155:54;21133:13;21073:35;21189:4;21177:17;;21155:54;:::i;:::-;21225:17;;19481:1767;-1:-1:-1;;;;;;;;;;;19481:1767:1:o;21253:1641::-;21720:3;21758:6;21752:13;21784:4;21797:51;21841:6;21836:3;21831:2;21823:6;21819:15;21797:51;:::i;:::-;21911:13;;21870:16;;;;21933:55;21911:13;21870:16;21955:15;;;21933:55;:::i;:::-;22055:13;;22010:20;;;22077:55;22055:13;22010:20;22099:15;;;22077:55;:::i;:::-;22199:13;;22154:20;;;22221:55;22199:13;22154:20;22243:15;;;22221:55;:::i;:::-;22343:13;;22298:20;;;22365:55;22343:13;22298:20;22387:15;;;22365:55;:::i;:::-;22487:13;;22442:20;;;22509:55;22487:13;22442:20;22531:15;;;22509:55;:::i;:::-;22631:13;;22586:20;;;22653:55;22631:13;22586:20;22675:15;;;22653:55;:::i;:::-;22775:13;;22730:20;;;22797:55;22775:13;22730:20;22819:15;;;22797:55;:::i;:::-;22868:20;;;;;21253:1641;-1:-1:-1;;;;;;;;;;;21253:1641:1:o;22899:1052::-;23222:3;23260:6;23254:13;23276:53;23322:6;23317:3;23310:4;23302:6;23298:17;23276:53;:::i;:::-;23392:13;;23351:16;;;;23414:57;23392:13;23351:16;23448:4;23436:17;;23414:57;:::i;:::-;23538:13;;23493:20;;;23560:57;23538:13;23493:20;23594:4;23582:17;;23560:57;:::i;:::-;23684:13;;23639:20;;;23706:57;23684:13;23639:20;23740:4;23728:17;;23706:57;:::i;:::-;23830:13;;23785:20;;;23852:57;23830:13;23785:20;23886:4;23874:17;;23852:57;:::i;:::-;23925:20;;22899:1052;-1:-1:-1;;;;;;;22899:1052:1:o;24084:1735::-;-1:-1:-1;;;24834:59:1;;24916:13;;24816:3;;24938:62;24916:13;24988:2;24979:12;;24972:4;24960:17;;24938:62;:::i;:::-;25064:66;25059:2;25019:16;;;25051:11;;;25044:87;25160:34;25155:2;25147:11;;25140:55;25224:66;25219:2;25211:11;;25204:87;-1:-1:-1;;;25315:3:1;25307:12;;25300:43;25368:13;;25390:64;25368:13;25439:3;25431:12;;25424:4;25412:17;;25390:64;:::i;:::-;-1:-1:-1;;;25514:3:1;25473:17;;;;25506:12;;;25499:34;-1:-1:-1;;;25557:3:1;25549:12;;25542:62;25629:13;;25651:64;25629:13;25700:3;25692:12;;25685:4;25673:17;;25651:64;:::i;:::-;-1:-1:-1;;;25775:3:1;25734:17;;;;25767:12;;;25760:25;25809:3;25801:12;;24084:1735;-1:-1:-1;;;;;24084:1735:1:o;25824:448::-;26086:31;26081:3;26074:44;26056:3;26147:6;26141:13;26163:62;26218:6;26213:2;26208:3;26204:12;26197:4;26189:6;26185:17;26163:62;:::i;:::-;26245:16;;;;26263:2;26241:25;;25824:448;-1:-1:-1;;25824:448:1:o;27032:251::-;27102:6;27155:2;27143:9;27134:7;27130:23;27126:32;27123:52;;;27171:1;27168;27161:12;27123:52;27203:9;27197:16;27222:31;27247:5;27222:31;:::i;27643:125::-;27683:4;27711:1;27708;27705:8;27702:34;;;27716:18;;:::i;:::-;-1:-1:-1;27753:9:1;;27643:125::o;27773:276::-;27904:3;27942:6;27936:13;27958:53;28004:6;27999:3;27992:4;27984:6;27980:17;27958:53;:::i;:::-;28027:16;;;;;27773:276;-1:-1:-1;;27773:276:1:o;28054:421::-;-1:-1:-1;;;28311:3:1;28304:19;28286:3;28352:6;28346:13;28368:61;28422:6;28418:1;28413:3;28409:11;28402:4;28394:6;28390:17;28368:61;:::i;:::-;28449:16;;;;28467:1;28445:24;;28054:421;-1:-1:-1;;28054:421:1:o;28480:614::-;28760:3;28798:6;28792:13;28814:53;28860:6;28855:3;28848:4;28840:6;28836:17;28814:53;:::i;:::-;-1:-1:-1;;;28889:16:1;;;28914:18;;;28957:13;;28979:65;28957:13;29031:1;29020:13;;29013:4;29001:17;;28979:65;:::i;:::-;29064:20;29086:1;29060:28;;28480:614;-1:-1:-1;;;;28480:614:1:o;30327:470::-;30506:3;30544:6;30538:13;30560:53;30606:6;30601:3;30594:4;30586:6;30582:17;30560:53;:::i;:::-;30676:13;;30635:16;;;;30698:57;30676:13;30635:16;30732:4;30720:17;;30698:57;:::i;:::-;30771:20;;30327:470;-1:-1:-1;;;;30327:470:1:o;30928:1402::-;-1:-1:-1;;;31276:25:1;;31368:13;;31258:3;;31320:1;;31258:3;;31426:18;;;31479;;;;31506:61;;31560:4;31552:6;31548:17;31538:27;;31506:61;31586:2;31634;31626:6;31623:14;31603:18;31600:38;31597:165;;;-1:-1:-1;;;31661:33:1;;31717:4;31714:1;31707:15;31747:4;31668:3;31735:17;31597:165;31778:18;31805:122;;;;31941:1;31936:338;;;;31771:503;;31805:122;-1:-1:-1;;31847:24:1;;31833:12;;;31826:46;31896:16;;;31892:25;;;-1:-1:-1;31805:122:1;;31936:338;30875:1;30868:14;;;30912:4;30899:18;;32031:1;32045:174;32059:6;32056:1;32053:13;32045:174;;;32146:14;;32128:11;;;32124:20;;32117:44;32189:16;;;;32074:10;;32045:174;;;32049:3;;32261:2;32252:6;32247:3;32243:16;32239:25;32232:32;;31771:503;;;;;;32290:34;32320:3;-1:-1:-1;;;24021:25:1;;24071:1;24062:11;;23956:123;33720:414;33922:2;33904:21;;;33961:2;33941:18;;;33934:30;34000:34;33995:2;33980:18;;33973:62;-1:-1:-1;;;34066:2:1;34051:18;;34044:48;34124:3;34109:19;;33720:414::o;34139:858::-;34414:3;34452:6;34446:13;34468:53;34514:6;34509:3;34502:4;34494:6;34490:17;34468:53;:::i;:::-;34584:13;;34543:16;;;;34606:57;34584:13;34543:16;34640:4;34628:17;;34606:57;:::i;:::-;34730:13;;34685:20;;;34752:57;34730:13;34685:20;34786:4;34774:17;;34752:57;:::i;:::-;34876:13;;34831:20;;;34898:57;34876:13;34831:20;34932:4;34920:17;;34898:57;:::i;:::-;34971:20;;34139:858;-1:-1:-1;;;;;;34139:858:1:o;35002:195::-;35040:4;35077;35074:1;35070:12;35109:4;35106:1;35102:12;35134:3;35129;35126:12;35123:38;;;35141:18;;:::i;:::-;35178:13;;;35002:195;-1:-1:-1;;;35002:195:1:o;35202:175::-;35239:3;35283:4;35276:5;35272:16;35312:4;35303:7;35300:17;35297:43;;;35320:18;;:::i;:::-;35369:1;35356:15;;35202:175;-1:-1:-1;;35202:175:1:o;35382:489::-;-1:-1:-1;;;;;35651:15:1;;;35633:34;;35703:15;;35698:2;35683:18;;35676:43;35750:2;35735:18;;35728:34;;;35798:3;35793:2;35778:18;;35771:31;;;35576:4;;35819:46;;35845:19;;35837:6;35819:46;:::i;35876:249::-;35945:6;35998:2;35986:9;35977:7;35973:23;35969:32;35966:52;;;36014:1;36011;36004:12;35966:52;36046:9;36040:16;36065:30;36089:5;36065:30;:::i;36130:127::-;36191:10;36186:3;36182:20;36179:1;36172:31;36222:4;36219:1;36212:15;36246:4;36243:1;36236:15;36514:157;36544:1;36578:4;36575:1;36571:12;36602:3;36592:37;;36609:18;;:::i;:::-;36661:3;36654:4;36651:1;36647:12;36643:22;36638:27;;;36514:157;;;;:::o;36676:204::-;36714:3;36750:4;36747:1;36743:12;36782:4;36779:1;36775:12;36817:3;36811:4;36807:14;36802:3;36799:23;36796:49;;;36825:18;;:::i;:::-;36861:13;;36676:204;-1:-1:-1;;;36676:204:1:o
Swarm Source
ipfs://b3d52f34e554e47386999178ee74f47e3acac0367d111d8c743aa16f9ae9bfcb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.