Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 4,136 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 39410536 | 15 hrs ago | IN | 0 ETH | 0.00000004 | ||||
| Safe Transfer Fr... | 39382431 | 31 hrs ago | IN | 0 ETH | 0.0000022 | ||||
| Safe Transfer Fr... | 39347252 | 2 days ago | IN | 0 ETH | 0.00000018 | ||||
| Safe Transfer Fr... | 39346789 | 2 days ago | IN | 0 ETH | 0.0000003 | ||||
| Safe Transfer Fr... | 39300708 | 3 days ago | IN | 0 ETH | 0.00000018 | ||||
| Safe Transfer Fr... | 39275420 | 3 days ago | IN | 0 ETH | 0.00000004 | ||||
| Safe Transfer Fr... | 39275410 | 3 days ago | IN | 0 ETH | 0.00000006 | ||||
| Safe Transfer Fr... | 39275399 | 3 days ago | IN | 0 ETH | 0.00000003 | ||||
| Safe Transfer Fr... | 39275386 | 3 days ago | IN | 0 ETH | 0.00000003 | ||||
| Safe Transfer Fr... | 39275374 | 3 days ago | IN | 0 ETH | 0.00000005 | ||||
| Safe Transfer Fr... | 39275349 | 3 days ago | IN | 0 ETH | 0.00000006 | ||||
| Set Approval For... | 39267857 | 3 days ago | IN | 0 ETH | 0.00000007 | ||||
| Safe Transfer Fr... | 39266885 | 3 days ago | IN | 0 ETH | 0.00000012 | ||||
| Safe Transfer Fr... | 39266825 | 3 days ago | IN | 0 ETH | 0.0000001 | ||||
| Safe Transfer Fr... | 39266818 | 3 days ago | IN | 0 ETH | 0.00000003 | ||||
| Safe Transfer Fr... | 39266813 | 3 days ago | IN | 0 ETH | 0.0000001 | ||||
| Safe Transfer Fr... | 39266810 | 3 days ago | IN | 0 ETH | 0.0000001 | ||||
| Safe Transfer Fr... | 39266807 | 3 days ago | IN | 0 ETH | 0.0000001 | ||||
| Safe Transfer Fr... | 39266804 | 3 days ago | IN | 0 ETH | 0.0000001 | ||||
| Set Approval For... | 39256215 | 4 days ago | IN | 0 ETH | 0.00000041 | ||||
| Safe Transfer Fr... | 39136055 | 7 days ago | IN | 0 ETH | 0.00000003 | ||||
| Safe Transfer Fr... | 39136018 | 7 days ago | IN | 0 ETH | 0.0000001 | ||||
| Set Approval For... | 39121362 | 7 days ago | IN | 0 ETH | 0.00000007 | ||||
| Safe Transfer Fr... | 39120214 | 7 days ago | IN | 0 ETH | 0.00000009 | ||||
| Safe Transfer Fr... | 39110166 | 7 days ago | IN | 0 ETH | 0.00000013 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
VRNouns
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2023-09-17 */ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides functions for encoding/decoding base64 library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } } pragma solidity ^0.8.1; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity ^0.8.1; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.1; /** * @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); function safeTransferFrom(address from, address to, uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; /** * @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; } pragma solidity ^0.8.1; /** * @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); } pragma solidity ^0.8.1; /** * @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); } pragma solidity ^0.8.1; /** * @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); } pragma solidity ^0.8.1; /** * @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; } } pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.1; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity ^0.8.1; /** * @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; } } pragma solidity ^0.8.1; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.1; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || 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); } function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); _transfer(from, to, tokenId); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } 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)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); _mint(to, tokenId); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } 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); } function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } pragma solidity ^0.8.1; 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; uint256 public newTokenId; // 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]; } 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); } } function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { 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]; } function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; 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(); } } pragma solidity ^0.8.1; contract VRNouns is Ownable, ERC721Enumerable, ReentrancyGuard { using Strings for uint256; using SafeMath for uint; uint256 public maxNFT = 5000; address payable private manager; mapping (string => uint256 ) private balances; mapping(uint256 => Attr) public attributes; struct Attr { string co; string coo; string cooo; } constructor() ERC721("VRNouns", "VRNouns") {manager = payable(msg.sender);} function COLORS() public pure returns (string[80] memory) { return [ 'C5B9A1', '63A0F9', '807F7E', 'EED811', '4BEA69', '80A72D', 'D22209', '5A65FA', 'FD8B5B', 'FE500C', '9F21A0', '068940', '1F1D29', 'B87B11', 'CFC2AB', 'B9185C', '5648ED', 'CAEFF9', //body colors end + 17 'E11833', '5648ED', 'FFC925', '0B5027', 'EF9933', '5648ED', 'FFC110', '62616D', 'F78A18', 'D22209', '67B1E3', '2B83F6', '343235', 'FF82AD', 'FF638D', 'FF1AD2', 'CC0595', '26B1F3', '7CC4F2', '1F1D29', 'FA6FE2', 'FFF671', 'FF1A0B', '068940', 'FEB9D5', 'EFF2FA', '000000', 'EAB118', '410D66', 'F938D8', '254EFB', '63A0F9', 'F71248', 'DA42CB', 'FFEF16', 'FFF0BE', 'F7913D', 'FFD067', 'F9E8DD', 'FF7216', '667AF9', 'F9F5E9', 'D4CFC0', '7E5243', '395ED1', 'CFC9B8', 'FF638D', //Glass Colors please" 16 '000000', '2B83F6', '5648ED', '8DD122', '9CB4B8', 'E8705B', 'D19A54', 'B9185C', 'FE500C', 'F3322C', 'D7D3CD', '4BEA69', 'E8705B', 'FFEF16', 'F3322C' ]; } function mint(address _minter) private nonReentrant() { uint256 totalSupply = totalSupply(); if(totalSupply + 1 <= maxNFT) { publicmint(_minter); } } function publicmint(address _minter) public nonReentrant() onlyOwner() { uint256 totalSupply = totalSupply(); require(totalSupply + 1 <= maxNFT, "No more mint"); if(totalSupply + 1 <= maxNFT) { newTokenId += 1; _safeMint(_minter, newTokenId); uint256 rn = uint256(blockhash(block.number - 1)) % 17; uint256 rnt = uint256(blockhash(block.number - 2)) % 46; uint256 rnth = uint256(blockhash(block.number - 3)) % 16; string[80] memory colors = COLORS(); attributes[newTokenId].co = colors[rn]; attributes[newTokenId].coo = colors[rnt+17] ; attributes[newTokenId].cooo = colors[rnth+63]; } } function getNFTzBelongingToOwner(address _owner) external view returns (uint256[] memory) { uint256 numNFT = balanceOf(_owner); if (numNFT == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](numNFT); for (uint256 i = 0; i < numNFT; i++) { result[i] = tokenOfOwnerByIndex(_owner, i); } return result; } } function tokenURI(uint256 tokenId) public view override returns (string memory) { string memory json = Base64.encode(bytes(string(abi.encodePacked( '{"name": "VRNouns",', '"image_data": "', getSvg(tokenId), '",', '"attributes": [{"trait_type": "Head", "value": "' , attributes[tokenId].coo ,'"},', ' {"trait_type": "Glass", "value": "' , attributes[tokenId].cooo ,'"}, ', ' {"trait_type": "Body", "value": "' , attributes[tokenId].co ,'"}', ']}' )) )); return string(abi.encodePacked('data:application/json;base64,', json)); } function getSvg(uint256 _tokenId) private view returns (string memory) { string memory svg; string memory sone; string memory sonea; string memory stwo; string memory stwoa; string memory sthree; string memory sthreea; svg = "<svg width='320px' height='320px' viewBox='0 0 320 320' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <title>VRNouns</title> <g id='VRNouns' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'> <rect fill='#D5D7E1' x='0' y='0' width='320' height='320'></rect> <g id='jn' transform='translate(70.000000, 40.000000)'> <g id='body' transform='translate(20.000000, 170.000000)'> <rect fill='#"; sone = attributes[_tokenId].co; sonea="' x='0' y='0' width='140' height='110'></rect> <rect id='ax' fill='#D5D7E1' x='20' y='40' width='10' height='70'></rect> </g> <rect id='head' fill='#"; stwo = attributes[_tokenId].coo; stwoa= "' x='0' y='0' width='180' height='170'></rect> <g id='glass' transform='translate(30.000000, 70.000000)'> <rect id='gbg' fill='#"; sthree = attributes[_tokenId].cooo; sthreea= "' x='0' y='0' width='130' height='60'></rect> <g id='rg' transform='translate(10.000000, 10.000000)'> <rect id='rl' fill='#FFFFFF' x='0' y='0' width='20' height='40'></rect> <rect id='rr' fill='#000000' x='20' y='0' width='20' height='40'></rect> </g> <g id='lf' transform='translate(80.000000, 10.000000)'> <rect id='ll' fill='#FFFFFF' x='0' y='0' width='20' height='40'></rect> <rect id='lr' fill='#000000' x='20' y='0' width='20' height='40'></rect> </g> </g> </g> </g> </svg>"; return string(abi.encodePacked(svg, sone, sonea, stwo, stwoa, sthree, sthreea)); } function withdraw(uint256 _wamount) public onlyOwner() { payable(msg.sender).transfer(_wamount); } function getEthBalance() public view returns(uint) { return address(this).balance; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"COLORS","outputs":[{"internalType":"string[80]","name":"","type":"string[80]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"attributes","outputs":[{"internalType":"string","name":"co","type":"string"},{"internalType":"string","name":"coo","type":"string"},{"internalType":"string","name":"cooo","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getNFTzBelongingToOwner","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":"maxNFT","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":"newTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"publicmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"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":"uint256","name":"_wamount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052611388600d553480156200001757600080fd5b506040518060400160405280600781526020017f56524e6f756e73000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f56524e6f756e7300000000000000000000000000000000000000000000000000815250600062000096620001b760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600190805190602001906200014c929190620001bf565b50806002908051906020019062000165929190620001bf565b5050506001600c8190555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002d4565b600033905090565b828054620001cd906200026f565b90600052602060002090601f016020900481019282620001f157600085556200023d565b82601f106200020c57805160ff19168380011785556200023d565b828001600101855582156200023d579182015b828111156200023c5782518255916020019190600101906200021f565b5b5090506200024c919062000250565b5090565b5b808211156200026b57600081600090555060010162000251565b5090565b600060028204905060018216806200028857607f821691505b602082108114156200029f576200029e620002a5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615f5e80620002e46000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b88d4fde11610097578063e456b01c11610071578063e456b01c146104d0578063e985e9c5146104ee578063f2fde38b1461051e578063fd6cba461461053a576101a9565b8063b88d4fde14610452578063c87b56dd1461046e578063d05dcc6a1461049e576101a9565b80638da5cb5b116100d35780638da5cb5b146103de57806395d89b41146103fc57806398a1d2411461041a578063a22cb46514610436576101a9565b806370a082311461038657806370ed0ada146103b6578063715018a6146103d4576101a9565b80632e1a7d4d1161016657806342842e0e1161014057806342842e0e146102ec5780634f6ccce7146103085780635022b5e9146103385780636352211e14610356576101a9565b80632e1a7d4d146102825780632f745c591461029e578063340754ed146102ce576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c39190614205565b61056a565b6040516101d59190614b0e565b60405180910390f35b6101e661057c565b6040516101f39190614b29565b60405180910390f35b61021660048036038101906102119190614257565b61060e565b6040516102239190614a63565b60405180910390f35b610246600480360381019061024191906141c9565b610693565b005b6102506107ab565b60405161025d9190614df7565b60405180910390f35b610280600480360381019061027b91906140c3565b6107b8565b005b61029c60048036038101906102979190614257565b610818565b005b6102b860048036038101906102b391906141c9565b6108de565b6040516102c59190614df7565b60405180910390f35b6102d6610983565b6040516102e39190614df7565b60405180910390f35b610306600480360381019061030191906140c3565b610989565b005b610322600480360381019061031d9190614257565b6109a9565b60405161032f9190614df7565b60405180910390f35b610340610a40565b60405161034d9190614aca565b60405180910390f35b610370600480360381019061036b9190614257565b611cc7565b60405161037d9190614a63565b60405180910390f35b6103a0600480360381019061039b919061405e565b611d79565b6040516103ad9190614df7565b60405180910390f35b6103be611e31565b6040516103cb9190614df7565b60405180910390f35b6103dc611e39565b005b6103e6611f73565b6040516103f39190614a63565b60405180910390f35b610404611f9c565b6040516104119190614b29565b60405180910390f35b610434600480360381019061042f919061405e565b61202e565b005b610450600480360381019061044b919061418d565b612366565b005b61046c60048036038101906104679190614112565b6124e7565b005b61048860048036038101906104839190614257565b612549565b6040516104959190614b29565b60405180910390f35b6104b860048036038101906104b39190614257565b6125ec565b6040516104c793929190614b4b565b60405180910390f35b6104d86127ae565b6040516104e59190614df7565b60405180910390f35b61050860048036038101906105039190614087565b6127b4565b6040516105159190614b0e565b60405180910390f35b6105386004803603810190610533919061405e565b612848565b005b610554600480360381019061054f919061405e565b6129f1565b6040516105619190614aec565b60405180910390f35b600061057582612b6d565b9050919050565b60606001805461058b90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790615102565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b600061061982612be7565b610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f90614cf7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069e82611cc7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614d57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661072e612c53565b73ffffffffffffffffffffffffffffffffffffffff16148061075d575061075c81610757612c53565b6127b4565b5b61079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390614c77565b60405180910390fd5b6107a68383612c5b565b505050565b6000600980549050905090565b6107c96107c3612c53565b82612d14565b610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff90614d77565b60405180910390fd5b610813838383612df2565b505050565b610820612c53565b73ffffffffffffffffffffffffffffffffffffffff1661083e611f73565b73ffffffffffffffffffffffffffffffffffffffff1614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b90614d17565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108da573d6000803e3d6000fd5b5050565b60006108e983611d79565b821061092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190614b97565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a5481565b6109a4838383604051806020016040528060008152506124e7565b505050565b60006109b36107ab565b82106109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90614d97565b60405180910390fd5b60098281548110610a2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610a48613ec2565b60405180610a0001604052806040518060400160405280600681526020017f433542394131000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363341304639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383037463745000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454544383131000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344245413639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383041373244000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443232323039000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f354136354641000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464438423542000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464535303043000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f394632314130000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303638393430000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f314631443239000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f423837423131000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434643324142000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f423931383543000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434145464639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453131383333000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464643393235000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f304235303237000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454639393333000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464643313130000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363236313644000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463738413138000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443232323039000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363742314533000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f324238334636000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f333433323335000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464638324144000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464636333844000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464631414432000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434330353935000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f323642314633000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374343344632000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f314631443239000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464136464532000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646363731000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464631413042000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303638393430000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464542394435000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454646324641000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303030303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454142313138000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343130443636000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463933384438000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f323534454642000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363341304639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463731323438000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f444134324342000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464645463136000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646304245000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463739313344000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464644303637000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463945384444000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464637323136000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363637414639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463946354539000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443443464330000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374535323433000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f333935454431000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434643394238000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464636333844000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303030303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f324238334636000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f384444313232000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f394342344238000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453837303542000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443139413534000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f423931383543000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464535303043000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463333323243000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443744334344000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344245413639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453837303542000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464645463136000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4633333232430000000000000000000000000000000000000000000000000000815250815250905090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790614cb7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614c97565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600047905090565b611e41612c53565b73ffffffffffffffffffffffffffffffffffffffff16611e5f611f73565b73ffffffffffffffffffffffffffffffffffffffff1614611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90614d17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611fab90615102565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd790615102565b80156120245780601f10611ff957610100808354040283529160200191612024565b820191906000526020600020905b81548152906001019060200180831161200757829003601f168201915b5050505050905090565b6002600c541415612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614dd7565b60405180910390fd5b6002600c81905550612084612c53565b73ffffffffffffffffffffffffffffffffffffffff166120a2611f73565b73ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90614d17565b60405180910390fd5b60006121026107ab565b9050600d546001826121149190614f37565b1115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c90614db7565b60405180910390fd5b600d546001826121659190614f37565b1161235a576001600a600082825461217d9190614f37565b9250508190555061219082600a5461304e565b600060116001436121a19190615018565b4060001c6121af91906151ae565b90506000602e6002436121c29190615018565b4060001c6121d091906151ae565b9050600060106003436121e39190615018565b4060001c6121f191906151ae565b905060006121fd610a40565b9050808460508110612238577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160106000600a5481526020019081526020016000206000019080519060200190612268929190613eea565b50806011846122779190614f37565b605081106122ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160106000600a54815260200190815260200160002060010190805190602001906122de929190613eea565b5080603f836122ed9190614f37565b60508110612324577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160106000600a5481526020019081526020016000206002019080519060200190612354929190613eea565b50505050505b506001600c8190555050565b61236e612c53565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614c37565b60405180910390fd5b80600660006123e9612c53565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612496612c53565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124db9190614b0e565b60405180910390a35050565b6124f86124f2612c53565b83612d14565b612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614d77565b60405180910390fd5b6125438484848461306c565b50505050565b606060006125c2612559846130c8565b6010600086815260200190815260200160002060010160106000878152602001908152602001600020600201601060008881526020019081526020016000206000016040516020016125ae9493929190614995565b604051602081830303815290604052613363565b9050806040516020016125d59190614a41565b604051602081830303815290604052915050919050565b601060205280600052604060002060009150905080600001805461260f90615102565b80601f016020809104026020016040519081016040528092919081815260200182805461263b90615102565b80156126885780601f1061265d57610100808354040283529160200191612688565b820191906000526020600020905b81548152906001019060200180831161266b57829003601f168201915b50505050509080600101805461269d90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546126c990615102565b80156127165780601f106126eb57610100808354040283529160200191612716565b820191906000526020600020905b8154815290600101906020018083116126f957829003601f168201915b50505050509080600201805461272b90615102565b80601f016020809104026020016040519081016040528092919081815260200182805461275790615102565b80156127a45780601f10612779576101008083540402835291602001916127a4565b820191906000526020600020905b81548152906001019060200180831161278757829003601f168201915b5050505050905083565b600d5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612850612c53565b73ffffffffffffffffffffffffffffffffffffffff1661286e611f73565b73ffffffffffffffffffffffffffffffffffffffff16146128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614d17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90614bd7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060006129fe83611d79565b90506000811415612a8157600067ffffffffffffffff811115612a4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a785781602001602082028036833780820191505090505b50915050612b68565b60008167ffffffffffffffff811115612ac3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612af15781602001602082028036833780820191505090505b50905060005b82811015612b6157612b0985826108de565b828281518110612b42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080612b5990615165565b915050612af7565b5080925050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612be05750612bdf82613502565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cce83611cc7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d1f82612be7565b612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614c57565b60405180910390fd5b6000612d6983611cc7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612dd857508373ffffffffffffffffffffffffffffffffffffffff16612dc08461060e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612de95750612de881856127b4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e1282611cc7565b73ffffffffffffffffffffffffffffffffffffffff1614612e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5f90614d37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf90614c17565b60405180910390fd5b612ee38383836135e4565b612eee600082612c5b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f3e9190615018565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f959190614f37565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6130688282604051806020016040528060008152506135f4565b5050565b6130788484848461364f565b6130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae90614bb7565b60405180910390fd5b6130c2848484612df2565b50505050565b606080606080606080606080604051806101e001604052806101be8152602001615ab76101be91399650601060008a8152602001908152602001600020600001805461311390615102565b80601f016020809104026020016040519081016040528092919081815260200182805461313f90615102565b801561318c5780601f106131615761010080835404028352916020019161318c565b820191906000526020600020905b81548152906001019060200180831161316f57829003601f168201915b505050505095506040518060c0016040528060958152602001615cb5609591399450601060008a815260200190815260200160002060010180546131cf90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546131fb90615102565b80156132485780601f1061321d57610100808354040283529160200191613248565b820191906000526020600020905b81548152906001019060200180831161322b57829003601f168201915b505050505093506040518060a0016040528060808152602001615a37608091399250601060008a8152602001908152602001600020600201805461328b90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546132b790615102565b80156133045780601f106132d957610100808354040283529160200191613304565b820191906000526020600020905b8154815290600101906020018083116132e757829003601f168201915b505050505091506040518061020001604052806101df8152602001615d4a6101df91399050868686868686866040516020016133469796959493929190614930565b604051602081830303815290604052975050505050505050919050565b6060600082511415613386576040518060200160405280600081525090506134fd565b6000604051806060016040528060408152602001615c7560409139905060006003600285516133b59190614f37565b6133bf9190614f8d565b60046133cb9190614fbe565b905060006020826133dc9190614f37565b67ffffffffffffffff81111561341b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561344d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156134bc576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050613461565b6003895106600181146134d657600281146134e6576134f1565b613d3d60f01b60028303526134f1565b603d60f81b60018303525b50505050508093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806135cd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806135dd57506135dc826137e6565b5b9050919050565b6135ef838383613850565b505050565b613601600084848461364f565b613640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363790614bb7565b60405180910390fd5b61364a8383613964565b505050565b60006136708473ffffffffffffffffffffffffffffffffffffffff16613b32565b156137d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613699612c53565b8786866040518563ffffffff1660e01b81526004016136bb9493929190614a7e565b602060405180830381600087803b1580156136d557600080fd5b505af192505050801561370657506040513d601f19601f82011682018060405250810190613703919061422e565b60015b613789573d8060008114613736576040519150601f19603f3d011682016040523d82523d6000602084013e61373b565b606091505b50600081511415613781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377890614bb7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137de565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61385b838383613b45565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561389e5761389981613b4a565b6138dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146138dc576138db8382613b93565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139205761391b81613d00565b61395f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461395e5761395d8282613e43565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cb90614cd7565b60405180910390fd5b6139dd81612be7565b15613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1490614bf7565b60405180910390fd5b613a29600083836135e4565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a799190614f37565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b600980549050600b600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ba084611d79565b613baa9190615018565b9050600060086000848152602001908152602001600020549050818114613c8f576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050613d149190615018565b90506000600b6000848152602001908152602001600020549050600060098381548110613d6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110613db2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b6000858152602001908152602001600020600090556009805480613e27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e4e83611d79565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60405180610a0001604052806050905b6060815260200190600190039081613ed25790505090565b828054613ef690615102565b90600052602060002090601f016020900481019282613f185760008555613f5f565b82601f10613f3157805160ff1916838001178555613f5f565b82800160010185558215613f5f579182015b82811115613f5e578251825591602001919060010190613f43565b5b509050613f6c9190613f70565b5090565b5b80821115613f89576000816000905550600101613f71565b5090565b6000613fa0613f9b84614e37565b614e12565b905082815260208101848484011115613fb857600080fd5b613fc38482856150c0565b509392505050565b600081359050613fda816159da565b92915050565b600081359050613fef816159f1565b92915050565b60008135905061400481615a08565b92915050565b60008151905061401981615a08565b92915050565b600082601f83011261403057600080fd5b8135614040848260208601613f8d565b91505092915050565b60008135905061405881615a1f565b92915050565b60006020828403121561407057600080fd5b600061407e84828501613fcb565b91505092915050565b6000806040838503121561409a57600080fd5b60006140a885828601613fcb565b92505060206140b985828601613fcb565b9150509250929050565b6000806000606084860312156140d857600080fd5b60006140e686828701613fcb565b93505060206140f786828701613fcb565b925050604061410886828701614049565b9150509250925092565b6000806000806080858703121561412857600080fd5b600061413687828801613fcb565b945050602061414787828801613fcb565b935050604061415887828801614049565b925050606085013567ffffffffffffffff81111561417557600080fd5b6141818782880161401f565b91505092959194509250565b600080604083850312156141a057600080fd5b60006141ae85828601613fcb565b92505060206141bf85828601613fe0565b9150509250929050565b600080604083850312156141dc57600080fd5b60006141ea85828601613fcb565b92505060206141fb85828601614049565b9150509250929050565b60006020828403121561421757600080fd5b600061422584828501613ff5565b91505092915050565b60006020828403121561424057600080fd5b600061424e8482850161400a565b91505092915050565b60006020828403121561426957600080fd5b600061427784828501614049565b91505092915050565b600061428c83836143d6565b905092915050565b60006142a08383614912565b60208301905092915050565b6142b58161504c565b82525050565b60006142c682614e97565b6142d08185614edd565b9350836020820285016142e285614e68565b8060005b8581101561431e57848403895281516142ff8582614280565b945061430a83614ec3565b925060208a019950506001810190506142e6565b50829750879550505050505092915050565b600061433b82614ea2565b6143458185614ee8565b935061435083614e72565b8060005b838110156143815781516143688882614294565b975061437383614ed0565b925050600181019050614354565b5085935050505092915050565b6143978161505e565b82525050565b60006143a882614ead565b6143b28185614ef9565b93506143c28185602086016150cf565b6143cb8161529b565b840191505092915050565b60006143e182614eb8565b6143eb8185614f0a565b93506143fb8185602086016150cf565b6144048161529b565b840191505092915050565b600061441a82614eb8565b6144248185614f1b565b93506144348185602086016150cf565b61443d8161529b565b840191505092915050565b600061445382614eb8565b61445d8185614f2c565b935061446d8185602086016150cf565b80840191505092915050565b6000815461448681615102565b6144908186614f2c565b945060018216600081146144ab57600181146144bc576144ef565b60ff198316865281860193506144ef565b6144c585614e82565b60005b838110156144e7578154818901526001820191506020810190506144c8565b838801955050505b50505092915050565b6000614505603083614f2c565b9150614510826152ac565b603082019050919050565b6000614528602b83614f1b565b9150614533826152fb565b604082019050919050565b600061454b603283614f1b565b91506145568261534a565b604082019050919050565b600061456e601383614f2c565b915061457982615399565b601382019050919050565b6000614591602283614f2c565b915061459c826153c2565b602282019050919050565b60006145b4602683614f1b565b91506145bf82615411565b604082019050919050565b60006145d7600283614f2c565b91506145e282615460565b600282019050919050565b60006145fa601c83614f1b565b915061460582615489565b602082019050919050565b600061461d600f83614f2c565b9150614628826154b2565b600f82019050919050565b6000614640600383614f2c565b915061464b826154db565b600382019050919050565b6000614663602483614f1b565b915061466e82615504565b604082019050919050565b6000614686601983614f1b565b915061469182615553565b602082019050919050565b60006146a9602c83614f1b565b91506146b48261557c565b604082019050919050565b60006146cc603883614f1b565b91506146d7826155cb565b604082019050919050565b60006146ef602a83614f1b565b91506146fa8261561a565b604082019050919050565b6000614712602983614f1b565b915061471d82615669565b604082019050919050565b6000614735600283614f2c565b9150614740826156b8565b600282019050919050565b6000614758602083614f1b565b9150614763826156e1565b602082019050919050565b600061477b602c83614f1b565b91506147868261570a565b604082019050919050565b600061479e602083614f1b565b91506147a982615759565b602082019050919050565b60006147c1602983614f1b565b91506147cc82615782565b604082019050919050565b60006147e4600283614f2c565b91506147ef826157d1565b600282019050919050565b6000614807602183614f1b565b9150614812826157fa565b604082019050919050565b600061482a601d83614f2c565b915061483582615849565b601d82019050919050565b600061484d600483614f2c565b915061485882615872565b600482019050919050565b6000614870603183614f1b565b915061487b8261589b565b604082019050919050565b6000614893602c83614f1b565b915061489e826158ea565b604082019050919050565b60006148b6600c83614f1b565b91506148c182615939565b602082019050919050565b60006148d9602383614f2c565b91506148e482615962565b602382019050919050565b60006148fc601f83614f1b565b9150614907826159b1565b602082019050919050565b61491b816150b6565b82525050565b61492a816150b6565b82525050565b600061493c828a614448565b91506149488289614448565b91506149548288614448565b91506149608287614448565b915061496c8286614448565b91506149788285614448565b91506149848284614448565b915081905098975050505050505050565b60006149a082614561565b91506149ab82614610565b91506149b78287614448565b91506149c2826145ca565b91506149cd826144f8565b91506149d98286614479565b91506149e482614633565b91506149ef826148cc565b91506149fb8285614479565b9150614a0682614840565b9150614a1182614584565b9150614a1d8284614479565b9150614a2882614728565b9150614a33826147d7565b915081905095945050505050565b6000614a4c8261481d565b9150614a588284614448565b915081905092915050565b6000602082019050614a7860008301846142ac565b92915050565b6000608082019050614a9360008301876142ac565b614aa060208301866142ac565b614aad6040830185614921565b8181036060830152614abf818461439d565b905095945050505050565b60006020820190508181036000830152614ae481846142bb565b905092915050565b60006020820190508181036000830152614b068184614330565b905092915050565b6000602082019050614b23600083018461438e565b92915050565b60006020820190508181036000830152614b43818461440f565b905092915050565b60006060820190508181036000830152614b65818661440f565b90508181036020830152614b79818561440f565b90508181036040830152614b8d818461440f565b9050949350505050565b60006020820190508181036000830152614bb08161451b565b9050919050565b60006020820190508181036000830152614bd08161453e565b9050919050565b60006020820190508181036000830152614bf0816145a7565b9050919050565b60006020820190508181036000830152614c10816145ed565b9050919050565b60006020820190508181036000830152614c3081614656565b9050919050565b60006020820190508181036000830152614c5081614679565b9050919050565b60006020820190508181036000830152614c708161469c565b9050919050565b60006020820190508181036000830152614c90816146bf565b9050919050565b60006020820190508181036000830152614cb0816146e2565b9050919050565b60006020820190508181036000830152614cd081614705565b9050919050565b60006020820190508181036000830152614cf08161474b565b9050919050565b60006020820190508181036000830152614d108161476e565b9050919050565b60006020820190508181036000830152614d3081614791565b9050919050565b60006020820190508181036000830152614d50816147b4565b9050919050565b60006020820190508181036000830152614d70816147fa565b9050919050565b60006020820190508181036000830152614d9081614863565b9050919050565b60006020820190508181036000830152614db081614886565b9050919050565b60006020820190508181036000830152614dd0816148a9565b9050919050565b60006020820190508181036000830152614df0816148ef565b9050919050565b6000602082019050614e0c6000830184614921565b92915050565b6000614e1c614e2d565b9050614e288282615134565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5257614e5161526c565b5b614e5b8261529b565b9050602081019050919050565b6000819050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600060509050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f42826150b6565b9150614f4d836150b6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8257614f816151df565b5b828201905092915050565b6000614f98826150b6565b9150614fa3836150b6565b925082614fb357614fb261520e565b5b828204905092915050565b6000614fc9826150b6565b9150614fd4836150b6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561500d5761500c6151df565b5b828202905092915050565b6000615023826150b6565b915061502e836150b6565b925082821015615041576150406151df565b5b828203905092915050565b600061505782615096565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150ed5780820151818401526020810190506150d2565b838111156150fc576000848401525b50505050565b6000600282049050600182168061511a57607f821691505b6020821081141561512e5761512d61523d565b5b50919050565b61513d8261529b565b810181811067ffffffffffffffff8211171561515c5761515b61526c565b5b80604052505050565b6000615170826150b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151a3576151a26151df565b5b600182019050919050565b60006151b9826150b6565b91506151c4836150b6565b9250826151d4576151d361520e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a20224860008201527f656164222c202276616c7565223a202200000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7b226e616d65223a202256524e6f756e73222c00000000000000000000000000600082015250565b7f207b2274726169745f74797065223a2022426f6479222c202276616c7565223a60008201527f2022000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f22696d6167655f64617461223a20220000000000000000000000000000000000600082015250565b7f227d2c0000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f227d2c2000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f206d6f7265206d696e740000000000000000000000000000000000000000600082015250565b7f207b2274726169745f74797065223a2022476c617373222c202276616c75652260008201527f3a20220000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6159e38161504c565b81146159ee57600080fd5b50565b6159fa8161505e565b8114615a0557600080fd5b50565b615a118161506a565b8114615a1c57600080fd5b50565b615a28816150b6565b8114615a3357600080fd5b5056fe2720783d27302720793d2730272077696474683d2731383027206865696768743d27313730273e3c2f726563743e203c672069643d27676c61737327207472616e73666f726d3d277472616e736c6174652833302e3030303030302c2037302e30303030303029273e203c726563742069643d27676267272066696c6c3d27233c7376672077696474683d27333230707827206865696768743d273332307078272076696577426f783d273020302033323020333230272076657273696f6e3d27312e312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b273e203c7469746c653e56524e6f756e733c2f7469746c653e203c672069643d2756524e6f756e7327207374726f6b653d276e6f6e6527207374726f6b652d77696474683d2731272066696c6c3d276e6f6e65272066696c6c2d72756c653d276576656e6f6464273e203c726563742066696c6c3d27234435443745312720783d27302720793d2730272077696474683d2733323027206865696768743d27333230273e3c2f726563743e203c672069643d276a6e27207472616e73666f726d3d277472616e736c6174652837302e3030303030302c2034302e30303030303029273e203c672069643d27626f647927207472616e73666f726d3d277472616e736c6174652832302e3030303030302c203137302e30303030303029273e203c726563742066696c6c3d27234142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f2720783d27302720793d2730272077696474683d2731343027206865696768743d27313130273e3c2f726563743e203c726563742069643d276178272066696c6c3d27234435443745312720783d2732302720793d273430272077696474683d27313027206865696768743d273730273e3c2f726563743e203c2f673e203c726563742069643d2768656164272066696c6c3d27232720783d27302720793d2730272077696474683d2731333027206865696768743d273630273e3c2f726563743e203c672069643d27726727207472616e73666f726d3d277472616e736c6174652831302e3030303030302c2031302e30303030303029273e203c726563742069643d27726c272066696c6c3d27234646464646462720783d27302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c726563742069643d277272272066696c6c3d27233030303030302720783d2732302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c2f673e203c672069643d276c6627207472616e73666f726d3d277472616e736c6174652838302e3030303030302c2031302e30303030303029273e203c726563742069643d276c6c272066696c6c3d27234646464646462720783d27302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c726563742069643d276c72272066696c6c3d27233030303030302720783d2732302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c2f673e203c2f673e203c2f673e203c2f673e203c2f7376673ea2646970667358221220b34941d6fab33e0f73b19e7cb49df8081e3b1955d32c16d84bf9247e9850dd6464736f6c63430008010033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b88d4fde11610097578063e456b01c11610071578063e456b01c146104d0578063e985e9c5146104ee578063f2fde38b1461051e578063fd6cba461461053a576101a9565b8063b88d4fde14610452578063c87b56dd1461046e578063d05dcc6a1461049e576101a9565b80638da5cb5b116100d35780638da5cb5b146103de57806395d89b41146103fc57806398a1d2411461041a578063a22cb46514610436576101a9565b806370a082311461038657806370ed0ada146103b6578063715018a6146103d4576101a9565b80632e1a7d4d1161016657806342842e0e1161014057806342842e0e146102ec5780634f6ccce7146103085780635022b5e9146103385780636352211e14610356576101a9565b80632e1a7d4d146102825780632f745c591461029e578063340754ed146102ce576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c39190614205565b61056a565b6040516101d59190614b0e565b60405180910390f35b6101e661057c565b6040516101f39190614b29565b60405180910390f35b61021660048036038101906102119190614257565b61060e565b6040516102239190614a63565b60405180910390f35b610246600480360381019061024191906141c9565b610693565b005b6102506107ab565b60405161025d9190614df7565b60405180910390f35b610280600480360381019061027b91906140c3565b6107b8565b005b61029c60048036038101906102979190614257565b610818565b005b6102b860048036038101906102b391906141c9565b6108de565b6040516102c59190614df7565b60405180910390f35b6102d6610983565b6040516102e39190614df7565b60405180910390f35b610306600480360381019061030191906140c3565b610989565b005b610322600480360381019061031d9190614257565b6109a9565b60405161032f9190614df7565b60405180910390f35b610340610a40565b60405161034d9190614aca565b60405180910390f35b610370600480360381019061036b9190614257565b611cc7565b60405161037d9190614a63565b60405180910390f35b6103a0600480360381019061039b919061405e565b611d79565b6040516103ad9190614df7565b60405180910390f35b6103be611e31565b6040516103cb9190614df7565b60405180910390f35b6103dc611e39565b005b6103e6611f73565b6040516103f39190614a63565b60405180910390f35b610404611f9c565b6040516104119190614b29565b60405180910390f35b610434600480360381019061042f919061405e565b61202e565b005b610450600480360381019061044b919061418d565b612366565b005b61046c60048036038101906104679190614112565b6124e7565b005b61048860048036038101906104839190614257565b612549565b6040516104959190614b29565b60405180910390f35b6104b860048036038101906104b39190614257565b6125ec565b6040516104c793929190614b4b565b60405180910390f35b6104d86127ae565b6040516104e59190614df7565b60405180910390f35b61050860048036038101906105039190614087565b6127b4565b6040516105159190614b0e565b60405180910390f35b6105386004803603810190610533919061405e565b612848565b005b610554600480360381019061054f919061405e565b6129f1565b6040516105619190614aec565b60405180910390f35b600061057582612b6d565b9050919050565b60606001805461058b90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790615102565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b600061061982612be7565b610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f90614cf7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069e82611cc7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070690614d57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661072e612c53565b73ffffffffffffffffffffffffffffffffffffffff16148061075d575061075c81610757612c53565b6127b4565b5b61079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390614c77565b60405180910390fd5b6107a68383612c5b565b505050565b6000600980549050905090565b6107c96107c3612c53565b82612d14565b610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff90614d77565b60405180910390fd5b610813838383612df2565b505050565b610820612c53565b73ffffffffffffffffffffffffffffffffffffffff1661083e611f73565b73ffffffffffffffffffffffffffffffffffffffff1614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b90614d17565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108da573d6000803e3d6000fd5b5050565b60006108e983611d79565b821061092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190614b97565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a5481565b6109a4838383604051806020016040528060008152506124e7565b505050565b60006109b36107ab565b82106109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90614d97565b60405180910390fd5b60098281548110610a2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610a48613ec2565b60405180610a0001604052806040518060400160405280600681526020017f433542394131000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363341304639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383037463745000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454544383131000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344245413639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383041373244000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443232323039000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f354136354641000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464438423542000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464535303043000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f394632314130000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303638393430000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f314631443239000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f423837423131000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434643324142000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f423931383543000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434145464639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453131383333000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464643393235000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f304235303237000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454639393333000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464643313130000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363236313644000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463738413138000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443232323039000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363742314533000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f324238334636000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f333433323335000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464638324144000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464636333844000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464631414432000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434330353935000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f323642314633000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374343344632000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f314631443239000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464136464532000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646363731000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464631413042000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303638393430000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464542394435000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454646324641000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303030303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454142313138000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343130443636000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463933384438000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f323534454642000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363341304639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463731323438000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f444134324342000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464645463136000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646304245000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463739313344000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464644303637000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463945384444000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464637323136000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363637414639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463946354539000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443443464330000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374535323433000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f333935454431000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f434643394238000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464636333844000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303030303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f324238334636000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353634384544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f384444313232000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f394342344238000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453837303542000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443139413534000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f423931383543000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464535303043000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463333323243000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443744334344000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344245413639000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453837303542000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464645463136000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4633333232430000000000000000000000000000000000000000000000000000815250815250905090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790614cb7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614c97565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600047905090565b611e41612c53565b73ffffffffffffffffffffffffffffffffffffffff16611e5f611f73565b73ffffffffffffffffffffffffffffffffffffffff1614611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90614d17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611fab90615102565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd790615102565b80156120245780601f10611ff957610100808354040283529160200191612024565b820191906000526020600020905b81548152906001019060200180831161200757829003601f168201915b5050505050905090565b6002600c541415612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614dd7565b60405180910390fd5b6002600c81905550612084612c53565b73ffffffffffffffffffffffffffffffffffffffff166120a2611f73565b73ffffffffffffffffffffffffffffffffffffffff16146120f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ef90614d17565b60405180910390fd5b60006121026107ab565b9050600d546001826121149190614f37565b1115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c90614db7565b60405180910390fd5b600d546001826121659190614f37565b1161235a576001600a600082825461217d9190614f37565b9250508190555061219082600a5461304e565b600060116001436121a19190615018565b4060001c6121af91906151ae565b90506000602e6002436121c29190615018565b4060001c6121d091906151ae565b9050600060106003436121e39190615018565b4060001c6121f191906151ae565b905060006121fd610a40565b9050808460508110612238577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160106000600a5481526020019081526020016000206000019080519060200190612268929190613eea565b50806011846122779190614f37565b605081106122ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160106000600a54815260200190815260200160002060010190805190602001906122de929190613eea565b5080603f836122ed9190614f37565b60508110612324577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015160106000600a5481526020019081526020016000206002019080519060200190612354929190613eea565b50505050505b506001600c8190555050565b61236e612c53565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614c37565b60405180910390fd5b80600660006123e9612c53565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612496612c53565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124db9190614b0e565b60405180910390a35050565b6124f86124f2612c53565b83612d14565b612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614d77565b60405180910390fd5b6125438484848461306c565b50505050565b606060006125c2612559846130c8565b6010600086815260200190815260200160002060010160106000878152602001908152602001600020600201601060008881526020019081526020016000206000016040516020016125ae9493929190614995565b604051602081830303815290604052613363565b9050806040516020016125d59190614a41565b604051602081830303815290604052915050919050565b601060205280600052604060002060009150905080600001805461260f90615102565b80601f016020809104026020016040519081016040528092919081815260200182805461263b90615102565b80156126885780601f1061265d57610100808354040283529160200191612688565b820191906000526020600020905b81548152906001019060200180831161266b57829003601f168201915b50505050509080600101805461269d90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546126c990615102565b80156127165780601f106126eb57610100808354040283529160200191612716565b820191906000526020600020905b8154815290600101906020018083116126f957829003601f168201915b50505050509080600201805461272b90615102565b80601f016020809104026020016040519081016040528092919081815260200182805461275790615102565b80156127a45780601f10612779576101008083540402835291602001916127a4565b820191906000526020600020905b81548152906001019060200180831161278757829003601f168201915b5050505050905083565b600d5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612850612c53565b73ffffffffffffffffffffffffffffffffffffffff1661286e611f73565b73ffffffffffffffffffffffffffffffffffffffff16146128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614d17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90614bd7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060006129fe83611d79565b90506000811415612a8157600067ffffffffffffffff811115612a4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a785781602001602082028036833780820191505090505b50915050612b68565b60008167ffffffffffffffff811115612ac3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612af15781602001602082028036833780820191505090505b50905060005b82811015612b6157612b0985826108de565b828281518110612b42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080612b5990615165565b915050612af7565b5080925050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612be05750612bdf82613502565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cce83611cc7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d1f82612be7565b612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590614c57565b60405180910390fd5b6000612d6983611cc7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612dd857508373ffffffffffffffffffffffffffffffffffffffff16612dc08461060e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612de95750612de881856127b4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e1282611cc7565b73ffffffffffffffffffffffffffffffffffffffff1614612e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5f90614d37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf90614c17565b60405180910390fd5b612ee38383836135e4565b612eee600082612c5b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f3e9190615018565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f959190614f37565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6130688282604051806020016040528060008152506135f4565b5050565b6130788484848461364f565b6130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae90614bb7565b60405180910390fd5b6130c2848484612df2565b50505050565b606080606080606080606080604051806101e001604052806101be8152602001615ab76101be91399650601060008a8152602001908152602001600020600001805461311390615102565b80601f016020809104026020016040519081016040528092919081815260200182805461313f90615102565b801561318c5780601f106131615761010080835404028352916020019161318c565b820191906000526020600020905b81548152906001019060200180831161316f57829003601f168201915b505050505095506040518060c0016040528060958152602001615cb5609591399450601060008a815260200190815260200160002060010180546131cf90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546131fb90615102565b80156132485780601f1061321d57610100808354040283529160200191613248565b820191906000526020600020905b81548152906001019060200180831161322b57829003601f168201915b505050505093506040518060a0016040528060808152602001615a37608091399250601060008a8152602001908152602001600020600201805461328b90615102565b80601f01602080910402602001604051908101604052809291908181526020018280546132b790615102565b80156133045780601f106132d957610100808354040283529160200191613304565b820191906000526020600020905b8154815290600101906020018083116132e757829003601f168201915b505050505091506040518061020001604052806101df8152602001615d4a6101df91399050868686868686866040516020016133469796959493929190614930565b604051602081830303815290604052975050505050505050919050565b6060600082511415613386576040518060200160405280600081525090506134fd565b6000604051806060016040528060408152602001615c7560409139905060006003600285516133b59190614f37565b6133bf9190614f8d565b60046133cb9190614fbe565b905060006020826133dc9190614f37565b67ffffffffffffffff81111561341b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561344d5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156134bc576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050613461565b6003895106600181146134d657600281146134e6576134f1565b613d3d60f01b60028303526134f1565b603d60f81b60018303525b50505050508093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806135cd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806135dd57506135dc826137e6565b5b9050919050565b6135ef838383613850565b505050565b613601600084848461364f565b613640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363790614bb7565b60405180910390fd5b61364a8383613964565b505050565b60006136708473ffffffffffffffffffffffffffffffffffffffff16613b32565b156137d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613699612c53565b8786866040518563ffffffff1660e01b81526004016136bb9493929190614a7e565b602060405180830381600087803b1580156136d557600080fd5b505af192505050801561370657506040513d601f19601f82011682018060405250810190613703919061422e565b60015b613789573d8060008114613736576040519150601f19603f3d011682016040523d82523d6000602084013e61373b565b606091505b50600081511415613781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377890614bb7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137de565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61385b838383613b45565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561389e5761389981613b4a565b6138dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146138dc576138db8382613b93565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139205761391b81613d00565b61395f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461395e5761395d8282613e43565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cb90614cd7565b60405180910390fd5b6139dd81612be7565b15613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1490614bf7565b60405180910390fd5b613a29600083836135e4565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a799190614f37565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b600980549050600b600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ba084611d79565b613baa9190615018565b9050600060086000848152602001908152602001600020549050818114613c8f576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050613d149190615018565b90506000600b6000848152602001908152602001600020549050600060098381548110613d6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110613db2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b6000858152602001908152602001600020600090556009805480613e27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e4e83611d79565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60405180610a0001604052806050905b6060815260200190600190039081613ed25790505090565b828054613ef690615102565b90600052602060002090601f016020900481019282613f185760008555613f5f565b82601f10613f3157805160ff1916838001178555613f5f565b82800160010185558215613f5f579182015b82811115613f5e578251825591602001919060010190613f43565b5b509050613f6c9190613f70565b5090565b5b80821115613f89576000816000905550600101613f71565b5090565b6000613fa0613f9b84614e37565b614e12565b905082815260208101848484011115613fb857600080fd5b613fc38482856150c0565b509392505050565b600081359050613fda816159da565b92915050565b600081359050613fef816159f1565b92915050565b60008135905061400481615a08565b92915050565b60008151905061401981615a08565b92915050565b600082601f83011261403057600080fd5b8135614040848260208601613f8d565b91505092915050565b60008135905061405881615a1f565b92915050565b60006020828403121561407057600080fd5b600061407e84828501613fcb565b91505092915050565b6000806040838503121561409a57600080fd5b60006140a885828601613fcb565b92505060206140b985828601613fcb565b9150509250929050565b6000806000606084860312156140d857600080fd5b60006140e686828701613fcb565b93505060206140f786828701613fcb565b925050604061410886828701614049565b9150509250925092565b6000806000806080858703121561412857600080fd5b600061413687828801613fcb565b945050602061414787828801613fcb565b935050604061415887828801614049565b925050606085013567ffffffffffffffff81111561417557600080fd5b6141818782880161401f565b91505092959194509250565b600080604083850312156141a057600080fd5b60006141ae85828601613fcb565b92505060206141bf85828601613fe0565b9150509250929050565b600080604083850312156141dc57600080fd5b60006141ea85828601613fcb565b92505060206141fb85828601614049565b9150509250929050565b60006020828403121561421757600080fd5b600061422584828501613ff5565b91505092915050565b60006020828403121561424057600080fd5b600061424e8482850161400a565b91505092915050565b60006020828403121561426957600080fd5b600061427784828501614049565b91505092915050565b600061428c83836143d6565b905092915050565b60006142a08383614912565b60208301905092915050565b6142b58161504c565b82525050565b60006142c682614e97565b6142d08185614edd565b9350836020820285016142e285614e68565b8060005b8581101561431e57848403895281516142ff8582614280565b945061430a83614ec3565b925060208a019950506001810190506142e6565b50829750879550505050505092915050565b600061433b82614ea2565b6143458185614ee8565b935061435083614e72565b8060005b838110156143815781516143688882614294565b975061437383614ed0565b925050600181019050614354565b5085935050505092915050565b6143978161505e565b82525050565b60006143a882614ead565b6143b28185614ef9565b93506143c28185602086016150cf565b6143cb8161529b565b840191505092915050565b60006143e182614eb8565b6143eb8185614f0a565b93506143fb8185602086016150cf565b6144048161529b565b840191505092915050565b600061441a82614eb8565b6144248185614f1b565b93506144348185602086016150cf565b61443d8161529b565b840191505092915050565b600061445382614eb8565b61445d8185614f2c565b935061446d8185602086016150cf565b80840191505092915050565b6000815461448681615102565b6144908186614f2c565b945060018216600081146144ab57600181146144bc576144ef565b60ff198316865281860193506144ef565b6144c585614e82565b60005b838110156144e7578154818901526001820191506020810190506144c8565b838801955050505b50505092915050565b6000614505603083614f2c565b9150614510826152ac565b603082019050919050565b6000614528602b83614f1b565b9150614533826152fb565b604082019050919050565b600061454b603283614f1b565b91506145568261534a565b604082019050919050565b600061456e601383614f2c565b915061457982615399565b601382019050919050565b6000614591602283614f2c565b915061459c826153c2565b602282019050919050565b60006145b4602683614f1b565b91506145bf82615411565b604082019050919050565b60006145d7600283614f2c565b91506145e282615460565b600282019050919050565b60006145fa601c83614f1b565b915061460582615489565b602082019050919050565b600061461d600f83614f2c565b9150614628826154b2565b600f82019050919050565b6000614640600383614f2c565b915061464b826154db565b600382019050919050565b6000614663602483614f1b565b915061466e82615504565b604082019050919050565b6000614686601983614f1b565b915061469182615553565b602082019050919050565b60006146a9602c83614f1b565b91506146b48261557c565b604082019050919050565b60006146cc603883614f1b565b91506146d7826155cb565b604082019050919050565b60006146ef602a83614f1b565b91506146fa8261561a565b604082019050919050565b6000614712602983614f1b565b915061471d82615669565b604082019050919050565b6000614735600283614f2c565b9150614740826156b8565b600282019050919050565b6000614758602083614f1b565b9150614763826156e1565b602082019050919050565b600061477b602c83614f1b565b91506147868261570a565b604082019050919050565b600061479e602083614f1b565b91506147a982615759565b602082019050919050565b60006147c1602983614f1b565b91506147cc82615782565b604082019050919050565b60006147e4600283614f2c565b91506147ef826157d1565b600282019050919050565b6000614807602183614f1b565b9150614812826157fa565b604082019050919050565b600061482a601d83614f2c565b915061483582615849565b601d82019050919050565b600061484d600483614f2c565b915061485882615872565b600482019050919050565b6000614870603183614f1b565b915061487b8261589b565b604082019050919050565b6000614893602c83614f1b565b915061489e826158ea565b604082019050919050565b60006148b6600c83614f1b565b91506148c182615939565b602082019050919050565b60006148d9602383614f2c565b91506148e482615962565b602382019050919050565b60006148fc601f83614f1b565b9150614907826159b1565b602082019050919050565b61491b816150b6565b82525050565b61492a816150b6565b82525050565b600061493c828a614448565b91506149488289614448565b91506149548288614448565b91506149608287614448565b915061496c8286614448565b91506149788285614448565b91506149848284614448565b915081905098975050505050505050565b60006149a082614561565b91506149ab82614610565b91506149b78287614448565b91506149c2826145ca565b91506149cd826144f8565b91506149d98286614479565b91506149e482614633565b91506149ef826148cc565b91506149fb8285614479565b9150614a0682614840565b9150614a1182614584565b9150614a1d8284614479565b9150614a2882614728565b9150614a33826147d7565b915081905095945050505050565b6000614a4c8261481d565b9150614a588284614448565b915081905092915050565b6000602082019050614a7860008301846142ac565b92915050565b6000608082019050614a9360008301876142ac565b614aa060208301866142ac565b614aad6040830185614921565b8181036060830152614abf818461439d565b905095945050505050565b60006020820190508181036000830152614ae481846142bb565b905092915050565b60006020820190508181036000830152614b068184614330565b905092915050565b6000602082019050614b23600083018461438e565b92915050565b60006020820190508181036000830152614b43818461440f565b905092915050565b60006060820190508181036000830152614b65818661440f565b90508181036020830152614b79818561440f565b90508181036040830152614b8d818461440f565b9050949350505050565b60006020820190508181036000830152614bb08161451b565b9050919050565b60006020820190508181036000830152614bd08161453e565b9050919050565b60006020820190508181036000830152614bf0816145a7565b9050919050565b60006020820190508181036000830152614c10816145ed565b9050919050565b60006020820190508181036000830152614c3081614656565b9050919050565b60006020820190508181036000830152614c5081614679565b9050919050565b60006020820190508181036000830152614c708161469c565b9050919050565b60006020820190508181036000830152614c90816146bf565b9050919050565b60006020820190508181036000830152614cb0816146e2565b9050919050565b60006020820190508181036000830152614cd081614705565b9050919050565b60006020820190508181036000830152614cf08161474b565b9050919050565b60006020820190508181036000830152614d108161476e565b9050919050565b60006020820190508181036000830152614d3081614791565b9050919050565b60006020820190508181036000830152614d50816147b4565b9050919050565b60006020820190508181036000830152614d70816147fa565b9050919050565b60006020820190508181036000830152614d9081614863565b9050919050565b60006020820190508181036000830152614db081614886565b9050919050565b60006020820190508181036000830152614dd0816148a9565b9050919050565b60006020820190508181036000830152614df0816148ef565b9050919050565b6000602082019050614e0c6000830184614921565b92915050565b6000614e1c614e2d565b9050614e288282615134565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5257614e5161526c565b5b614e5b8261529b565b9050602081019050919050565b6000819050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600060509050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f42826150b6565b9150614f4d836150b6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f8257614f816151df565b5b828201905092915050565b6000614f98826150b6565b9150614fa3836150b6565b925082614fb357614fb261520e565b5b828204905092915050565b6000614fc9826150b6565b9150614fd4836150b6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561500d5761500c6151df565b5b828202905092915050565b6000615023826150b6565b915061502e836150b6565b925082821015615041576150406151df565b5b828203905092915050565b600061505782615096565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150ed5780820151818401526020810190506150d2565b838111156150fc576000848401525b50505050565b6000600282049050600182168061511a57607f821691505b6020821081141561512e5761512d61523d565b5b50919050565b61513d8261529b565b810181811067ffffffffffffffff8211171561515c5761515b61526c565b5b80604052505050565b6000615170826150b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151a3576151a26151df565b5b600182019050919050565b60006151b9826150b6565b91506151c4836150b6565b9250826151d4576151d361520e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a20224860008201527f656164222c202276616c7565223a202200000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7b226e616d65223a202256524e6f756e73222c00000000000000000000000000600082015250565b7f207b2274726169745f74797065223a2022426f6479222c202276616c7565223a60008201527f2022000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f22696d6167655f64617461223a20220000000000000000000000000000000000600082015250565b7f227d2c0000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f227d2c2000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f206d6f7265206d696e740000000000000000000000000000000000000000600082015250565b7f207b2274726169745f74797065223a2022476c617373222c202276616c75652260008201527f3a20220000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6159e38161504c565b81146159ee57600080fd5b50565b6159fa8161505e565b8114615a0557600080fd5b50565b615a118161506a565b8114615a1c57600080fd5b50565b615a28816150b6565b8114615a3357600080fd5b5056fe2720783d27302720793d2730272077696474683d2731383027206865696768743d27313730273e3c2f726563743e203c672069643d27676c61737327207472616e73666f726d3d277472616e736c6174652833302e3030303030302c2037302e30303030303029273e203c726563742069643d27676267272066696c6c3d27233c7376672077696474683d27333230707827206865696768743d273332307078272076696577426f783d273020302033323020333230272076657273696f6e3d27312e312720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f7376672720786d6c6e733a786c696e6b3d27687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b273e203c7469746c653e56524e6f756e733c2f7469746c653e203c672069643d2756524e6f756e7327207374726f6b653d276e6f6e6527207374726f6b652d77696474683d2731272066696c6c3d276e6f6e65272066696c6c2d72756c653d276576656e6f6464273e203c726563742066696c6c3d27234435443745312720783d27302720793d2730272077696474683d2733323027206865696768743d27333230273e3c2f726563743e203c672069643d276a6e27207472616e73666f726d3d277472616e736c6174652837302e3030303030302c2034302e30303030303029273e203c672069643d27626f647927207472616e73666f726d3d277472616e736c6174652832302e3030303030302c203137302e30303030303029273e203c726563742066696c6c3d27234142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f2720783d27302720793d2730272077696474683d2731343027206865696768743d27313130273e3c2f726563743e203c726563742069643d276178272066696c6c3d27234435443745312720783d2732302720793d273430272077696474683d27313027206865696768743d273730273e3c2f726563743e203c2f673e203c726563742069643d2768656164272066696c6c3d27232720783d27302720793d2730272077696474683d2731333027206865696768743d273630273e3c2f726563743e203c672069643d27726727207472616e73666f726d3d277472616e736c6174652831302e3030303030302c2031302e30303030303029273e203c726563742069643d27726c272066696c6c3d27234646464646462720783d27302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c726563742069643d277272272066696c6c3d27233030303030302720783d2732302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c2f673e203c672069643d276c6627207472616e73666f726d3d277472616e736c6174652838302e3030303030302c2031302e30303030303029273e203c726563742069643d276c6c272066696c6c3d27234646464646462720783d27302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c726563742069643d276c72272066696c6c3d27233030303030302720783d2732302720793d2730272077696474683d27323027206865696768743d273430273e3c2f726563743e203c2f673e203c2f673e203c2f673e203c2f673e203c2f7376673ea2646970667358221220b34941d6fab33e0f73b19e7cb49df8081e3b1955d32c16d84bf9247e9850dd6464736f6c63430008010033
Deployed Bytecode Sourcemap
38048:6978:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44830:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27212:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28672:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28209:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35151:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29562:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44422:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34819:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34275:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29938:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35341:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38518:2027;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26906:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26636:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44534:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19830:148;;;:::i;:::-;;19179:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27381:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40757:748;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28965:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30160:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41941:645;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38297:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38176:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29331:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20133:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41511:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44830:193;44958:4;44981:36;45005:11;44981:23;:36::i;:::-;44974:43;;44830:193;;;:::o;27212:100::-;27266:13;27299:5;27292:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27212:100;:::o;28672:221::-;28748:7;28776:16;28784:7;28776;:16::i;:::-;28768:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28861:15;:24;28877:7;28861:24;;;;;;;;;;;;;;;;;;;;;28854:31;;28672:221;;;:::o;28209:397::-;28290:13;28306:23;28321:7;28306:14;:23::i;:::-;28290:39;;28354:5;28348:11;;:2;:11;;;;28340:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28434:5;28418:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28443:37;28460:5;28467:12;:10;:12::i;:::-;28443:16;:37::i;:::-;28418:62;28410:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28577:21;28586:2;28590:7;28577:8;:21::i;:::-;28209:397;;;:::o;35151:113::-;35212:7;35239:10;:17;;;;35232:24;;35151:113;:::o;29562:305::-;29723:41;29742:12;:10;:12::i;:::-;29756:7;29723:18;:41::i;:::-;29715:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29831:28;29841:4;29847:2;29851:7;29831:9;:28::i;:::-;29562:305;;;:::o;44422:106::-;19410:12;:10;:12::i;:::-;19399:23;;:7;:5;:7::i;:::-;:23;;;19391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44492:10:::1;44484:28;;:38;44513:8;44484:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44422:106:::0;:::o;34819:256::-;34916:7;34952:23;34969:5;34952:16;:23::i;:::-;34944:5;:31;34936:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35041:12;:19;35054:5;35041:19;;;;;;;;;;;;;;;:26;35061:5;35041:26;;;;;;;;;;;;35034:33;;34819:256;;;;:::o;34275:25::-;;;;:::o;29938:151::-;30042:39;30059:4;30065:2;30069:7;30042:39;;;;;;;;;;;;:16;:39::i;:::-;29938:151;;;:::o;35341:233::-;35416:7;35452:30;:28;:30::i;:::-;35444:5;:38;35436:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35549:10;35560:5;35549:17;;;;;;;;;;;;;;;;;;;;;;;;35542:24;;35341:233;;;:::o;38518:2027::-;38557:17;;:::i;:::-;38587:1950;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38518:2027;:::o;26906:239::-;26978:7;26998:13;27014:7;:16;27022:7;27014:16;;;;;;;;;;;;;;;;;;;;;26998:32;;27066:1;27049:19;;:5;:19;;;;27041:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27132:5;27125:12;;;26906:239;;;:::o;26636:208::-;26708:7;26753:1;26736:19;;:5;:19;;;;26728:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26820:9;:16;26830:5;26820:16;;;;;;;;;;;;;;;;26813:23;;26636:208;;;:::o;44534:91::-;44579:4;44599:21;44592:28;;44534:91;:::o;19830:148::-;19410:12;:10;:12::i;:::-;19399:23;;:7;:5;:7::i;:::-;:23;;;19391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19937:1:::1;19900:40;;19921:6;::::0;::::1;;;;;;;;19900:40;;;;;;;;;;;;19968:1;19951:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19830:148::o:0;19179:87::-;19225:7;19252:6;;;;;;;;;;;19245:13;;19179:87;:::o;27381:104::-;27437:13;27470:7;27463:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27381:104;:::o;40757:748::-;22062:1;22659:7;;:19;;22651:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22062:1;22792:7;:18;;;;19410:12:::1;:10;:12::i;:::-;19399:23;;:7;:5;:7::i;:::-;:23;;;19391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40839:19:::2;40861:13;:11;:13::i;:::-;40839:35;;40912:6;;40907:1;40893:11;:15;;;;:::i;:::-;:25;;40885:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;40968:6;;40963:1;40949:11;:15;;;;:::i;:::-;:25;40946:552;;41005:1;40991:10;;:15;;;;;;;:::i;:::-;;;;;;;;41021:30;41031:7;41040:10;;41021:9;:30::i;:::-;41066:10;41118:2;41112:1;41097:12;:16;;;;:::i;:::-;41087:27;41079:36;;:41;;;;:::i;:::-;41066:54;;41135:11;41188:2;41182:1;41167:12;:16;;;;:::i;:::-;41157:27;41149:36;;:41;;;;:::i;:::-;41135:55;;41205:12;41259:2;41253:1;41238:12;:16;;;;:::i;:::-;41228:27;41220:36;;:41;;;;:::i;:::-;41205:56;;41276:24;41303:8;:6;:8::i;:::-;41276:35;;41355:6;41362:2;41355:10;;;;;;;;;;;;;;;;;;;41326;:22;41337:10;;41326:22;;;;;;;;;;;:25;;:39;;;;;;;;;;;;:::i;:::-;;41410:6;41421:2;41417:3;:6;;;;:::i;:::-;41410:14;;;;;;;;;;;;;;;;;;;41380:10;:22;41391:10;;41380:22;;;;;;;;;;;:26;;:44;;;;;;;;;;;;:::i;:::-;;41471:6;41483:2;41478:4;:7;;;;:::i;:::-;41471:15;;;;;;;;;;;;;;;;;;;41440:10;:22;41451:10;;41440:22;;;;;;;;;;;:27;;:46;;;;;;;;;;;;:::i;:::-;;40946:552;;;;;19470:1;22018::::0;22971:7;:22;;;;40757:748;:::o;28965:295::-;29080:12;:10;:12::i;:::-;29068:24;;:8;:24;;;;29060:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29180:8;29135:18;:32;29154:12;:10;:12::i;:::-;29135:32;;;;;;;;;;;;;;;:42;29168:8;29135:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29233:8;29204:48;;29219:12;:10;:12::i;:::-;29204:48;;;29243:8;29204:48;;;;;;:::i;:::-;;;;;;;;28965:295;;:::o;30160:285::-;30292:41;30311:12;:10;:12::i;:::-;30325:7;30292:18;:41::i;:::-;30284:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30398:39;30412:4;30418:2;30422:7;30431:5;30398:13;:39::i;:::-;30160:285;;;;:::o;41941:645::-;42006:13;42032:18;42053:444;42166:15;42173:7;42166:6;:15::i;:::-;42255:10;:19;42266:7;42255:19;;;;;;;;;;;:23;;42340:10;:19;42351:7;42340:19;;;;;;;;;;;:24;;42426:10;:19;42437:7;42426:19;;;;;;;;;;;:22;;42080:404;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42053:13;:444::i;:::-;42032:465;;42572:4;42522:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;42508:70;;;41941:645;;;:::o;38297:42::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38176:28::-;;;;:::o;29331:164::-;29428:4;29452:18;:25;29471:5;29452:25;;;;;;;;;;;;;;;:35;29478:8;29452:35;;;;;;;;;;;;;;;;;;;;;;;;;29445:42;;29331:164;;;;:::o;20133:244::-;19410:12;:10;:12::i;:::-;19399:23;;:7;:5;:7::i;:::-;:23;;;19391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20242:1:::1;20222:22;;:8;:22;;;;20214:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20332:8;20303:38;;20324:6;::::0;::::1;;;;;;;;20303:38;;;;;;;;;;;;20361:8;20352:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20133:244:::0;:::o;41511:418::-;41598:16;41626:14;41643:17;41653:6;41643:9;:17::i;:::-;41626:34;;41681:1;41671:6;:11;41667:257;;;41714:1;41700:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41693:23;;;;;41667:257;41739:23;41779:6;41765:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41739:47;;41800:9;41795:100;41819:6;41815:1;:10;41795:100;;;41855:30;41875:6;41883:1;41855:19;:30::i;:::-;41843:6;41850:1;41843:9;;;;;;;;;;;;;;;;;;;;;:42;;;;;41827:3;;;;;:::i;:::-;;;;41795:100;;;;41910:6;41903:13;;;;41511:418;;;;:::o;34498:237::-;34600:4;34639:35;34624:50;;;:11;:50;;;;:103;;;;34691:36;34715:11;34691:23;:36::i;:::-;34624:103;34617:110;;34498:237;;;:::o;30744:127::-;30809:4;30861:1;30833:30;;:7;:16;30841:7;30833:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30826:37;;30744:127;;;:::o;6189:98::-;6242:7;6269:10;6262:17;;6189:98;:::o;32689:174::-;32791:2;32764:15;:24;32780:7;32764:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32847:7;32843:2;32809:46;;32818:23;32833:7;32818:14;:23::i;:::-;32809:46;;;;;;;;;;;;32689:174;;:::o;30884:348::-;30977:4;31002:16;31010:7;31002;:16::i;:::-;30994:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31078:13;31094:23;31109:7;31094:14;:23::i;:::-;31078:39;;31147:5;31136:16;;:7;:16;;;:51;;;;31180:7;31156:31;;:20;31168:7;31156:11;:20::i;:::-;:31;;;31136:51;:87;;;;31191:32;31208:5;31215:7;31191:16;:32::i;:::-;31136:87;31128:96;;;30884:348;;;;:::o;32027:544::-;32152:4;32125:31;;:23;32140:7;32125:14;:23::i;:::-;:31;;;32117:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32235:1;32221:16;;:2;:16;;;;32213:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32291:39;32312:4;32318:2;32322:7;32291:20;:39::i;:::-;32395:29;32412:1;32416:7;32395:8;:29::i;:::-;32456:1;32437:9;:15;32447:4;32437:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32485:1;32468:9;:13;32478:2;32468:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32516:2;32497:7;:16;32505:7;32497:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32555:7;32551:2;32536:27;;32545:4;32536:27;;;;;;;;;;;;32027:544;;;:::o;31246:110::-;31322:26;31332:2;31336:7;31322:26;;;;;;;;;;;;:9;:26::i;:::-;31246:110;;:::o;30459:272::-;30581:48;30604:4;30610:2;30614:7;30623:5;30581:22;:48::i;:::-;30573:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30695:28;30705:4;30711:2;30715:7;30695:9;:28::i;:::-;30459:272;;;;:::o;42594:1816::-;42650:13;42676:17;42707:18;42736:19;42768:18;42797:19;42829:20;42860:21;42902:454;;;;;;;;;;;;;;;;;;;43374:10;:20;43385:8;43374:20;;;;;;;;;;;:23;;43367:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43408:157;;;;;;;;;;;;;;;;;;;43583:10;:20;43594:8;43583:20;;;;;;;;;;;:24;;43576:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43618:137;;;;;;;;;;;;;;;;;;;43775:10;:20;43786:8;43775:20;;;;;;;;;;;:25;;43766:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43811:490;;;;;;;;;;;;;;;;;;;44354:3;44359:4;44365:5;44372:4;44378:5;44385:6;44393:7;44337:64;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44323:79;;;;;;;;;42594:1816;;;:::o;789:1912::-;847:13;892:1;877:4;:11;:16;873:31;;;895:9;;;;;;;;;;;;;;;;873:31;956:19;978:12;;;;;;;;;;;;;;;;;956:34;;1042:18;1088:1;1083;1069:4;:11;:15;;;;:::i;:::-;1068:21;;;;:::i;:::-;1063:1;:27;;;;:::i;:::-;1042:48;;1173:20;1220:2;1207:10;:15;;;;:::i;:::-;1196:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1173:50;;1320:10;1312:6;1305:26;1415:1;1408:5;1404:13;1474:4;1525;1519:11;1510:7;1506:25;1621:2;1613:6;1609:15;1694:754;1713:6;1704:7;1701:19;1694:754;;;1813:1;1804:7;1800:15;1789:26;;1852:7;1846:14;1978:4;1970:5;1966:2;1962:14;1958:25;1948:8;1944:40;1938:47;1927:9;1919:67;2032:1;2021:9;2017:17;2004:30;;2111:4;2103:5;2099:2;2095:14;2091:25;2081:8;2077:40;2071:47;2060:9;2052:67;2165:1;2154:9;2150:17;2137:30;;2244:4;2236:5;2233:1;2228:14;2224:25;2214:8;2210:40;2204:47;2193:9;2185:67;2298:1;2287:9;2283:17;2270:30;;2377:4;2369:5;2357:25;2347:8;2343:40;2337:47;2326:9;2318:67;2431:1;2420:9;2416:17;2403:30;;1737:711;1694:754;;;2521:1;2514:4;2508:11;2504:19;2542:1;2537:54;;;;2610:1;2605:52;;;;2497:160;;2537:54;2581:6;2576:3;2572:16;2568:1;2557:9;2553:17;2546:43;2537:54;;2605:52;2649:4;2644:3;2640:14;2636:1;2625:9;2621:17;2614:41;2497:160;;1245:1423;;;;2687:6;2680:13;;;;;789:1912;;;;:::o;26280:292::-;26382:4;26421:25;26406:40;;;:11;:40;;;;:105;;;;26478:33;26463:48;;;:11;:48;;;;26406:105;:158;;;;26528:36;26552:11;26528:23;:36::i;:::-;26406:158;26399:165;;26280:292;;;:::o;44629:195::-;44773:45;44800:4;44806:2;44810:7;44773:26;:45::i;:::-;44629:195;;;:::o;31369:250::-;31473:54;31504:1;31508:2;31512:7;31521:5;31473:22;:54::i;:::-;31465:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31593:18;31599:2;31603:7;31593:5;:18::i;:::-;31369:250;;;:::o;32871:843::-;32992:4;33018:15;:2;:13;;;:15::i;:::-;33014:693;;;33070:2;33054:36;;;33091:12;:10;:12::i;:::-;33105:4;33111:7;33120:5;33054:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33050:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33317:1;33300:6;:13;:18;33296:341;;;33343:60;;;;;;;;;;:::i;:::-;;;;;;;;33296:341;33587:6;33581:13;33572:6;33568:2;33564:15;33557:38;33050:602;33187:45;;;33177:55;;;:6;:55;;;;33170:62;;;;;33014:693;33691:4;33684:11;;32871:843;;;;;;;:::o;12255:157::-;12340:4;12379:25;12364:40;;;:11;:40;;;;12357:47;;12255:157;;;:::o;35588:555::-;35698:45;35725:4;35731:2;35735:7;35698:26;:45::i;:::-;35776:1;35760:18;;:4;:18;;;35756:187;;;35795:40;35827:7;35795:31;:40::i;:::-;35756:187;;;35865:2;35857:10;;:4;:10;;;35853:90;;35884:47;35917:4;35923:7;35884:32;:47::i;:::-;35853:90;35756:187;35971:1;35957:16;;:2;:16;;;35953:183;;;35990:45;36027:7;35990:36;:45::i;:::-;35953:183;;;36063:4;36057:10;;:2;:10;;;36053:83;;36084:40;36112:2;36116:7;36084:27;:40::i;:::-;36053:83;35953:183;35588:555;;;:::o;31627:390::-;31721:1;31707:16;;:2;:16;;;;31699:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31780:16;31788:7;31780;:16::i;:::-;31779:17;31771:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31842:45;31871:1;31875:2;31879:7;31842:20;:45::i;:::-;31925:1;31908:9;:13;31918:2;31908:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31956:2;31937:7;:16;31945:7;31937:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32001:7;31997:2;31976:33;;31993:1;31976:33;;;;;;;;;;;;31627:390;;:::o;13127:422::-;13187:4;13395:12;13506:7;13494:20;13486:28;;13540:1;13533:4;:8;13526:15;;;13127:422;;;:::o;33725:93::-;;;;:::o;36393:164::-;36497:10;:17;;;;36470:15;:24;36486:7;36470:24;;;;;;;;;;;:44;;;;36525:10;36541:7;36525:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36393:164;:::o;36570:823::-;36671:22;36721:1;36696:22;36713:4;36696:16;:22::i;:::-;:26;;;;:::i;:::-;36671:51;;36733:18;36754:17;:26;36772:7;36754:26;;;;;;;;;;;;36733:47;;36901:14;36887:10;:28;36883:328;;36932:19;36954:12;:18;36967:4;36954:18;;;;;;;;;;;;;;;:34;36973:14;36954:34;;;;;;;;;;;;36932:56;;37038:11;37005:12;:18;37018:4;37005:18;;;;;;;;;;;;;;;:30;37024:10;37005:30;;;;;;;;;;;:44;;;;37155:10;37122:17;:30;37140:11;37122:30;;;;;;;;;;;:43;;;;36883:328;;37307:17;:26;37325:7;37307:26;;;;;;;;;;;37300:33;;;37351:12;:18;37364:4;37351:18;;;;;;;;;;;;;;;:34;37370:14;37351:34;;;;;;;;;;;37344:41;;;36570:823;;;;:::o;37406:604::-;37497:22;37542:1;37522:10;:17;;;;:21;;;;:::i;:::-;37497:46;;37554:18;37575:15;:24;37591:7;37575:24;;;;;;;;;;;;37554:45;;37613:19;37635:10;37646:14;37635:26;;;;;;;;;;;;;;;;;;;;;;;;37613:48;;37699:11;37674:10;37685;37674:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;37810:10;37779:15;:28;37795:11;37779:28;;;;;;;;;;;:41;;;;37951:15;:24;37967:7;37951:24;;;;;;;;;;;37944:31;;;37986:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37406:604;;;;:::o;36157:221::-;36242:14;36259:20;36276:2;36259:16;:20::i;:::-;36242:37;;36317:7;36290:12;:16;36303:2;36290:16;;;;;;;;;;;;;;;:24;36307:6;36290:24;;;;;;;;;;;:34;;;;36364:6;36335:17;:26;36353:7;36335:26;;;;;;;;;;;:35;;;;36157:221;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1220:139::-;;1304:6;1291:20;1282:29;;1320:33;1347:5;1320:33;:::i;:::-;1272:87;;;;:::o;1365:262::-;;1473:2;1461:9;1452:7;1448:23;1444:32;1441:2;;;1489:1;1486;1479:12;1441:2;1532:1;1557:53;1602:7;1593:6;1582:9;1578:22;1557:53;:::i;:::-;1547:63;;1503:117;1431:196;;;;:::o;1633:407::-;;;1758:2;1746:9;1737:7;1733:23;1729:32;1726:2;;;1774:1;1771;1764:12;1726:2;1817:1;1842:53;1887:7;1878:6;1867:9;1863:22;1842:53;:::i;:::-;1832:63;;1788:117;1944:2;1970:53;2015:7;2006:6;1995:9;1991:22;1970:53;:::i;:::-;1960:63;;1915:118;1716:324;;;;;:::o;2046:552::-;;;;2188:2;2176:9;2167:7;2163:23;2159:32;2156:2;;;2204:1;2201;2194:12;2156:2;2247:1;2272:53;2317:7;2308:6;2297:9;2293:22;2272:53;:::i;:::-;2262:63;;2218:117;2374:2;2400:53;2445:7;2436:6;2425:9;2421:22;2400:53;:::i;:::-;2390:63;;2345:118;2502:2;2528:53;2573:7;2564:6;2553:9;2549:22;2528:53;:::i;:::-;2518:63;;2473:118;2146:452;;;;;:::o;2604:809::-;;;;;2772:3;2760:9;2751:7;2747:23;2743:33;2740:2;;;2789:1;2786;2779:12;2740:2;2832:1;2857:53;2902:7;2893:6;2882:9;2878:22;2857:53;:::i;:::-;2847:63;;2803:117;2959:2;2985:53;3030:7;3021:6;3010:9;3006:22;2985:53;:::i;:::-;2975:63;;2930:118;3087:2;3113:53;3158:7;3149:6;3138:9;3134:22;3113:53;:::i;:::-;3103:63;;3058:118;3243:2;3232:9;3228:18;3215:32;3274:18;3266:6;3263:30;3260:2;;;3306:1;3303;3296:12;3260:2;3334:62;3388:7;3379:6;3368:9;3364:22;3334:62;:::i;:::-;3324:72;;3186:220;2730:683;;;;;;;:::o;3419:401::-;;;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3557:1;3554;3547:12;3509:2;3600:1;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3571:117;3727:2;3753:50;3795:7;3786:6;3775:9;3771:22;3753:50;:::i;:::-;3743:60;;3698:115;3499:321;;;;;:::o;3826:407::-;;;3951:2;3939:9;3930:7;3926:23;3922:32;3919:2;;;3967:1;3964;3957:12;3919:2;4010:1;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3981:117;4137:2;4163:53;4208:7;4199:6;4188:9;4184:22;4163:53;:::i;:::-;4153:63;;4108:118;3909:324;;;;;:::o;4239:260::-;;4346:2;4334:9;4325:7;4321:23;4317:32;4314:2;;;4362:1;4359;4352:12;4314:2;4405:1;4430:52;4474:7;4465:6;4454:9;4450:22;4430:52;:::i;:::-;4420:62;;4376:116;4304:195;;;;:::o;4505:282::-;;4623:2;4611:9;4602:7;4598:23;4594:32;4591:2;;;4639:1;4636;4629:12;4591:2;4682:1;4707:63;4762:7;4753:6;4742:9;4738:22;4707:63;:::i;:::-;4697:73;;4653:127;4581:206;;;;:::o;4793:262::-;;4901:2;4889:9;4880:7;4876:23;4872:32;4869:2;;;4917:1;4914;4907:12;4869:2;4960:1;4985:53;5030:7;5021:6;5010:9;5006:22;4985:53;:::i;:::-;4975:63;;4931:117;4859:196;;;;:::o;5061:::-;;5185:66;5247:3;5239:6;5185:66;:::i;:::-;5171:80;;5161:96;;;;:::o;5263:179::-;;5353:46;5395:3;5387:6;5353:46;:::i;:::-;5431:4;5426:3;5422:14;5408:28;;5343:99;;;;:::o;5448:118::-;5535:24;5553:5;5535:24;:::i;:::-;5530:3;5523:37;5513:53;;:::o;5604:985::-;;5770:63;5827:5;5770:63;:::i;:::-;5849:95;5937:6;5932:3;5849:95;:::i;:::-;5842:102;;5970:3;6015:4;6007:6;6003:17;5998:3;5994:27;6045:65;6104:5;6045:65;:::i;:::-;6133:7;6164:1;6149:395;6174:6;6171:1;6168:13;6149:395;;;6245:9;6239:4;6235:20;6230:3;6223:33;6296:6;6290:13;6324:84;6403:4;6388:13;6324:84;:::i;:::-;6316:92;;6431:69;6493:6;6431:69;:::i;:::-;6421:79;;6529:4;6524:3;6520:14;6513:21;;6209:335;6196:1;6193;6189:9;6184:14;;6149:395;;;6153:14;6560:4;6553:11;;6580:3;6573:10;;5746:843;;;;;;;;;:::o;6625:732::-;;6773:54;6821:5;6773:54;:::i;:::-;6843:86;6922:6;6917:3;6843:86;:::i;:::-;6836:93;;6953:56;7003:5;6953:56;:::i;:::-;7032:7;7063:1;7048:284;7073:6;7070:1;7067:13;7048:284;;;7149:6;7143:13;7176:63;7235:3;7220:13;7176:63;:::i;:::-;7169:70;;7262:60;7315:6;7262:60;:::i;:::-;7252:70;;7108:224;7095:1;7092;7088:9;7083:14;;7048:284;;;7052:14;7348:3;7341:10;;6749:608;;;;;;;:::o;7363:109::-;7444:21;7459:5;7444:21;:::i;:::-;7439:3;7432:34;7422:50;;:::o;7478:360::-;;7592:38;7624:5;7592:38;:::i;:::-;7646:70;7709:6;7704:3;7646:70;:::i;:::-;7639:77;;7725:52;7770:6;7765:3;7758:4;7751:5;7747:16;7725:52;:::i;:::-;7802:29;7824:6;7802:29;:::i;:::-;7797:3;7793:39;7786:46;;7568:270;;;;;:::o;7844:344::-;;7950:39;7983:5;7950:39;:::i;:::-;8005:61;8059:6;8054:3;8005:61;:::i;:::-;7998:68;;8075:52;8120:6;8115:3;8108:4;8101:5;8097:16;8075:52;:::i;:::-;8152:29;8174:6;8152:29;:::i;:::-;8147:3;8143:39;8136:46;;7926:262;;;;;:::o;8194:364::-;;8310:39;8343:5;8310:39;:::i;:::-;8365:71;8429:6;8424:3;8365:71;:::i;:::-;8358:78;;8445:52;8490:6;8485:3;8478:4;8471:5;8467:16;8445:52;:::i;:::-;8522:29;8544:6;8522:29;:::i;:::-;8517:3;8513:39;8506:46;;8286:272;;;;;:::o;8564:377::-;;8698:39;8731:5;8698:39;:::i;:::-;8753:89;8835:6;8830:3;8753:89;:::i;:::-;8746:96;;8851:52;8896:6;8891:3;8884:4;8877:5;8873:16;8851:52;:::i;:::-;8928:6;8923:3;8919:16;8912:23;;8674:267;;;;;:::o;8971:845::-;;9111:5;9105:12;9140:36;9166:9;9140:36;:::i;:::-;9192:89;9274:6;9269:3;9192:89;:::i;:::-;9185:96;;9312:1;9301:9;9297:17;9328:1;9323:137;;;;9474:1;9469:341;;;;9290:520;;9323:137;9407:4;9403:9;9392;9388:25;9383:3;9376:38;9443:6;9438:3;9434:16;9427:23;;9323:137;;9469:341;9536:38;9568:5;9536:38;:::i;:::-;9596:1;9610:154;9624:6;9621:1;9618:13;9610:154;;;9698:7;9692:14;9688:1;9683:3;9679:11;9672:35;9748:1;9739:7;9735:15;9724:26;;9646:4;9643:1;9639:12;9634:17;;9610:154;;;9793:6;9788:3;9784:16;9777:23;;9476:334;;9290:520;;9078:738;;;;;;:::o;9822:402::-;;10003:85;10085:2;10080:3;10003:85;:::i;:::-;9996:92;;10097:93;10186:3;10097:93;:::i;:::-;10215:2;10210:3;10206:12;10199:19;;9986:238;;;:::o;10230:366::-;;10393:67;10457:2;10452:3;10393:67;:::i;:::-;10386:74;;10469:93;10558:3;10469:93;:::i;:::-;10587:2;10582:3;10578:12;10571:19;;10376:220;;;:::o;10602:366::-;;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10841:93;10930:3;10841:93;:::i;:::-;10959:2;10954:3;10950:12;10943:19;;10748:220;;;:::o;10974:402::-;;11155:85;11237:2;11232:3;11155:85;:::i;:::-;11148:92;;11249:93;11338:3;11249:93;:::i;:::-;11367:2;11362:3;11358:12;11351:19;;11138:238;;;:::o;11382:402::-;;11563:85;11645:2;11640:3;11563:85;:::i;:::-;11556:92;;11657:93;11746:3;11657:93;:::i;:::-;11775:2;11770:3;11766:12;11759:19;;11546:238;;;:::o;11790:366::-;;11953:67;12017:2;12012:3;11953:67;:::i;:::-;11946:74;;12029:93;12118:3;12029:93;:::i;:::-;12147:2;12142:3;12138:12;12131:19;;11936:220;;;:::o;12162:400::-;;12343:84;12425:1;12420:3;12343:84;:::i;:::-;12336:91;;12436:93;12525:3;12436:93;:::i;:::-;12554:1;12549:3;12545:11;12538:18;;12326:236;;;:::o;12568:366::-;;12731:67;12795:2;12790:3;12731:67;:::i;:::-;12724:74;;12807:93;12896:3;12807:93;:::i;:::-;12925:2;12920:3;12916:12;12909:19;;12714:220;;;:::o;12940:402::-;;13121:85;13203:2;13198:3;13121:85;:::i;:::-;13114:92;;13215:93;13304:3;13215:93;:::i;:::-;13333:2;13328:3;13324:12;13317:19;;13104:238;;;:::o;13348:400::-;;13529:84;13611:1;13606:3;13529:84;:::i;:::-;13522:91;;13622:93;13711:3;13622:93;:::i;:::-;13740:1;13735:3;13731:11;13724:18;;13512:236;;;:::o;13754:366::-;;13917:67;13981:2;13976:3;13917:67;:::i;:::-;13910:74;;13993:93;14082:3;13993:93;:::i;:::-;14111:2;14106:3;14102:12;14095:19;;13900:220;;;:::o;14126:366::-;;14289:67;14353:2;14348:3;14289:67;:::i;:::-;14282:74;;14365:93;14454:3;14365:93;:::i;:::-;14483:2;14478:3;14474:12;14467:19;;14272:220;;;:::o;14498:366::-;;14661:67;14725:2;14720:3;14661:67;:::i;:::-;14654:74;;14737:93;14826:3;14737:93;:::i;:::-;14855:2;14850:3;14846:12;14839:19;;14644:220;;;:::o;14870:366::-;;15033:67;15097:2;15092:3;15033:67;:::i;:::-;15026:74;;15109:93;15198:3;15109:93;:::i;:::-;15227:2;15222:3;15218:12;15211:19;;15016:220;;;:::o;15242:366::-;;15405:67;15469:2;15464:3;15405:67;:::i;:::-;15398:74;;15481:93;15570:3;15481:93;:::i;:::-;15599:2;15594:3;15590:12;15583:19;;15388:220;;;:::o;15614:366::-;;15777:67;15841:2;15836:3;15777:67;:::i;:::-;15770:74;;15853:93;15942:3;15853:93;:::i;:::-;15971:2;15966:3;15962:12;15955:19;;15760:220;;;:::o;15986:400::-;;16167:84;16249:1;16244:3;16167:84;:::i;:::-;16160:91;;16260:93;16349:3;16260:93;:::i;:::-;16378:1;16373:3;16369:11;16362:18;;16150:236;;;:::o;16392:366::-;;16555:67;16619:2;16614:3;16555:67;:::i;:::-;16548:74;;16631:93;16720:3;16631:93;:::i;:::-;16749:2;16744:3;16740:12;16733:19;;16538:220;;;:::o;16764:366::-;;16927:67;16991:2;16986:3;16927:67;:::i;:::-;16920:74;;17003:93;17092:3;17003:93;:::i;:::-;17121:2;17116:3;17112:12;17105:19;;16910:220;;;:::o;17136:366::-;;17299:67;17363:2;17358:3;17299:67;:::i;:::-;17292:74;;17375:93;17464:3;17375:93;:::i;:::-;17493:2;17488:3;17484:12;17477:19;;17282:220;;;:::o;17508:366::-;;17671:67;17735:2;17730:3;17671:67;:::i;:::-;17664:74;;17747:93;17836:3;17747:93;:::i;:::-;17865:2;17860:3;17856:12;17849:19;;17654:220;;;:::o;17880:400::-;;18061:84;18143:1;18138:3;18061:84;:::i;:::-;18054:91;;18154:93;18243:3;18154:93;:::i;:::-;18272:1;18267:3;18263:11;18256:18;;18044:236;;;:::o;18286:366::-;;18449:67;18513:2;18508:3;18449:67;:::i;:::-;18442:74;;18525:93;18614:3;18525:93;:::i;:::-;18643:2;18638:3;18634:12;18627:19;;18432:220;;;:::o;18658:402::-;;18839:85;18921:2;18916:3;18839:85;:::i;:::-;18832:92;;18933:93;19022:3;18933:93;:::i;:::-;19051:2;19046:3;19042:12;19035:19;;18822:238;;;:::o;19066:400::-;;19247:84;19329:1;19324:3;19247:84;:::i;:::-;19240:91;;19340:93;19429:3;19340:93;:::i;:::-;19458:1;19453:3;19449:11;19442:18;;19230:236;;;:::o;19472:366::-;;19635:67;19699:2;19694:3;19635:67;:::i;:::-;19628:74;;19711:93;19800:3;19711:93;:::i;:::-;19829:2;19824:3;19820:12;19813:19;;19618:220;;;:::o;19844:366::-;;20007:67;20071:2;20066:3;20007:67;:::i;:::-;20000:74;;20083:93;20172:3;20083:93;:::i;:::-;20201:2;20196:3;20192:12;20185:19;;19990:220;;;:::o;20216:366::-;;20379:67;20443:2;20438:3;20379:67;:::i;:::-;20372:74;;20455:93;20544:3;20455:93;:::i;:::-;20573:2;20568:3;20564:12;20557:19;;20362:220;;;:::o;20588:402::-;;20769:85;20851:2;20846:3;20769:85;:::i;:::-;20762:92;;20863:93;20952:3;20863:93;:::i;:::-;20981:2;20976:3;20972:12;20965:19;;20752:238;;;:::o;20996:366::-;;21159:67;21223:2;21218:3;21159:67;:::i;:::-;21152:74;;21235:93;21324:3;21235:93;:::i;:::-;21353:2;21348:3;21344:12;21337:19;;21142:220;;;:::o;21368:108::-;21445:24;21463:5;21445:24;:::i;:::-;21440:3;21433:37;21423:53;;:::o;21482:118::-;21569:24;21587:5;21569:24;:::i;:::-;21564:3;21557:37;21547:53;;:::o;21606:1235::-;;22048:95;22139:3;22130:6;22048:95;:::i;:::-;22041:102;;22160:95;22251:3;22242:6;22160:95;:::i;:::-;22153:102;;22272:95;22363:3;22354:6;22272:95;:::i;:::-;22265:102;;22384:95;22475:3;22466:6;22384:95;:::i;:::-;22377:102;;22496:95;22587:3;22578:6;22496:95;:::i;:::-;22489:102;;22608:95;22699:3;22690:6;22608:95;:::i;:::-;22601:102;;22720:95;22811:3;22802:6;22720:95;:::i;:::-;22713:102;;22832:3;22825:10;;22030:811;;;;;;;;;;:::o;22847:3397::-;;24146:148;24290:3;24146:148;:::i;:::-;24139:155;;24311:148;24455:3;24311:148;:::i;:::-;24304:155;;24476:95;24567:3;24558:6;24476:95;:::i;:::-;24469:102;;24588:148;24732:3;24588:148;:::i;:::-;24581:155;;24753:148;24897:3;24753:148;:::i;:::-;24746:155;;24918:92;25006:3;24997:6;24918:92;:::i;:::-;24911:99;;25027:148;25171:3;25027:148;:::i;:::-;25020:155;;25192:148;25336:3;25192:148;:::i;:::-;25185:155;;25357:92;25445:3;25436:6;25357:92;:::i;:::-;25350:99;;25466:148;25610:3;25466:148;:::i;:::-;25459:155;;25631:148;25775:3;25631:148;:::i;:::-;25624:155;;25796:92;25884:3;25875:6;25796:92;:::i;:::-;25789:99;;25905:148;26049:3;25905:148;:::i;:::-;25898:155;;26070:148;26214:3;26070:148;:::i;:::-;26063:155;;26235:3;26228:10;;24128:2116;;;;;;;:::o;26250:541::-;;26505:148;26649:3;26505:148;:::i;:::-;26498:155;;26670:95;26761:3;26752:6;26670:95;:::i;:::-;26663:102;;26782:3;26775:10;;26487:304;;;;:::o;26797:222::-;;26928:2;26917:9;26913:18;26905:26;;26941:71;27009:1;26998:9;26994:17;26985:6;26941:71;:::i;:::-;26895:124;;;;:::o;27025:640::-;;27258:3;27247:9;27243:19;27235:27;;27272:71;27340:1;27329:9;27325:17;27316:6;27272:71;:::i;:::-;27353:72;27421:2;27410:9;27406:18;27397:6;27353:72;:::i;:::-;27435;27503:2;27492:9;27488:18;27479:6;27435:72;:::i;:::-;27554:9;27548:4;27544:20;27539:2;27528:9;27524:18;27517:48;27582:76;27653:4;27644:6;27582:76;:::i;:::-;27574:84;;27225:440;;;;;;;:::o;27671:409::-;;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:126;28068:4;28059:6;27947:126;:::i;:::-;27939:134;;27837:243;;;;:::o;28086:373::-;;28267:2;28256:9;28252:18;28244:26;;28316:9;28310:4;28306:20;28302:1;28291:9;28287:17;28280:47;28344:108;28447:4;28438:6;28344:108;:::i;:::-;28336:116;;28234:225;;;;:::o;28465:210::-;;28590:2;28579:9;28575:18;28567:26;;28603:65;28665:1;28654:9;28650:17;28641:6;28603:65;:::i;:::-;28557:118;;;;:::o;28681:313::-;;28832:2;28821:9;28817:18;28809:26;;28881:9;28875:4;28871:20;28867:1;28856:9;28852:17;28845:47;28909:78;28982:4;28973:6;28909:78;:::i;:::-;28901:86;;28799:195;;;;:::o;29000:715::-;;29247:2;29236:9;29232:18;29224:26;;29296:9;29290:4;29286:20;29282:1;29271:9;29267:17;29260:47;29324:78;29397:4;29388:6;29324:78;:::i;:::-;29316:86;;29449:9;29443:4;29439:20;29434:2;29423:9;29419:18;29412:48;29477:78;29550:4;29541:6;29477:78;:::i;:::-;29469:86;;29602:9;29596:4;29592:20;29587:2;29576:9;29572:18;29565:48;29630:78;29703:4;29694:6;29630:78;:::i;:::-;29622:86;;29214:501;;;;;;:::o;29721:419::-;;29925:2;29914:9;29910:18;29902:26;;29974:9;29968:4;29964:20;29960:1;29949:9;29945:17;29938:47;30002:131;30128:4;30002:131;:::i;:::-;29994:139;;29892:248;;;:::o;30146:419::-;;30350:2;30339:9;30335:18;30327:26;;30399:9;30393:4;30389:20;30385:1;30374:9;30370:17;30363:47;30427:131;30553:4;30427:131;:::i;:::-;30419:139;;30317:248;;;:::o;30571:419::-;;30775:2;30764:9;30760:18;30752:26;;30824:9;30818:4;30814:20;30810:1;30799:9;30795:17;30788:47;30852:131;30978:4;30852:131;:::i;:::-;30844:139;;30742:248;;;:::o;30996:419::-;;31200:2;31189:9;31185:18;31177:26;;31249:9;31243:4;31239:20;31235:1;31224:9;31220:17;31213:47;31277:131;31403:4;31277:131;:::i;:::-;31269:139;;31167:248;;;:::o;31421:419::-;;31625:2;31614:9;31610:18;31602:26;;31674:9;31668:4;31664:20;31660:1;31649:9;31645:17;31638:47;31702:131;31828:4;31702:131;:::i;:::-;31694:139;;31592:248;;;:::o;31846:419::-;;32050:2;32039:9;32035:18;32027:26;;32099:9;32093:4;32089:20;32085:1;32074:9;32070:17;32063:47;32127:131;32253:4;32127:131;:::i;:::-;32119:139;;32017:248;;;:::o;32271:419::-;;32475:2;32464:9;32460:18;32452:26;;32524:9;32518:4;32514:20;32510:1;32499:9;32495:17;32488:47;32552:131;32678:4;32552:131;:::i;:::-;32544:139;;32442:248;;;:::o;32696:419::-;;32900:2;32889:9;32885:18;32877:26;;32949:9;32943:4;32939:20;32935:1;32924:9;32920:17;32913:47;32977:131;33103:4;32977:131;:::i;:::-;32969:139;;32867:248;;;:::o;33121:419::-;;33325:2;33314:9;33310:18;33302:26;;33374:9;33368:4;33364:20;33360:1;33349:9;33345:17;33338:47;33402:131;33528:4;33402:131;:::i;:::-;33394:139;;33292:248;;;:::o;33546:419::-;;33750:2;33739:9;33735:18;33727:26;;33799:9;33793:4;33789:20;33785:1;33774:9;33770:17;33763:47;33827:131;33953:4;33827:131;:::i;:::-;33819:139;;33717:248;;;:::o;33971:419::-;;34175:2;34164:9;34160:18;34152:26;;34224:9;34218:4;34214:20;34210:1;34199:9;34195:17;34188:47;34252:131;34378:4;34252:131;:::i;:::-;34244:139;;34142:248;;;:::o;34396:419::-;;34600:2;34589:9;34585:18;34577:26;;34649:9;34643:4;34639:20;34635:1;34624:9;34620:17;34613:47;34677:131;34803:4;34677:131;:::i;:::-;34669:139;;34567:248;;;:::o;34821:419::-;;35025:2;35014:9;35010:18;35002:26;;35074:9;35068:4;35064:20;35060:1;35049:9;35045:17;35038:47;35102:131;35228:4;35102:131;:::i;:::-;35094:139;;34992:248;;;:::o;35246:419::-;;35450:2;35439:9;35435:18;35427:26;;35499:9;35493:4;35489:20;35485:1;35474:9;35470:17;35463:47;35527:131;35653:4;35527:131;:::i;:::-;35519:139;;35417:248;;;:::o;35671:419::-;;35875:2;35864:9;35860:18;35852:26;;35924:9;35918:4;35914:20;35910:1;35899:9;35895:17;35888:47;35952:131;36078:4;35952:131;:::i;:::-;35944:139;;35842:248;;;:::o;36096:419::-;;36300:2;36289:9;36285:18;36277:26;;36349:9;36343:4;36339:20;36335:1;36324:9;36320:17;36313:47;36377:131;36503:4;36377:131;:::i;:::-;36369:139;;36267:248;;;:::o;36521:419::-;;36725:2;36714:9;36710:18;36702:26;;36774:9;36768:4;36764:20;36760:1;36749:9;36745:17;36738:47;36802:131;36928:4;36802:131;:::i;:::-;36794:139;;36692:248;;;:::o;36946:419::-;;37150:2;37139:9;37135:18;37127:26;;37199:9;37193:4;37189:20;37185:1;37174:9;37170:17;37163:47;37227:131;37353:4;37227:131;:::i;:::-;37219:139;;37117:248;;;:::o;37371:419::-;;37575:2;37564:9;37560:18;37552:26;;37624:9;37618:4;37614:20;37610:1;37599:9;37595:17;37588:47;37652:131;37778:4;37652:131;:::i;:::-;37644:139;;37542:248;;;:::o;37796:222::-;;37927:2;37916:9;37912:18;37904:26;;37940:71;38008:1;37997:9;37993:17;37984:6;37940:71;:::i;:::-;37894:124;;;;:::o;38024:129::-;;38085:20;;:::i;:::-;38075:30;;38114:33;38142:4;38134:6;38114:33;:::i;:::-;38065:88;;;:::o;38159:75::-;;38225:2;38219:9;38209:19;;38199:35;:::o;38240:307::-;;38391:18;38383:6;38380:30;38377:2;;;38413:18;;:::i;:::-;38377:2;38451:29;38473:6;38451:29;:::i;:::-;38443:37;;38535:4;38529;38525:15;38517:23;;38306:241;;;:::o;38553:109::-;;38652:3;38644:11;;38634:28;;;:::o;38668:132::-;;38758:3;38750:11;;38788:4;38783:3;38779:14;38771:22;;38740:60;;;:::o;38806:141::-;;38878:3;38870:11;;38901:3;38898:1;38891:14;38935:4;38932:1;38922:18;38914:26;;38860:87;;;:::o;38953:115::-;;39057:4;39047:14;;39036:32;;;:::o;39074:114::-;;39175:5;39169:12;39159:22;;39148:40;;;:::o;39194:98::-;;39279:5;39273:12;39263:22;;39252:40;;;:::o;39298:99::-;;39384:5;39378:12;39368:22;;39357:40;;;:::o;39403:122::-;;39514:4;39509:3;39505:14;39497:22;;39487:38;;;:::o;39531:113::-;;39633:4;39628:3;39624:14;39616:22;;39606:38;;;:::o;39650:154::-;;39795:3;39780:18;;39770:34;;;;:::o;39810:184::-;;39943:6;39938:3;39931:19;39983:4;39978:3;39974:14;39959:29;;39921:73;;;;:::o;40000:168::-;;40117:6;40112:3;40105:19;40157:4;40152:3;40148:14;40133:29;;40095:73;;;;:::o;40174:159::-;;40282:6;40277:3;40270:19;40322:4;40317:3;40313:14;40298:29;;40260:73;;;;:::o;40339:169::-;;40457:6;40452:3;40445:19;40497:4;40492:3;40488:14;40473:29;;40435:73;;;;:::o;40514:148::-;;40653:3;40638:18;;40628:34;;;;:::o;40668:305::-;;40727:20;40745:1;40727:20;:::i;:::-;40722:25;;40761:20;40779:1;40761:20;:::i;:::-;40756:25;;40915:1;40847:66;40843:74;40840:1;40837:81;40834:2;;;40921:18;;:::i;:::-;40834:2;40965:1;40962;40958:9;40951:16;;40712:261;;;;:::o;40979:185::-;;41036:20;41054:1;41036:20;:::i;:::-;41031:25;;41070:20;41088:1;41070:20;:::i;:::-;41065:25;;41109:1;41099:2;;41114:18;;:::i;:::-;41099:2;41156:1;41153;41149:9;41144:14;;41021:143;;;;:::o;41170:348::-;;41233:20;41251:1;41233:20;:::i;:::-;41228:25;;41267:20;41285:1;41267:20;:::i;:::-;41262:25;;41455:1;41387:66;41383:74;41380:1;41377:81;41372:1;41365:9;41358:17;41354:105;41351:2;;;41462:18;;:::i;:::-;41351:2;41510:1;41507;41503:9;41492:20;;41218:300;;;;:::o;41524:191::-;;41584:20;41602:1;41584:20;:::i;:::-;41579:25;;41618:20;41636:1;41618:20;:::i;:::-;41613:25;;41657:1;41654;41651:8;41648:2;;;41662:18;;:::i;:::-;41648:2;41707:1;41704;41700:9;41692:17;;41569:146;;;;:::o;41721:96::-;;41787:24;41805:5;41787:24;:::i;:::-;41776:35;;41766:51;;;:::o;41823:90::-;;41900:5;41893:13;41886:21;41875:32;;41865:48;;;:::o;41919:149::-;;41995:66;41988:5;41984:78;41973:89;;41963:105;;;:::o;42074:126::-;;42151:42;42144:5;42140:54;42129:65;;42119:81;;;:::o;42206:77::-;;42272:5;42261:16;;42251:32;;;:::o;42289:154::-;42373:6;42368:3;42363;42350:30;42435:1;42426:6;42421:3;42417:16;42410:27;42340:103;;;:::o;42449:307::-;42517:1;42527:113;42541:6;42538:1;42535:13;42527:113;;;42626:1;42621:3;42617:11;42611:18;42607:1;42602:3;42598:11;42591:39;42563:2;42560:1;42556:10;42551:15;;42527:113;;;42658:6;42655:1;42652:13;42649:2;;;42738:1;42729:6;42724:3;42720:16;42713:27;42649:2;42498:258;;;;:::o;42762:320::-;;42843:1;42837:4;42833:12;42823:22;;42890:1;42884:4;42880:12;42911:18;42901:2;;42967:4;42959:6;42955:17;42945:27;;42901:2;43029;43021:6;43018:14;42998:18;42995:38;42992:2;;;43048:18;;:::i;:::-;42992:2;42813:269;;;;:::o;43088:281::-;43171:27;43193:4;43171:27;:::i;:::-;43163:6;43159:40;43301:6;43289:10;43286:22;43265:18;43253:10;43250:34;43247:62;43244:2;;;43312:18;;:::i;:::-;43244:2;43352:10;43348:2;43341:22;43131:238;;;:::o;43375:233::-;;43437:24;43455:5;43437:24;:::i;:::-;43428:33;;43483:66;43476:5;43473:77;43470:2;;;43553:18;;:::i;:::-;43470:2;43600:1;43593:5;43589:13;43582:20;;43418:190;;;:::o;43614:176::-;;43663:20;43681:1;43663:20;:::i;:::-;43658:25;;43697:20;43715:1;43697:20;:::i;:::-;43692:25;;43736:1;43726:2;;43741:18;;:::i;:::-;43726:2;43782:1;43779;43775:9;43770:14;;43648:142;;;;:::o;43796:180::-;43844:77;43841:1;43834:88;43941:4;43938:1;43931:15;43965:4;43962:1;43955:15;43982:180;44030:77;44027:1;44020:88;44127:4;44124:1;44117:15;44151:4;44148:1;44141:15;44168:180;44216:77;44213:1;44206:88;44313:4;44310:1;44303:15;44337:4;44334:1;44327:15;44354:180;44402:77;44399:1;44392:88;44499:4;44496:1;44489:15;44523:4;44520:1;44513:15;44540:102;;44632:2;44628:7;44623:2;44616:5;44612:14;44608:28;44598:38;;44588:54;;;:::o;44648:315::-;44788:66;44784:1;44776:6;44772:14;44765:90;44889:66;44884:2;44876:6;44872:15;44865:91;44754:209;:::o;44969:230::-;45109:34;45105:1;45097:6;45093:14;45086:58;45178:13;45173:2;45165:6;45161:15;45154:38;45075:124;:::o;45205:237::-;45345:34;45341:1;45333:6;45329:14;45322:58;45414:20;45409:2;45401:6;45397:15;45390:45;45311:131;:::o;45448:214::-;45588:66;45584:1;45576:6;45572:14;45565:90;45554:108;:::o;45668:315::-;45808:66;45804:1;45796:6;45792:14;45785:90;45909:66;45904:2;45896:6;45892:15;45885:91;45774:209;:::o;45989:225::-;46129:34;46125:1;46117:6;46113:14;46106:58;46198:8;46193:2;46185:6;46181:15;46174:33;46095:119;:::o;46220:214::-;46360:66;46356:1;46348:6;46344:14;46337:90;46326:108;:::o;46440:178::-;46580:30;46576:1;46568:6;46564:14;46557:54;46546:72;:::o;46624:214::-;46764:66;46760:1;46752:6;46748:14;46741:90;46730:108;:::o;46844:214::-;46984:66;46980:1;46972:6;46968:14;46961:90;46950:108;:::o;47064:223::-;47204:34;47200:1;47192:6;47188:14;47181:58;47273:6;47268:2;47260:6;47256:15;47249:31;47170:117;:::o;47293:175::-;47433:27;47429:1;47421:6;47417:14;47410:51;47399:69;:::o;47474:231::-;47614:34;47610:1;47602:6;47598:14;47591:58;47683:14;47678:2;47670:6;47666:15;47659:39;47580:125;:::o;47711:243::-;47851:34;47847:1;47839:6;47835:14;47828:58;47920:26;47915:2;47907:6;47903:15;47896:51;47817:137;:::o;47960:229::-;48100:34;48096:1;48088:6;48084:14;48077:58;48169:12;48164:2;48156:6;48152:15;48145:37;48066:123;:::o;48195:228::-;48335:34;48331:1;48323:6;48319:14;48312:58;48404:11;48399:2;48391:6;48387:15;48380:36;48301:122;:::o;48429:214::-;48569:66;48565:1;48557:6;48553:14;48546:90;48535:108;:::o;48649:182::-;48789:34;48785:1;48777:6;48773:14;48766:58;48755:76;:::o;48837:231::-;48977:34;48973:1;48965:6;48961:14;48954:58;49046:14;49041:2;49033:6;49029:15;49022:39;48943:125;:::o;49074:182::-;49214:34;49210:1;49202:6;49198:14;49191:58;49180:76;:::o;49262:228::-;49402:34;49398:1;49390:6;49386:14;49379:58;49471:11;49466:2;49458:6;49454:15;49447:36;49368:122;:::o;49496:144::-;49632:4;49628:1;49620:6;49616:14;49609:28;49602:38;:::o;49642:208::-;49778:34;49774:1;49766:6;49762:14;49755:58;49843:3;49838:2;49830:6;49826:15;49819:28;49748:102;:::o;49852:171::-;49988:31;49984:1;49976:6;49972:14;49965:55;49958:65;:::o;50025:206::-;50161:66;50157:1;50149:6;50145:14;50138:90;50131:100;:::o;50233:224::-;50369:34;50365:1;50357:6;50353:14;50346:58;50434:19;50429:2;50421:6;50417:15;50410:44;50339:118;:::o;50459:219::-;50595:34;50591:1;50583:6;50579:14;50572:58;50660:14;50655:2;50647:6;50643:15;50636:39;50565:113;:::o;50680:154::-;50816:14;50812:1;50804:6;50800:14;50793:38;50786:48;:::o;50836:303::-;50972:66;50968:1;50960:6;50956:14;50949:90;51069:66;51064:2;51056:6;51052:15;51045:91;50942:197;:::o;51141:173::-;51277:33;51273:1;51265:6;51261:14;51254:57;51247:67;:::o;51316:114::-;51385:24;51403:5;51385:24;:::i;:::-;51378:5;51375:35;51365:2;;51424:1;51421;51414:12;51365:2;51359:71;:::o;51432:108::-;51498:21;51513:5;51498:21;:::i;:::-;51491:5;51488:32;51478:2;;51534:1;51531;51524:12;51478:2;51472:68;:::o;51542:112::-;51610:23;51627:5;51610:23;:::i;:::-;51603:5;51600:34;51590:2;;51648:1;51645;51638:12;51590:2;51584:70;:::o;51656:114::-;51725:24;51743:5;51725:24;:::i;:::-;51718:5;51715:35;51705:2;;51764:1;51761;51754:12;51705:2;51699:71;:::o
Swarm Source
ipfs://b34941d6fab33e0f73b19e7cb49df8081e3b1955d32c16d84bf9247e9850dd64
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.