Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
2,222 CTZ
Holders
614
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
44 CTZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CitizenZero
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-05 */ //SPDX-License-Identifier: GPL 3 pragma solidity >=0.8.0 <0.9.0; library Counters { struct Counter { uint256 _value; } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } contract TokenAccessControl { bool public paused = false; address public owner; address public newContractOwner; mapping(address => bool) public authorizedContracts; event Pause(); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { owner = msg.sender; } modifier ifNotPaused() { require(!paused, "contract is paused"); _; } modifier onlyOwner() { require(msg.sender == owner, "caller is not an owner"); _; } modifier onlyAuthorizedUser() { require( authorizedContracts[msg.sender], "caller is not an authorized user" ); _; } modifier onlyOwnerOrAuthorizedUser() { require( authorizedContracts[msg.sender] || msg.sender == owner, "caller is not an authorized user or an owner" ); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0)); newContractOwner = _newOwner; } function acceptOwnership() public ifNotPaused { require(msg.sender == newContractOwner); emit OwnershipTransferred(owner, newContractOwner); owner = newContractOwner; newContractOwner = address(0); } function setAuthorizedUser(address _operator, bool _approve) public onlyOwner { if (_approve) { authorizedContracts[_operator] = true; } else { delete authorizedContracts[_operator]; } } function setPause(bool _paused) public onlyOwner { paused = _paused; if (paused) { emit Pause(); } } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); } library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v5.0._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v5.0._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v5.0._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v5.0._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v5.0._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string( abi.encodePacked( value < 0 ? "-" : "", toString(SignedMath.abs(value)) ) ); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC2981 is IERC165 { function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function royaltyInfo(uint256 tokenId, uint256 salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require( feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice" ); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require( feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice" ); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } interface IERC721 is IERC165 { event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; 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 setApprovalForAll(address operator, bool approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC4906 is IERC165, IERC721 { event MetadataUpdate(uint256 _tokenId); event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } contract ERC721 is ERC165, IERC721 { string private _name; string private _symbol; string private _baseURI; mapping(uint256 => address) private _owners; mapping(address => uint256) private _balances; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor( string memory name_, string memory symbol_, string memory baseURI_ ) { _name = name_; _symbol = symbol_; _baseURI = baseURI_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function setBaseUri(string memory baseURI) internal virtual { _baseURI = baseURI; } function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: address zero is not a valid owner" ); return _balances[owner]; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual returns (string memory) { _requireMinted(tokenId); return bytes(_baseURI).length > 0 ? string(abi.encodePacked(_baseURI, Strings.toString(tokenId))) : ""; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not token owner or approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(msg.sender, operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(msg.sender, tokenId), "ERC721: caller is not token owner or approved" ); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require( _isApprovedOrOwner(msg.sender, tokenId), "ERC721: caller is not token owner or approved" ); _safeTransfer(from, to, tokenId, data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _ownerOf(tokenId) != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } 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, 1); require(!_exists(tokenId), "ERC721: token already minted"); unchecked { _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); owner = ERC721.ownerOf(tokenId); delete _tokenApprovals[tokenId]; unchecked { _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId, 1); require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner" ); delete _tokenApprovals[tokenId]; unchecked { _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (isContract(to)) { try IERC721Receiver(to).onERC721Received( msg.sender, from, tokenId, data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} function __unsafe_increaseBalance(address account, uint256 amount) internal { _balances[account] += amount; } function isContract(address account) internal view returns (bool) { return account.code.length > 0; } } contract CitizenZero is ERC721, TokenAccessControl, ERC2981, IERC4906 { using Counters for Counters.Counter; string private _contractURI; uint256 public mintLimit; uint64 public whitelistMintStart; uint64 public fcfsMintStart; uint64 public publicMintStart; uint64 public mintEnd; Counters.Counter private _tokenIdCounter; Counters.Counter private _orderCounter; mapping(uint256 => CitizenZeroData) private _citizenZeroData; mapping(address => bool) private _whitelist; mapping(address => bool) private _fcfs; mapping(address => uint16) private _mintedAmount; struct CitizenZeroData { string secretPhrase; uint256 orderNumber; uint16[] achievements; } constructor( string memory name_, string memory symbol_, string memory baseURI_, string memory contractURI_, uint64 whitelistMintStart_, uint64 fcfsMintStart_, uint64 publicMintStart_, uint64 mintEnd_, uint256 mintLimit_, address royaltyReceiver_, uint96 royaltyFeeNumerator_ ) ERC721(name_, symbol_, baseURI_) { _contractURI = contractURI_; whitelistMintStart = whitelistMintStart_; fcfsMintStart = fcfsMintStart_; publicMintStart = publicMintStart_; mintEnd = mintEnd_; mintLimit = mintLimit_; _setDefaultRoyalty(royaltyReceiver_, royaltyFeeNumerator_); _mintCitizenZero(msg.sender); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981, IERC165) returns (bool) { return ERC721.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId) || interfaceId == bytes4(0x49064906); } function batchMetadataUpdate(uint256 fromTokenId, uint256 toTokenId) public onlyOwnerOrAuthorizedUser { emit BatchMetadataUpdate(fromTokenId, toTokenId); } function metadataUpdate(uint256 tokenId) public { emit MetadataUpdate(tokenId); } function setDefaultRoyalty(address receiver, uint96 feeNumerator) public onlyOwner { _setDefaultRoyalty(receiver, feeNumerator); } function setWhitelistAddresses( address[] memory whitelistAddresses, bool approval ) public onlyOwnerOrAuthorizedUser { for (uint256 i = 0; i < whitelistAddresses.length; ++i) { _whitelist[whitelistAddresses[i]] = approval; } } function setFcfsAddresses(address[] memory fcfsAddresses, bool approval) public onlyOwnerOrAuthorizedUser { for (uint256 i = 0; i < fcfsAddresses.length; ++i) { _fcfs[fcfsAddresses[i]] = approval; } } function setUri(string memory baseURI) public onlyOwner { setBaseUri(baseURI); } function setContractUri(string memory contractUri) public onlyOwner { _contractURI = contractUri; } function contractURI() public view returns (string memory) { return _contractURI; } function totalSupply() public view virtual returns (uint256) { return _tokenIdCounter.current(); } function mintedAmount(address account) public view returns (uint16) { return _mintedAmount[account]; } function burn(uint256 tokenId) public virtual { require( _isApprovedOrOwner(msg.sender, tokenId), "ERC721: caller is not token owner or approved" ); _burn(tokenId); } function addAchievement(uint256 tokenId, uint16 achievementId) public onlyOwnerOrAuthorizedUser { _requireMinted(tokenId); _citizenZeroData[tokenId].achievements.push(achievementId); emit MetadataUpdate(tokenId); } function setSecretPhrase(uint256 tokenId, string memory secretPhrase) public onlyOwnerOrAuthorizedUser { _requireMinted(tokenId); _orderCounter.increment(); _citizenZeroData[tokenId] = CitizenZeroData( secretPhrase, _orderCounter.current(), _citizenZeroData[tokenId].achievements ); emit MetadataUpdate(tokenId); } function setMintTimes( uint64 _whitelistMintStart, uint64 _fcfsMintStart, uint64 _publicMintStart, uint64 _mintEnd ) public onlyOwner { whitelistMintStart = _whitelistMintStart; fcfsMintStart = _fcfsMintStart; publicMintStart = _publicMintStart; mintEnd = _mintEnd; } function getCitizenZeroData(uint256 tokenId) public view returns ( string memory secretPhrase, uint256 orderNumber, uint16[] memory achievements ) { _requireMinted(tokenId); return ( _citizenZeroData[tokenId].secretPhrase, _citizenZeroData[tokenId].orderNumber, _citizenZeroData[tokenId].achievements ); } function _mintCitizenZero(address to) internal { _tokenIdCounter.increment(); _mint(to, _tokenIdCounter.current()); } function mint() public ifNotPaused { require( block.timestamp < mintEnd, "CitizenZero: Mint has already ended!" ); require( this.totalSupply() < mintLimit, "CitizenZero: Mint limit reached!" ); require( _mintedAmount[msg.sender] < 1, "CitizenZero: Mint limit already reached for this wallet!" ); require( msg.sender == tx.origin, "CitizenZero: Mint is allowed only for wallets!" ); _mintedAmount[msg.sender]++; if (block.timestamp > publicMintStart) { _mintCitizenZero(msg.sender); } else if ( block.timestamp > fcfsMintStart && _fcfs[msg.sender] == true ) { _mintCitizenZero(msg.sender); } else if ( block.timestamp > whitelistMintStart && _whitelist[msg.sender] == true ) { _mintCitizenZero(msg.sender); } else { revert("CitizenZero: You are not eligible for mint!"); } } function isWhitelisted(address account) public view returns (bool) { return _whitelist[account]; } function isFcfs(address account) public view returns (bool) { return _fcfs[account]; } function withdraw(address contractAddress, uint256 amount) public onlyOwner { if (contractAddress == address(0)) { payable(msg.sender).transfer(amount); } else { if (amount == 0) amount = IERC20(contractAddress).balanceOf(address(this)); IERC20(contractAddress).transfer(msg.sender, amount); } } receive() external payable {} fallback() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"string","name":"contractURI_","type":"string"},{"internalType":"uint64","name":"whitelistMintStart_","type":"uint64"},{"internalType":"uint64","name":"fcfsMintStart_","type":"uint64"},{"internalType":"uint64","name":"publicMintStart_","type":"uint64"},{"internalType":"uint64","name":"mintEnd_","type":"uint64"},{"internalType":"uint256","name":"mintLimit_","type":"uint256"},{"internalType":"address","name":"royaltyReceiver_","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator_","type":"uint96"}],"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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","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":[],"name":"Pause","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint16","name":"achievementId","type":"uint16"}],"name":"addAchievement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"batchMetadataUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fcfsMintStart","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCitizenZeroData","outputs":[{"internalType":"string","name":"secretPhrase","type":"string"},{"internalType":"uint256","name":"orderNumber","type":"uint256"},{"internalType":"uint16[]","name":"achievements","type":"uint16[]"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isFcfs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"metadataUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintEnd","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"mintedAmount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newContractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintStart","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"setAuthorizedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"fcfsAddresses","type":"address[]"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"setFcfsAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_whitelistMintStart","type":"uint64"},{"internalType":"uint64","name":"_fcfsMintStart","type":"uint64"},{"internalType":"uint64","name":"_publicMintStart","type":"uint64"},{"internalType":"uint64","name":"_mintEnd","type":"uint64"}],"name":"setMintTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"secretPhrase","type":"string"}],"name":"setSecretPhrase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelistAddresses","type":"address[]"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"setWhitelistAddresses","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":"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":[],"name":"whitelistMintStart","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040525f60075f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b5060405162006ca838038062006ca883398181016040528101906200004f919062000929565b8a8a8a825f908162000062919062000cd9565b50816001908162000074919062000cd9565b50806002908162000086919062000cd9565b5050505033600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600c9081620000dc919062000cd9565b5086600e5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555085600e60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555084600e60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600e60186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600d81905550620001998282620001bb60201b60201c565b620001aa336200035960201b60201c565b505050505050505050505062000fab565b620001cb6200039160201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156200022c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002239062000e41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200029d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002949062000eaf565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6200036b600f6200039a60201b60201c565b6200038e8162000382600f620003ae60201b60201c565b620003ba60201b60201c565b50565b5f612710905090565b6001815f015f828254019250508190555050565b5f815f01549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200042b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004229062000f1d565b60405180910390fd5b6200043c81620005f660201b60201c565b156200047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004769062000f8b565b60405180910390fd5b620004945f838360016200063e60201b60201c565b620004a581620005f660201b60201c565b15620004e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004df9062000f8b565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620005f25f838360016200064460201b60201c565b5050565b5f8073ffffffffffffffffffffffffffffffffffffffff166200061f836200064a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620006e4826200069c565b810181811067ffffffffffffffff82111715620007065762000705620006ac565b5b80604052505050565b5f6200071a62000683565b9050620007288282620006d9565b919050565b5f67ffffffffffffffff8211156200074a5762000749620006ac565b5b62000755826200069c565b9050602081019050919050565b5f5b838110156200078157808201518184015260208101905062000764565b5f8484015250505050565b5f620007a26200079c846200072d565b6200070f565b905082815260208101848484011115620007c157620007c062000698565b5b620007ce84828562000762565b509392505050565b5f82601f830112620007ed57620007ec62000694565b5b8151620007ff8482602086016200078c565b91505092915050565b5f67ffffffffffffffff82169050919050565b620008268162000808565b811462000831575f80fd5b50565b5f8151905062000844816200081b565b92915050565b5f819050919050565b6200085e816200084a565b811462000869575f80fd5b50565b5f815190506200087c8162000853565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620008ad8262000882565b9050919050565b620008bf81620008a1565b8114620008ca575f80fd5b50565b5f81519050620008dd81620008b4565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6200090581620008e3565b811462000910575f80fd5b50565b5f815190506200092381620008fa565b92915050565b5f805f805f805f805f805f6101608c8e0312156200094c576200094b6200068c565b5b5f8c015167ffffffffffffffff8111156200096c576200096b62000690565b5b6200097a8e828f01620007d6565b9b505060208c015167ffffffffffffffff8111156200099e576200099d62000690565b5b620009ac8e828f01620007d6565b9a505060408c015167ffffffffffffffff811115620009d057620009cf62000690565b5b620009de8e828f01620007d6565b99505060608c015167ffffffffffffffff81111562000a025762000a0162000690565b5b62000a108e828f01620007d6565b985050608062000a238e828f0162000834565b97505060a062000a368e828f0162000834565b96505060c062000a498e828f0162000834565b95505060e062000a5c8e828f0162000834565b94505061010062000a708e828f016200086c565b93505061012062000a848e828f01620008cd565b92505061014062000a988e828f0162000913565b9150509295989b509295989b9093969950565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000afa57607f821691505b60208210810362000b105762000b0f62000ab5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b37565b62000b80868362000b37565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000bc162000bbb62000bb5846200084a565b62000b98565b6200084a565b9050919050565b5f819050919050565b62000bdc8362000ba1565b62000bf462000beb8262000bc8565b84845462000b43565b825550505050565b5f90565b62000c0a62000bfc565b62000c1781848462000bd1565b505050565b5b8181101562000c3e5762000c325f8262000c00565b60018101905062000c1d565b5050565b601f82111562000c8d5762000c578162000b16565b62000c628462000b28565b8101602085101562000c72578190505b62000c8a62000c818562000b28565b83018262000c1c565b50505b505050565b5f82821c905092915050565b5f62000caf5f198460080262000c92565b1980831691505092915050565b5f62000cc9838362000c9e565b9150826002028217905092915050565b62000ce48262000aab565b67ffffffffffffffff81111562000d005762000cff620006ac565b5b62000d0c825462000ae2565b62000d1982828562000c42565b5f60209050601f83116001811462000d4f575f841562000d3a578287015190505b62000d46858262000cbc565b86555062000db5565b601f19841662000d5f8662000b16565b5f5b8281101562000d885784890151825560018201915060208501945060208101905062000d61565b8683101562000da8578489015162000da4601f89168262000c9e565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c206578636565645f8201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b5f62000e29602a8362000dbd565b915062000e368262000dcd565b604082019050919050565b5f6020820190508181035f83015262000e5a8162000e1b565b9050919050565b7f455243323938313a20696e76616c6964207265636569766572000000000000005f82015250565b5f62000e9760198362000dbd565b915062000ea48262000e61565b602082019050919050565b5f6020820190508181035f83015262000ec88162000e89565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f62000f0560208362000dbd565b915062000f128262000ecf565b602082019050919050565b5f6020820190508181035f83015262000f368162000ef7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f62000f73601c8362000dbd565b915062000f808262000f3d565b602082019050919050565b5f6020820190508181035f83015262000fa48162000f65565b9050919050565b615cef8062000fb95f395ff3fe60806040526004361061028b575f3560e01c806395d89b4111610159578063d5b9221b116100c0578063ea2b4ab211610079578063ea2b4ab2146109b7578063eafd4891146109e1578063f2fde38b14610a0b578063f3fef3a314610a33578063fbbf8cc314610a5b578063fdda339114610a9757610292565b8063d5b9221b1461089d578063d7afc640146108d9578063e0b65d6514610901578063e4f52e3d14610929578063e8a3d48514610951578063e985e9c51461097b57610292565b8063b88d4fde11610112578063b88d4fde14610799578063bedb86fb146107c1578063c758f600146107e9578063c87b56dd14610811578063ccb4807b1461084d578063d16bc9ae1461087557610292565b806395d89b41146106a5578063996517cf146106cf5780639b642de1146106f9578063a22cb46514610721578063a249225e14610749578063a8d9bb771461077157610292565b80633af32abf116101fd57806370559664116101b657806370559664146105ad57806370a08231146105e9578063715018a61461062557806379ba50971461063b5780638cfec4c0146106515780638da5cb5b1461067b57610292565b80633af32abf1461049357806342842e0e146104cf57806342966c68146104f75780635c975abb1461051f5780636352211e146105495780636a1c34fb1461058557610292565b80630de959cc1161024f5780630de959cc146103865780631249c58b146103b057806318160ddd146103c657806323b872dd146103f05780632a55205a146104185780632c72ef771461045557610292565b806301ffc9a71461029457806304634d8d146102d057806306fdde03146102f8578063081812fc14610322578063095ea7b31461035e57610292565b3661029257005b005b34801561029f575f80fd5b506102ba60048036038101906102b59190614115565b610ac1565b6040516102c7919061415a565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061420e565b610b31565b005b348015610303575f80fd5b5061030c610bcf565b60405161031991906142d6565b60405180910390f35b34801561032d575f80fd5b5061034860048036038101906103439190614329565b610c5e565b6040516103559190614363565b60405180910390f35b348015610369575f80fd5b50610384600480360381019061037f919061437c565b610ca0565b005b348015610391575f80fd5b5061039a610da8565b6040516103a79190614363565b60405180910390f35b3480156103bb575f80fd5b506103c4610dcd565b005b3480156103d1575f80fd5b506103da611234565b6040516103e791906143c9565b60405180910390f35b3480156103fb575f80fd5b50610416600480360381019061041191906143e2565b611244565b005b348015610423575f80fd5b5061043e60048036038101906104399190614432565b61129d565b60405161044c929190614470565b60405180910390f35b348015610460575f80fd5b5061047b60048036038101906104769190614329565b611479565b60405161048a9392919061455b565b60405180910390f35b34801561049e575f80fd5b506104b960048036038101906104b4919061459e565b6115d1565b6040516104c6919061415a565b60405180910390f35b3480156104da575f80fd5b506104f560048036038101906104f091906143e2565b611623565b005b348015610502575f80fd5b5061051d60048036038101906105189190614329565b611642565b005b34801561052a575f80fd5b50610533611697565b604051610540919061415a565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a9190614329565b6116a9565b60405161057c9190614363565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190614329565b61172d565b005b3480156105b8575f80fd5b506105d360048036038101906105ce919061459e565b611767565b6040516105e0919061415a565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a919061459e565b6117b9565b60405161061c91906143c9565b60405180910390f35b348015610630575f80fd5b5061063961186d565b005b348015610646575f80fd5b5061064f6119bc565b005b34801561065c575f80fd5b50610665611ba4565b60405161067291906145eb565b60405180910390f35b348015610686575f80fd5b5061068f611bbe565b60405161069c9190614363565b60405180910390f35b3480156106b0575f80fd5b506106b9611be4565b6040516106c691906142d6565b60405180910390f35b3480156106da575f80fd5b506106e3611c74565b6040516106f091906143c9565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a9190614730565b611c7a565b005b34801561072c575f80fd5b50610747600480360381019061074291906147a1565b611d16565b005b348015610754575f80fd5b5061076f600480360381019061076a91906147a1565b611d25565b005b34801561077c575f80fd5b50610797600480360381019061079291906148a3565b611e66565b005b3480156107a4575f80fd5b506107bf60048036038101906107ba919061499b565b611fd0565b005b3480156107cc575f80fd5b506107e760048036038101906107e29190614a1b565b61202b565b005b3480156107f4575f80fd5b5061080f600480360381019061080a9190614432565b612118565b005b34801561081c575f80fd5b5061083760048036038101906108329190614329565b612236565b60405161084491906142d6565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190614730565b61229d565b005b348015610880575f80fd5b5061089b600480360381019061089691906148a3565b612340565b005b3480156108a8575f80fd5b506108c360048036038101906108be919061459e565b6124aa565b6040516108d0919061415a565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190614a70565b6124c7565b005b34801561090c575f80fd5b5061092760048036038101906109229190614ad8565b612646565b005b348015610934575f80fd5b5061094f600480360381019061094a9190614b3c565b61277f565b005b34801561095c575f80fd5b506109656129a8565b60405161097291906142d6565b60405180910390f35b348015610986575f80fd5b506109a1600480360381019061099c9190614b96565b612a38565b6040516109ae919061415a565b60405180910390f35b3480156109c2575f80fd5b506109cb612ac6565b6040516109d891906145eb565b60405180910390f35b3480156109ec575f80fd5b506109f5612ae0565b604051610a0291906145eb565b60405180910390f35b348015610a16575f80fd5b50610a316004803603810190610a2c919061459e565b612afa565b005b348015610a3e575f80fd5b50610a596004803603810190610a54919061437c565b612c04565b005b348015610a66575f80fd5b50610a816004803603810190610a7c919061459e565b612e13565b604051610a8e9190614be3565b60405180910390f35b348015610aa2575f80fd5b50610aab612e66565b604051610ab891906145eb565b60405180910390f35b5f610acb82612e7f565b80610adb5750610ada82612f60565b5b80610b2a5750634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614c46565b60405180910390fd5b610bcb8282612fd9565b5050565b60605f8054610bdd90614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0990614c91565b8015610c545780601f10610c2b57610100808354040283529160200191610c54565b820191905f5260205f20905b815481529060010190602001808311610c3757829003601f168201915b5050505050905090565b5f610c6882613169565b60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610caa826116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190614d31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d5a5750610d598133612a38565b5b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614dbf565b60405180910390fd5b610da383836131b4565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900460ff1615610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390614e27565b60405180910390fd5b600e60189054906101000a900467ffffffffffffffff1667ffffffffffffffff164210610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614eb5565b60405180910390fd5b600d543073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eee9190614ee7565b10610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614f5c565b60405180910390fd5b600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff1661ffff1610610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690614fea565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490615078565b60405180910390fd5b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81819054906101000a900461ffff1680929190611087906150c3565b91906101000a81548161ffff021916908361ffff16021790555050600e60109054906101000a900467ffffffffffffffff1667ffffffffffffffff164211156110d8576110d33361326a565b611232565b600e60089054906101000a900467ffffffffffffffff1667ffffffffffffffff164211801561115457506001151560135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15611167576111623361326a565b611231565b600e5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421180156111e257506001151560125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156111f5576111f03361326a565b611230565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112279061515c565b60405180910390fd5b5b5b565b5f61123f600f61328a565b905090565b61124e3382613296565b61128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906151ea565b60405180910390fd5b61129883838361332a565b505050565b5f805f600b5f8681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff160361142657600a6040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b5f61142f613616565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff168661145b9190615208565b6114659190615276565b9050815f0151819350935050509250929050565b60605f606061148784613169565b60115f8581526020019081526020015f205f0160115f8681526020019081526020015f206001015460115f8781526020019081526020015f206002018280546114cf90614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546114fb90614c91565b80156115465780601f1061151d57610100808354040283529160200191611546565b820191905f5260205f20905b81548152906001019060200180831161152957829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156115bd57602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116115845790505b505050505090509250925092509193909250565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61163d83838360405180602001604052805f815250611fd0565b505050565b61164c3382613296565b61168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906151ea565b60405180910390fd5b6116948161361f565b50565b60075f9054906101000a900460ff1681565b5f806116b483613760565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b906152f0565b60405180910390fd5b80915050919050565b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78160405161175c91906143c9565b60405180910390a150565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f9061537e565b60405180910390fd5b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075f9054906101000a900460ff1615611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614e27565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a63575f80fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60109054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611bf390614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90614c91565b8015611c6a5780601f10611c4157610100808354040283529160200191611c6a565b820191905f5260205f20905b815481529060010190602001808311611c4d57829003601f168201915b5050505050905090565b600d5481565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614c46565b60405180910390fd5b611d1381613799565b50565b611d213383836137ac565b5050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90614c46565b60405180910390fd5b8015611e1557600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611e62565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f085750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e9061540c565b60405180910390fd5b5f5b8251811015611fcb578160125f858481518110611f6957611f6861542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611f49565b505050565b611fda3383613296565b612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906151ea565b60405180910390fd5b61202584848484613913565b50505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614c46565b60405180910390fd5b8060075f6101000a81548160ff02191690831515021790555060075f9054906101000a900460ff1615612115577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ba5750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061540c565b60405180910390fd5b7f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c828260405161222a929190615457565b60405180910390a15050565b606061224182613169565b5f6002805461224f90614c91565b90501161226a5760405180602001604052805f815250612296565b60026122758361396f565b60405160200161228692919061554a565b6040516020818303038152906040525b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614c46565b60405180910390fd5b80600c908161233c91906156f8565b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123e25750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061540c565b60405180910390fd5b5f5b82518110156124a5578160135f8584815181106124435761244261542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050612423565b505050565b6009602052805f5260405f205f915054906101000a900460ff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125695750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f9061540c565b60405180910390fd5b6125b182613169565b60115f8381526020019081526020015f2060020181908060018154018082558091505060019003905f5260205f2090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161263a91906143c9565b60405180910390a15050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd90614c46565b60405180910390fd5b83600e5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600e60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081600e60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600e60186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128215750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128579061540c565b60405180910390fd5b61286982613169565b6128736010613a39565b604051806060016040528082815260200161288e601061328a565b815260200160115f8581526020019081526020015f2060020180548060200260200160405190810160405280929190818152602001828054801561291657602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116128dd5790505b505050505081525060115f8481526020019081526020015f205f820151815f01908161294291906156f8565b50602082015181600101556040820151816002019080519060200190612969929190613fed565b509050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161299c91906143c9565b60405180910390a15050565b6060600c80546129b790614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546129e390614c91565b8015612a2e5780601f10612a0557610100808354040283529160200191612a2e565b820191905f5260205f20905b815481529060010190602001808311612a1157829003601f168201915b5050505050905090565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600e60189054906101000a900467ffffffffffffffff1681565b600e60089054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bc1575f80fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b90614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d10573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612d0a573d5f803e3d5ffd5b50612e0f565b5f8103612d92578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d509190614363565b602060405180830381865afa158015612d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8f9190614ee7565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612dcd929190614470565b6020604051808303815f875af1158015612de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0d91906157db565b505b5050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff169050919050565b600e5f9054906101000a900467ffffffffffffffff1681565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f4957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f595750612f5882613a4d565b5b9050919050565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fd25750612fd182612e7f565b5b9050919050565b612fe1613616565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303690615876565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a4906158de565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61317281613ab6565b6131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a8906152f0565b60405180910390fd5b50565b8160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613224836116a9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b613274600f613a39565b61328781613282600f61328a565b613af6565b50565b5f815f01549050919050565b5f806132a1836116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132e357506132e28185612a38565b5b8061332157508373ffffffffffffffffffffffffffffffffffffffff1661330984610c5e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661334a826116a9565b73ffffffffffffffffffffffffffffffffffffffff16146133a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133979061596c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361340e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613405906159fa565b60405180910390fd5b61341b8383836001613d09565b8273ffffffffffffffffffffffffffffffffffffffff1661343b826116a9565b73ffffffffffffffffffffffffffffffffffffffff1614613491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134889061596c565b60405180910390fd5b60055f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136118383836001613d0f565b505050565b5f612710905090565b5f613629826116a9565b9050613638815f846001613d09565b613641826116a9565b905060055f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555060035f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461375c815f846001613d0f565b5050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80600290816137a891906156f8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361381a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381190615a62565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613906919061415a565b60405180910390a3505050565b61391e84848461332a565b61392a84848484613d15565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396090615af0565b60405180910390fd5b50505050565b60605f600161397d84613e7a565b0190505f8167ffffffffffffffff81111561399b5761399a61460c565b5b6040519080825280601f01601f1916602001820160405280156139cd5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a2e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a2357613a22615249565b5b0494505f85036139da575b819350505050919050565b6001815f015f828254019250508190555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff16613ad783613760565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5b90615b58565b60405180910390fd5b613b6d81613ab6565b15613bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba490615bc0565b60405180910390fd5b613bba5f83836001613d09565b613bc381613ab6565b15613c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bfa90615bc0565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d055f83836001613d0f565b5050565b50505050565b50505050565b5f613d1f84613fcb565b15613e6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613d639493929190615c30565b6020604051808303815f875af1925050508015613d9e57506040513d601f19601f82011682018060405250810190613d9b9190615c8e565b60015b613e1d573d805f8114613dcc576040519150601f19603f3d011682016040523d82523d5f602084013e613dd1565b606091505b505f815103613e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0c90615af0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613e72565b600190505b949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ed6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613ecc57613ecb615249565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613f13576d04ee2d6d415b85acef81000000008381613f0957613f08615249565b5b0492506020810190505b662386f26fc100008310613f4257662386f26fc100008381613f3857613f37615249565b5b0492506010810190505b6305f5e1008310613f6b576305f5e1008381613f6157613f60615249565b5b0492506008810190505b6127108310613f90576127108381613f8657613f85615249565b5b0492506004810190505b60648310613fb35760648381613fa957613fa8615249565b5b0492506002810190505b600a8310613fc2576001810190505b80915050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255905f5260205f2090600f01601090048101928215614083579160200282015f5b8382111561405357835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302614013565b80156140815782816101000a81549061ffff0219169055600201602081600101049283019260010302614053565b505b5090506140909190614094565b5090565b5b808211156140ab575f815f905550600101614095565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6140f4816140c0565b81146140fe575f80fd5b50565b5f8135905061410f816140eb565b92915050565b5f6020828403121561412a576141296140b8565b5b5f61413784828501614101565b91505092915050565b5f8115159050919050565b61415481614140565b82525050565b5f60208201905061416d5f83018461414b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61419c82614173565b9050919050565b6141ac81614192565b81146141b6575f80fd5b50565b5f813590506141c7816141a3565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6141ed816141cd565b81146141f7575f80fd5b50565b5f81359050614208816141e4565b92915050565b5f8060408385031215614224576142236140b8565b5b5f614231858286016141b9565b9250506020614242858286016141fa565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614283578082015181840152602081019050614268565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6142a88261424c565b6142b28185614256565b93506142c2818560208601614266565b6142cb8161428e565b840191505092915050565b5f6020820190508181035f8301526142ee818461429e565b905092915050565b5f819050919050565b614308816142f6565b8114614312575f80fd5b50565b5f81359050614323816142ff565b92915050565b5f6020828403121561433e5761433d6140b8565b5b5f61434b84828501614315565b91505092915050565b61435d81614192565b82525050565b5f6020820190506143765f830184614354565b92915050565b5f8060408385031215614392576143916140b8565b5b5f61439f858286016141b9565b92505060206143b085828601614315565b9150509250929050565b6143c3816142f6565b82525050565b5f6020820190506143dc5f8301846143ba565b92915050565b5f805f606084860312156143f9576143f86140b8565b5b5f614406868287016141b9565b9350506020614417868287016141b9565b925050604061442886828701614315565b9150509250925092565b5f8060408385031215614448576144476140b8565b5b5f61445585828601614315565b925050602061446685828601614315565b9150509250929050565b5f6040820190506144835f830185614354565b61449060208301846143ba565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61ffff82169050919050565b6144d6816144c0565b82525050565b5f6144e783836144cd565b60208301905092915050565b5f602082019050919050565b5f61450982614497565b61451381856144a1565b935061451e836144b1565b805f5b8381101561454e57815161453588826144dc565b9750614540836144f3565b925050600181019050614521565b5085935050505092915050565b5f6060820190508181035f830152614573818661429e565b905061458260208301856143ba565b818103604083015261459481846144ff565b9050949350505050565b5f602082840312156145b3576145b26140b8565b5b5f6145c0848285016141b9565b91505092915050565b5f67ffffffffffffffff82169050919050565b6145e5816145c9565b82525050565b5f6020820190506145fe5f8301846145dc565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6146428261428e565b810181811067ffffffffffffffff821117156146615761466061460c565b5b80604052505050565b5f6146736140af565b905061467f8282614639565b919050565b5f67ffffffffffffffff82111561469e5761469d61460c565b5b6146a78261428e565b9050602081019050919050565b828183375f83830152505050565b5f6146d46146cf84614684565b61466a565b9050828152602081018484840111156146f0576146ef614608565b5b6146fb8482856146b4565b509392505050565b5f82601f83011261471757614716614604565b5b81356147278482602086016146c2565b91505092915050565b5f60208284031215614745576147446140b8565b5b5f82013567ffffffffffffffff811115614762576147616140bc565b5b61476e84828501614703565b91505092915050565b61478081614140565b811461478a575f80fd5b50565b5f8135905061479b81614777565b92915050565b5f80604083850312156147b7576147b66140b8565b5b5f6147c4858286016141b9565b92505060206147d58582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156147f9576147f861460c565b5b602082029050602081019050919050565b5f80fd5b5f61482061481b846147df565b61466a565b905080838252602082019050602084028301858111156148435761484261480a565b5b835b8181101561486c578061485888826141b9565b845260208401935050602081019050614845565b5050509392505050565b5f82601f83011261488a57614889614604565b5b813561489a84826020860161480e565b91505092915050565b5f80604083850312156148b9576148b86140b8565b5b5f83013567ffffffffffffffff8111156148d6576148d56140bc565b5b6148e285828601614876565b92505060206148f38582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156149175761491661460c565b5b6149208261428e565b9050602081019050919050565b5f61493f61493a846148fd565b61466a565b90508281526020810184848401111561495b5761495a614608565b5b6149668482856146b4565b509392505050565b5f82601f83011261498257614981614604565b5b813561499284826020860161492d565b91505092915050565b5f805f80608085870312156149b3576149b26140b8565b5b5f6149c0878288016141b9565b94505060206149d1878288016141b9565b93505060406149e287828801614315565b925050606085013567ffffffffffffffff811115614a0357614a026140bc565b5b614a0f8782880161496e565b91505092959194509250565b5f60208284031215614a3057614a2f6140b8565b5b5f614a3d8482850161478d565b91505092915050565b614a4f816144c0565b8114614a59575f80fd5b50565b5f81359050614a6a81614a46565b92915050565b5f8060408385031215614a8657614a856140b8565b5b5f614a9385828601614315565b9250506020614aa485828601614a5c565b9150509250929050565b614ab7816145c9565b8114614ac1575f80fd5b50565b5f81359050614ad281614aae565b92915050565b5f805f8060808587031215614af057614aef6140b8565b5b5f614afd87828801614ac4565b9450506020614b0e87828801614ac4565b9350506040614b1f87828801614ac4565b9250506060614b3087828801614ac4565b91505092959194509250565b5f8060408385031215614b5257614b516140b8565b5b5f614b5f85828601614315565b925050602083013567ffffffffffffffff811115614b8057614b7f6140bc565b5b614b8c85828601614703565b9150509250929050565b5f8060408385031215614bac57614bab6140b8565b5b5f614bb9858286016141b9565b9250506020614bca858286016141b9565b9150509250929050565b614bdd816144c0565b82525050565b5f602082019050614bf65f830184614bd4565b92915050565b7f63616c6c6572206973206e6f7420616e206f776e6572000000000000000000005f82015250565b5f614c30601683614256565b9150614c3b82614bfc565b602082019050919050565b5f6020820190508181035f830152614c5d81614c24565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614ca857607f821691505b602082108103614cbb57614cba614c64565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d1b602183614256565b9150614d2682614cc1565b604082019050919050565b5f6020820190508181035f830152614d4881614d0f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f614da9603d83614256565b9150614db482614d4f565b604082019050919050565b5f6020820190508181035f830152614dd681614d9d565b9050919050565b7f636f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f614e11601283614256565b9150614e1c82614ddd565b602082019050919050565b5f6020820190508181035f830152614e3e81614e05565b9050919050565b7f436974697a656e5a65726f3a204d696e742068617320616c726561647920656e5f8201527f6465642100000000000000000000000000000000000000000000000000000000602082015250565b5f614e9f602483614256565b9150614eaa82614e45565b604082019050919050565b5f6020820190508181035f830152614ecc81614e93565b9050919050565b5f81519050614ee1816142ff565b92915050565b5f60208284031215614efc57614efb6140b8565b5b5f614f0984828501614ed3565b91505092915050565b7f436974697a656e5a65726f3a204d696e74206c696d69742072656163686564215f82015250565b5f614f46602083614256565b9150614f5182614f12565b602082019050919050565b5f6020820190508181035f830152614f7381614f3a565b9050919050565b7f436974697a656e5a65726f3a204d696e74206c696d697420616c7265616479205f8201527f7265616368656420666f7220746869732077616c6c6574210000000000000000602082015250565b5f614fd4603883614256565b9150614fdf82614f7a565b604082019050919050565b5f6020820190508181035f83015261500181614fc8565b9050919050565b7f436974697a656e5a65726f3a204d696e7420697320616c6c6f776564206f6e6c5f8201527f7920666f722077616c6c65747321000000000000000000000000000000000000602082015250565b5f615062602e83614256565b915061506d82615008565b604082019050919050565b5f6020820190508181035f83015261508f81615056565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6150cd826144c0565b915061ffff82036150e1576150e0615096565b5b600182019050919050565b7f436974697a656e5a65726f3a20596f7520617265206e6f7420656c696769626c5f8201527f6520666f72206d696e7421000000000000000000000000000000000000000000602082015250565b5f615146602b83614256565b9150615151826150ec565b604082019050919050565b5f6020820190508181035f8301526151738161513a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f6151d4602d83614256565b91506151df8261517a565b604082019050919050565b5f6020820190508181035f830152615201816151c8565b9050919050565b5f615212826142f6565b915061521d836142f6565b925082820261522b816142f6565b9150828204841483151761524257615241615096565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615280826142f6565b915061528b836142f6565b92508261529b5761529a615249565b5b828204905092915050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f6152da601883614256565b91506152e5826152a6565b602082019050919050565b5f6020820190508181035f830152615307816152ce565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f615368602983614256565b91506153738261530e565b604082019050919050565b5f6020820190508181035f8301526153958161535c565b9050919050565b7f63616c6c6572206973206e6f7420616e20617574686f72697a656420757365725f8201527f206f7220616e206f776e65720000000000000000000000000000000000000000602082015250565b5f6153f6602c83614256565b91506154018261539c565b604082019050919050565b5f6020820190508181035f830152615423816153ea565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60408201905061546a5f8301856143ba565b61547760208301846143ba565b9392505050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546154a681614c91565b6154b0818661547e565b9450600182165f81146154ca57600181146154df57615511565b60ff1983168652811515820286019350615511565b6154e885615488565b5f5b83811015615509578154818901526001820191506020810190506154ea565b838801955050505b50505092915050565b5f6155248261424c565b61552e818561547e565b935061553e818560208601614266565b80840191505092915050565b5f615555828561549a565b9150615561828461551a565b91508190509392505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026155b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261557c565b6155c1868361557c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6155fc6155f76155f2846142f6565b6155d9565b6142f6565b9050919050565b5f819050919050565b615615836155e2565b61562961562182615603565b848454615588565b825550505050565b5f90565b61563d615631565b61564881848461560c565b505050565b5b8181101561566b576156605f82615635565b60018101905061564e565b5050565b601f8211156156b05761568181615488565b61568a8461556d565b81016020851015615699578190505b6156ad6156a58561556d565b83018261564d565b50505b505050565b5f82821c905092915050565b5f6156d05f19846008026156b5565b1980831691505092915050565b5f6156e883836156c1565b9150826002028217905092915050565b6157018261424c565b67ffffffffffffffff81111561571a5761571961460c565b5b6157248254614c91565b61572f82828561566f565b5f60209050601f831160018114615760575f841561574e578287015190505b61575885826156dd565b8655506157bf565b601f19841661576e86615488565b5f5b8281101561579557848901518255600182019150602085019450602081019050615770565b868310156157b257848901516157ae601f8916826156c1565b8355505b6001600288020188555050505b505050505050565b5f815190506157d581614777565b92915050565b5f602082840312156157f0576157ef6140b8565b5b5f6157fd848285016157c7565b91505092915050565b7f455243323938313a20726f79616c7479206665652077696c6c206578636565645f8201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b5f615860602a83614256565b915061586b82615806565b604082019050919050565b5f6020820190508181035f83015261588d81615854565b9050919050565b7f455243323938313a20696e76616c6964207265636569766572000000000000005f82015250565b5f6158c8601983614256565b91506158d382615894565b602082019050919050565b5f6020820190508181035f8301526158f5816158bc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f615956602583614256565b9150615961826158fc565b604082019050919050565b5f6020820190508181035f8301526159838161594a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6159e4602483614256565b91506159ef8261598a565b604082019050919050565b5f6020820190508181035f830152615a11816159d8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f615a4c601983614256565b9150615a5782615a18565b602082019050919050565b5f6020820190508181035f830152615a7981615a40565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f615ada603283614256565b9150615ae582615a80565b604082019050919050565b5f6020820190508181035f830152615b0781615ace565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f615b42602083614256565b9150615b4d82615b0e565b602082019050919050565b5f6020820190508181035f830152615b6f81615b36565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615baa601c83614256565b9150615bb582615b76565b602082019050919050565b5f6020820190508181035f830152615bd781615b9e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f615c0282615bde565b615c0c8185615be8565b9350615c1c818560208601614266565b615c258161428e565b840191505092915050565b5f608082019050615c435f830187614354565b615c506020830186614354565b615c5d60408301856143ba565b8181036060830152615c6f8184615bf8565b905095945050505050565b5f81519050615c88816140eb565b92915050565b5f60208284031215615ca357615ca26140b8565b5b5f615cb084828501615c7a565b9150509291505056fea2646970667358221220651d214871294d907a5d0ee78e5ef765d47df9fa24d45822a764a4dfb671b46a64736f6c63430008160033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000065c0e9e00000000000000000000000000000000000000000000000000000000065c122200000000000000000000000000000000000000000000000000000000065c15a600000000000000000000000000000000000000000000000000000000065c1767f00000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000006973fe88cc9a96c6f5eaf9da50f6a39495aa6ca0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c436974697a656e205a65726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343545a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f716170692e716f72706f2e776f726c642f6170692f76312f7075626c69632d626c6f636b636861696e2d646174612f6e66742f636974697a656e2d7a65726f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e716f72706f2e776f726c642f63632f636974697a656e5f7a65726f2e6a736f6e000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061028b575f3560e01c806395d89b4111610159578063d5b9221b116100c0578063ea2b4ab211610079578063ea2b4ab2146109b7578063eafd4891146109e1578063f2fde38b14610a0b578063f3fef3a314610a33578063fbbf8cc314610a5b578063fdda339114610a9757610292565b8063d5b9221b1461089d578063d7afc640146108d9578063e0b65d6514610901578063e4f52e3d14610929578063e8a3d48514610951578063e985e9c51461097b57610292565b8063b88d4fde11610112578063b88d4fde14610799578063bedb86fb146107c1578063c758f600146107e9578063c87b56dd14610811578063ccb4807b1461084d578063d16bc9ae1461087557610292565b806395d89b41146106a5578063996517cf146106cf5780639b642de1146106f9578063a22cb46514610721578063a249225e14610749578063a8d9bb771461077157610292565b80633af32abf116101fd57806370559664116101b657806370559664146105ad57806370a08231146105e9578063715018a61461062557806379ba50971461063b5780638cfec4c0146106515780638da5cb5b1461067b57610292565b80633af32abf1461049357806342842e0e146104cf57806342966c68146104f75780635c975abb1461051f5780636352211e146105495780636a1c34fb1461058557610292565b80630de959cc1161024f5780630de959cc146103865780631249c58b146103b057806318160ddd146103c657806323b872dd146103f05780632a55205a146104185780632c72ef771461045557610292565b806301ffc9a71461029457806304634d8d146102d057806306fdde03146102f8578063081812fc14610322578063095ea7b31461035e57610292565b3661029257005b005b34801561029f575f80fd5b506102ba60048036038101906102b59190614115565b610ac1565b6040516102c7919061415a565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061420e565b610b31565b005b348015610303575f80fd5b5061030c610bcf565b60405161031991906142d6565b60405180910390f35b34801561032d575f80fd5b5061034860048036038101906103439190614329565b610c5e565b6040516103559190614363565b60405180910390f35b348015610369575f80fd5b50610384600480360381019061037f919061437c565b610ca0565b005b348015610391575f80fd5b5061039a610da8565b6040516103a79190614363565b60405180910390f35b3480156103bb575f80fd5b506103c4610dcd565b005b3480156103d1575f80fd5b506103da611234565b6040516103e791906143c9565b60405180910390f35b3480156103fb575f80fd5b50610416600480360381019061041191906143e2565b611244565b005b348015610423575f80fd5b5061043e60048036038101906104399190614432565b61129d565b60405161044c929190614470565b60405180910390f35b348015610460575f80fd5b5061047b60048036038101906104769190614329565b611479565b60405161048a9392919061455b565b60405180910390f35b34801561049e575f80fd5b506104b960048036038101906104b4919061459e565b6115d1565b6040516104c6919061415a565b60405180910390f35b3480156104da575f80fd5b506104f560048036038101906104f091906143e2565b611623565b005b348015610502575f80fd5b5061051d60048036038101906105189190614329565b611642565b005b34801561052a575f80fd5b50610533611697565b604051610540919061415a565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a9190614329565b6116a9565b60405161057c9190614363565b60405180910390f35b348015610590575f80fd5b506105ab60048036038101906105a69190614329565b61172d565b005b3480156105b8575f80fd5b506105d360048036038101906105ce919061459e565b611767565b6040516105e0919061415a565b60405180910390f35b3480156105f4575f80fd5b5061060f600480360381019061060a919061459e565b6117b9565b60405161061c91906143c9565b60405180910390f35b348015610630575f80fd5b5061063961186d565b005b348015610646575f80fd5b5061064f6119bc565b005b34801561065c575f80fd5b50610665611ba4565b60405161067291906145eb565b60405180910390f35b348015610686575f80fd5b5061068f611bbe565b60405161069c9190614363565b60405180910390f35b3480156106b0575f80fd5b506106b9611be4565b6040516106c691906142d6565b60405180910390f35b3480156106da575f80fd5b506106e3611c74565b6040516106f091906143c9565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a9190614730565b611c7a565b005b34801561072c575f80fd5b50610747600480360381019061074291906147a1565b611d16565b005b348015610754575f80fd5b5061076f600480360381019061076a91906147a1565b611d25565b005b34801561077c575f80fd5b50610797600480360381019061079291906148a3565b611e66565b005b3480156107a4575f80fd5b506107bf60048036038101906107ba919061499b565b611fd0565b005b3480156107cc575f80fd5b506107e760048036038101906107e29190614a1b565b61202b565b005b3480156107f4575f80fd5b5061080f600480360381019061080a9190614432565b612118565b005b34801561081c575f80fd5b5061083760048036038101906108329190614329565b612236565b60405161084491906142d6565b60405180910390f35b348015610858575f80fd5b50610873600480360381019061086e9190614730565b61229d565b005b348015610880575f80fd5b5061089b600480360381019061089691906148a3565b612340565b005b3480156108a8575f80fd5b506108c360048036038101906108be919061459e565b6124aa565b6040516108d0919061415a565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190614a70565b6124c7565b005b34801561090c575f80fd5b5061092760048036038101906109229190614ad8565b612646565b005b348015610934575f80fd5b5061094f600480360381019061094a9190614b3c565b61277f565b005b34801561095c575f80fd5b506109656129a8565b60405161097291906142d6565b60405180910390f35b348015610986575f80fd5b506109a1600480360381019061099c9190614b96565b612a38565b6040516109ae919061415a565b60405180910390f35b3480156109c2575f80fd5b506109cb612ac6565b6040516109d891906145eb565b60405180910390f35b3480156109ec575f80fd5b506109f5612ae0565b604051610a0291906145eb565b60405180910390f35b348015610a16575f80fd5b50610a316004803603810190610a2c919061459e565b612afa565b005b348015610a3e575f80fd5b50610a596004803603810190610a54919061437c565b612c04565b005b348015610a66575f80fd5b50610a816004803603810190610a7c919061459e565b612e13565b604051610a8e9190614be3565b60405180910390f35b348015610aa2575f80fd5b50610aab612e66565b604051610ab891906145eb565b60405180910390f35b5f610acb82612e7f565b80610adb5750610ada82612f60565b5b80610b2a5750634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614c46565b60405180910390fd5b610bcb8282612fd9565b5050565b60605f8054610bdd90614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0990614c91565b8015610c545780601f10610c2b57610100808354040283529160200191610c54565b820191905f5260205f20905b815481529060010190602001808311610c3757829003601f168201915b5050505050905090565b5f610c6882613169565b60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610caa826116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190614d31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d5a5750610d598133612a38565b5b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614dbf565b60405180910390fd5b610da383836131b4565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900460ff1615610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390614e27565b60405180910390fd5b600e60189054906101000a900467ffffffffffffffff1667ffffffffffffffff164210610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614eb5565b60405180910390fd5b600d543073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eee9190614ee7565b10610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614f5c565b60405180910390fd5b600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff1661ffff1610610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690614fea565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490615078565b60405180910390fd5b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81819054906101000a900461ffff1680929190611087906150c3565b91906101000a81548161ffff021916908361ffff16021790555050600e60109054906101000a900467ffffffffffffffff1667ffffffffffffffff164211156110d8576110d33361326a565b611232565b600e60089054906101000a900467ffffffffffffffff1667ffffffffffffffff164211801561115457506001151560135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15611167576111623361326a565b611231565b600e5f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421180156111e257506001151560125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b156111f5576111f03361326a565b611230565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112279061515c565b60405180910390fd5b5b5b565b5f61123f600f61328a565b905090565b61124e3382613296565b61128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906151ea565b60405180910390fd5b61129883838361332a565b505050565b5f805f600b5f8681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff160361142657600a6040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b5f61142f613616565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff168661145b9190615208565b6114659190615276565b9050815f0151819350935050509250929050565b60605f606061148784613169565b60115f8581526020019081526020015f205f0160115f8681526020019081526020015f206001015460115f8781526020019081526020015f206002018280546114cf90614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546114fb90614c91565b80156115465780601f1061151d57610100808354040283529160200191611546565b820191905f5260205f20905b81548152906001019060200180831161152957829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156115bd57602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116115845790505b505050505090509250925092509193909250565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61163d83838360405180602001604052805f815250611fd0565b505050565b61164c3382613296565b61168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906151ea565b60405180910390fd5b6116948161361f565b50565b60075f9054906101000a900460ff1681565b5f806116b483613760565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b906152f0565b60405180910390fd5b80915050919050565b7ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78160405161175c91906143c9565b60405180910390a150565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f9061537e565b60405180910390fd5b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075f9054906101000a900460ff1615611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614e27565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a63575f80fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60109054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611bf390614c91565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f90614c91565b8015611c6a5780601f10611c4157610100808354040283529160200191611c6a565b820191905f5260205f20905b815481529060010190602001808311611c4d57829003601f168201915b5050505050905090565b600d5481565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614c46565b60405180910390fd5b611d1381613799565b50565b611d213383836137ac565b5050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90614c46565b60405180910390fd5b8015611e1557600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611e62565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f085750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e9061540c565b60405180910390fd5b5f5b8251811015611fcb578160125f858481518110611f6957611f6861542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050611f49565b505050565b611fda3383613296565b612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906151ea565b60405180910390fd5b61202584848484613913565b50505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614c46565b60405180910390fd5b8060075f6101000a81548160ff02191690831515021790555060075f9054906101000a900460ff1615612115577f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b50565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806121ba5750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061540c565b60405180910390fd5b7f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c828260405161222a929190615457565b60405180910390a15050565b606061224182613169565b5f6002805461224f90614c91565b90501161226a5760405180602001604052805f815250612296565b60026122758361396f565b60405160200161228692919061554a565b6040516020818303038152906040525b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614c46565b60405180910390fd5b80600c908161233c91906156f8565b5050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806123e25750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124189061540c565b60405180910390fd5b5f5b82518110156124a5578160135f8584815181106124435761244261542a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050612423565b505050565b6009602052805f5260405f205f915054906101000a900460ff1681565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125695750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f9061540c565b60405180910390fd5b6125b182613169565b60115f8381526020019081526020015f2060020181908060018154018082558091505060019003905f5260205f2090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161263a91906143c9565b60405180910390a15050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd90614c46565b60405180910390fd5b83600e5f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600e60086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081600e60106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600e60186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128215750600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128579061540c565b60405180910390fd5b61286982613169565b6128736010613a39565b604051806060016040528082815260200161288e601061328a565b815260200160115f8581526020019081526020015f2060020180548060200260200160405190810160405280929190818152602001828054801561291657602002820191905f5260205f20905f905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116128dd5790505b505050505081525060115f8481526020019081526020015f205f820151815f01908161294291906156f8565b50602082015181600101556040820151816002019080519060200190612969929190613fed565b509050507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161299c91906143c9565b60405180910390a15050565b6060600c80546129b790614c91565b80601f01602080910402602001604051908101604052809291908181526020018280546129e390614c91565b8015612a2e5780601f10612a0557610100808354040283529160200191612a2e565b820191905f5260205f20905b815481529060010190602001808311612a1157829003601f168201915b5050505050905090565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600e60189054906101000a900467ffffffffffffffff1681565b600e60089054906101000a900467ffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bc1575f80fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8b90614c46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d10573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612d0a573d5f803e3d5ffd5b50612e0f565b5f8103612d92578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d509190614363565b602060405180830381865afa158015612d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8f9190614ee7565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612dcd929190614470565b6020604051808303815f875af1158015612de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0d91906157db565b505b5050565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900461ffff169050919050565b600e5f9054906101000a900467ffffffffffffffff1681565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f4957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f595750612f5882613a4d565b5b9050919050565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fd25750612fd182612e7f565b5b9050919050565b612fe1613616565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303690615876565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a4906158de565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a5f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61317281613ab6565b6131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a8906152f0565b60405180910390fd5b50565b8160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613224836116a9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b613274600f613a39565b61328781613282600f61328a565b613af6565b50565b5f815f01549050919050565b5f806132a1836116a9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132e357506132e28185612a38565b5b8061332157508373ffffffffffffffffffffffffffffffffffffffff1661330984610c5e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661334a826116a9565b73ffffffffffffffffffffffffffffffffffffffff16146133a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133979061596c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361340e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613405906159fa565b60405180910390fd5b61341b8383836001613d09565b8273ffffffffffffffffffffffffffffffffffffffff1661343b826116a9565b73ffffffffffffffffffffffffffffffffffffffff1614613491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134889061596c565b60405180910390fd5b60055f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136118383836001613d0f565b505050565b5f612710905090565b5f613629826116a9565b9050613638815f846001613d09565b613641826116a9565b905060055f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254039250508190555060035f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461375c815f846001613d0f565b5050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80600290816137a891906156f8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361381a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381190615a62565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613906919061415a565b60405180910390a3505050565b61391e84848461332a565b61392a84848484613d15565b613969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396090615af0565b60405180910390fd5b50505050565b60605f600161397d84613e7a565b0190505f8167ffffffffffffffff81111561399b5761399a61460c565b5b6040519080825280601f01601f1916602001820160405280156139cd5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a2e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a2357613a22615249565b5b0494505f85036139da575b819350505050919050565b6001815f015f828254019250508190555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff16613ad783613760565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5b90615b58565b60405180910390fd5b613b6d81613ab6565b15613bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba490615bc0565b60405180910390fd5b613bba5f83836001613d09565b613bc381613ab6565b15613c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bfa90615bc0565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d055f83836001613d0f565b5050565b50505050565b50505050565b5f613d1f84613fcb565b15613e6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401613d639493929190615c30565b6020604051808303815f875af1925050508015613d9e57506040513d601f19601f82011682018060405250810190613d9b9190615c8e565b60015b613e1d573d805f8114613dcc576040519150601f19603f3d011682016040523d82523d5f602084013e613dd1565b606091505b505f815103613e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0c90615af0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613e72565b600190505b949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613ed6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613ecc57613ecb615249565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613f13576d04ee2d6d415b85acef81000000008381613f0957613f08615249565b5b0492506020810190505b662386f26fc100008310613f4257662386f26fc100008381613f3857613f37615249565b5b0492506010810190505b6305f5e1008310613f6b576305f5e1008381613f6157613f60615249565b5b0492506008810190505b6127108310613f90576127108381613f8657613f85615249565b5b0492506004810190505b60648310613fb35760648381613fa957613fa8615249565b5b0492506002810190505b600a8310613fc2576001810190505b80915050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255905f5260205f2090600f01601090048101928215614083579160200282015f5b8382111561405357835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302614013565b80156140815782816101000a81549061ffff0219169055600201602081600101049283019260010302614053565b505b5090506140909190614094565b5090565b5b808211156140ab575f815f905550600101614095565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6140f4816140c0565b81146140fe575f80fd5b50565b5f8135905061410f816140eb565b92915050565b5f6020828403121561412a576141296140b8565b5b5f61413784828501614101565b91505092915050565b5f8115159050919050565b61415481614140565b82525050565b5f60208201905061416d5f83018461414b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61419c82614173565b9050919050565b6141ac81614192565b81146141b6575f80fd5b50565b5f813590506141c7816141a3565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b6141ed816141cd565b81146141f7575f80fd5b50565b5f81359050614208816141e4565b92915050565b5f8060408385031215614224576142236140b8565b5b5f614231858286016141b9565b9250506020614242858286016141fa565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614283578082015181840152602081019050614268565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6142a88261424c565b6142b28185614256565b93506142c2818560208601614266565b6142cb8161428e565b840191505092915050565b5f6020820190508181035f8301526142ee818461429e565b905092915050565b5f819050919050565b614308816142f6565b8114614312575f80fd5b50565b5f81359050614323816142ff565b92915050565b5f6020828403121561433e5761433d6140b8565b5b5f61434b84828501614315565b91505092915050565b61435d81614192565b82525050565b5f6020820190506143765f830184614354565b92915050565b5f8060408385031215614392576143916140b8565b5b5f61439f858286016141b9565b92505060206143b085828601614315565b9150509250929050565b6143c3816142f6565b82525050565b5f6020820190506143dc5f8301846143ba565b92915050565b5f805f606084860312156143f9576143f86140b8565b5b5f614406868287016141b9565b9350506020614417868287016141b9565b925050604061442886828701614315565b9150509250925092565b5f8060408385031215614448576144476140b8565b5b5f61445585828601614315565b925050602061446685828601614315565b9150509250929050565b5f6040820190506144835f830185614354565b61449060208301846143ba565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61ffff82169050919050565b6144d6816144c0565b82525050565b5f6144e783836144cd565b60208301905092915050565b5f602082019050919050565b5f61450982614497565b61451381856144a1565b935061451e836144b1565b805f5b8381101561454e57815161453588826144dc565b9750614540836144f3565b925050600181019050614521565b5085935050505092915050565b5f6060820190508181035f830152614573818661429e565b905061458260208301856143ba565b818103604083015261459481846144ff565b9050949350505050565b5f602082840312156145b3576145b26140b8565b5b5f6145c0848285016141b9565b91505092915050565b5f67ffffffffffffffff82169050919050565b6145e5816145c9565b82525050565b5f6020820190506145fe5f8301846145dc565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6146428261428e565b810181811067ffffffffffffffff821117156146615761466061460c565b5b80604052505050565b5f6146736140af565b905061467f8282614639565b919050565b5f67ffffffffffffffff82111561469e5761469d61460c565b5b6146a78261428e565b9050602081019050919050565b828183375f83830152505050565b5f6146d46146cf84614684565b61466a565b9050828152602081018484840111156146f0576146ef614608565b5b6146fb8482856146b4565b509392505050565b5f82601f83011261471757614716614604565b5b81356147278482602086016146c2565b91505092915050565b5f60208284031215614745576147446140b8565b5b5f82013567ffffffffffffffff811115614762576147616140bc565b5b61476e84828501614703565b91505092915050565b61478081614140565b811461478a575f80fd5b50565b5f8135905061479b81614777565b92915050565b5f80604083850312156147b7576147b66140b8565b5b5f6147c4858286016141b9565b92505060206147d58582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156147f9576147f861460c565b5b602082029050602081019050919050565b5f80fd5b5f61482061481b846147df565b61466a565b905080838252602082019050602084028301858111156148435761484261480a565b5b835b8181101561486c578061485888826141b9565b845260208401935050602081019050614845565b5050509392505050565b5f82601f83011261488a57614889614604565b5b813561489a84826020860161480e565b91505092915050565b5f80604083850312156148b9576148b86140b8565b5b5f83013567ffffffffffffffff8111156148d6576148d56140bc565b5b6148e285828601614876565b92505060206148f38582860161478d565b9150509250929050565b5f67ffffffffffffffff8211156149175761491661460c565b5b6149208261428e565b9050602081019050919050565b5f61493f61493a846148fd565b61466a565b90508281526020810184848401111561495b5761495a614608565b5b6149668482856146b4565b509392505050565b5f82601f83011261498257614981614604565b5b813561499284826020860161492d565b91505092915050565b5f805f80608085870312156149b3576149b26140b8565b5b5f6149c0878288016141b9565b94505060206149d1878288016141b9565b93505060406149e287828801614315565b925050606085013567ffffffffffffffff811115614a0357614a026140bc565b5b614a0f8782880161496e565b91505092959194509250565b5f60208284031215614a3057614a2f6140b8565b5b5f614a3d8482850161478d565b91505092915050565b614a4f816144c0565b8114614a59575f80fd5b50565b5f81359050614a6a81614a46565b92915050565b5f8060408385031215614a8657614a856140b8565b5b5f614a9385828601614315565b9250506020614aa485828601614a5c565b9150509250929050565b614ab7816145c9565b8114614ac1575f80fd5b50565b5f81359050614ad281614aae565b92915050565b5f805f8060808587031215614af057614aef6140b8565b5b5f614afd87828801614ac4565b9450506020614b0e87828801614ac4565b9350506040614b1f87828801614ac4565b9250506060614b3087828801614ac4565b91505092959194509250565b5f8060408385031215614b5257614b516140b8565b5b5f614b5f85828601614315565b925050602083013567ffffffffffffffff811115614b8057614b7f6140bc565b5b614b8c85828601614703565b9150509250929050565b5f8060408385031215614bac57614bab6140b8565b5b5f614bb9858286016141b9565b9250506020614bca858286016141b9565b9150509250929050565b614bdd816144c0565b82525050565b5f602082019050614bf65f830184614bd4565b92915050565b7f63616c6c6572206973206e6f7420616e206f776e6572000000000000000000005f82015250565b5f614c30601683614256565b9150614c3b82614bfc565b602082019050919050565b5f6020820190508181035f830152614c5d81614c24565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614ca857607f821691505b602082108103614cbb57614cba614c64565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d1b602183614256565b9150614d2682614cc1565b604082019050919050565b5f6020820190508181035f830152614d4881614d0f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f614da9603d83614256565b9150614db482614d4f565b604082019050919050565b5f6020820190508181035f830152614dd681614d9d565b9050919050565b7f636f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f614e11601283614256565b9150614e1c82614ddd565b602082019050919050565b5f6020820190508181035f830152614e3e81614e05565b9050919050565b7f436974697a656e5a65726f3a204d696e742068617320616c726561647920656e5f8201527f6465642100000000000000000000000000000000000000000000000000000000602082015250565b5f614e9f602483614256565b9150614eaa82614e45565b604082019050919050565b5f6020820190508181035f830152614ecc81614e93565b9050919050565b5f81519050614ee1816142ff565b92915050565b5f60208284031215614efc57614efb6140b8565b5b5f614f0984828501614ed3565b91505092915050565b7f436974697a656e5a65726f3a204d696e74206c696d69742072656163686564215f82015250565b5f614f46602083614256565b9150614f5182614f12565b602082019050919050565b5f6020820190508181035f830152614f7381614f3a565b9050919050565b7f436974697a656e5a65726f3a204d696e74206c696d697420616c7265616479205f8201527f7265616368656420666f7220746869732077616c6c6574210000000000000000602082015250565b5f614fd4603883614256565b9150614fdf82614f7a565b604082019050919050565b5f6020820190508181035f83015261500181614fc8565b9050919050565b7f436974697a656e5a65726f3a204d696e7420697320616c6c6f776564206f6e6c5f8201527f7920666f722077616c6c65747321000000000000000000000000000000000000602082015250565b5f615062602e83614256565b915061506d82615008565b604082019050919050565b5f6020820190508181035f83015261508f81615056565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6150cd826144c0565b915061ffff82036150e1576150e0615096565b5b600182019050919050565b7f436974697a656e5a65726f3a20596f7520617265206e6f7420656c696769626c5f8201527f6520666f72206d696e7421000000000000000000000000000000000000000000602082015250565b5f615146602b83614256565b9150615151826150ec565b604082019050919050565b5f6020820190508181035f8301526151738161513a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f6151d4602d83614256565b91506151df8261517a565b604082019050919050565b5f6020820190508181035f830152615201816151c8565b9050919050565b5f615212826142f6565b915061521d836142f6565b925082820261522b816142f6565b9150828204841483151761524257615241615096565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615280826142f6565b915061528b836142f6565b92508261529b5761529a615249565b5b828204905092915050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f6152da601883614256565b91506152e5826152a6565b602082019050919050565b5f6020820190508181035f830152615307816152ce565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f615368602983614256565b91506153738261530e565b604082019050919050565b5f6020820190508181035f8301526153958161535c565b9050919050565b7f63616c6c6572206973206e6f7420616e20617574686f72697a656420757365725f8201527f206f7220616e206f776e65720000000000000000000000000000000000000000602082015250565b5f6153f6602c83614256565b91506154018261539c565b604082019050919050565b5f6020820190508181035f830152615423816153ea565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60408201905061546a5f8301856143ba565b61547760208301846143ba565b9392505050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546154a681614c91565b6154b0818661547e565b9450600182165f81146154ca57600181146154df57615511565b60ff1983168652811515820286019350615511565b6154e885615488565b5f5b83811015615509578154818901526001820191506020810190506154ea565b838801955050505b50505092915050565b5f6155248261424c565b61552e818561547e565b935061553e818560208601614266565b80840191505092915050565b5f615555828561549a565b9150615561828461551a565b91508190509392505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026155b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261557c565b6155c1868361557c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6155fc6155f76155f2846142f6565b6155d9565b6142f6565b9050919050565b5f819050919050565b615615836155e2565b61562961562182615603565b848454615588565b825550505050565b5f90565b61563d615631565b61564881848461560c565b505050565b5b8181101561566b576156605f82615635565b60018101905061564e565b5050565b601f8211156156b05761568181615488565b61568a8461556d565b81016020851015615699578190505b6156ad6156a58561556d565b83018261564d565b50505b505050565b5f82821c905092915050565b5f6156d05f19846008026156b5565b1980831691505092915050565b5f6156e883836156c1565b9150826002028217905092915050565b6157018261424c565b67ffffffffffffffff81111561571a5761571961460c565b5b6157248254614c91565b61572f82828561566f565b5f60209050601f831160018114615760575f841561574e578287015190505b61575885826156dd565b8655506157bf565b601f19841661576e86615488565b5f5b8281101561579557848901518255600182019150602085019450602081019050615770565b868310156157b257848901516157ae601f8916826156c1565b8355505b6001600288020188555050505b505050505050565b5f815190506157d581614777565b92915050565b5f602082840312156157f0576157ef6140b8565b5b5f6157fd848285016157c7565b91505092915050565b7f455243323938313a20726f79616c7479206665652077696c6c206578636565645f8201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b5f615860602a83614256565b915061586b82615806565b604082019050919050565b5f6020820190508181035f83015261588d81615854565b9050919050565b7f455243323938313a20696e76616c6964207265636569766572000000000000005f82015250565b5f6158c8601983614256565b91506158d382615894565b602082019050919050565b5f6020820190508181035f8301526158f5816158bc565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f615956602583614256565b9150615961826158fc565b604082019050919050565b5f6020820190508181035f8301526159838161594a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6159e4602483614256565b91506159ef8261598a565b604082019050919050565b5f6020820190508181035f830152615a11816159d8565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f615a4c601983614256565b9150615a5782615a18565b602082019050919050565b5f6020820190508181035f830152615a7981615a40565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f615ada603283614256565b9150615ae582615a80565b604082019050919050565b5f6020820190508181035f830152615b0781615ace565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f615b42602083614256565b9150615b4d82615b0e565b602082019050919050565b5f6020820190508181035f830152615b6f81615b36565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615baa601c83614256565b9150615bb582615b76565b602082019050919050565b5f6020820190508181035f830152615bd781615b9e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f615c0282615bde565b615c0c8185615be8565b9350615c1c818560208601614266565b615c258161428e565b840191505092915050565b5f608082019050615c435f830187614354565b615c506020830186614354565b615c5d60408301856143ba565b8181036060830152615c6f8184615bf8565b905095945050505050565b5f81519050615c88816140eb565b92915050565b5f60208284031215615ca357615ca26140b8565b5b5f615cb084828501615c7a565b9150509291505056fea2646970667358221220651d214871294d907a5d0ee78e5ef765d47df9fa24d45822a764a4dfb671b46a64736f6c63430008160033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000065c0e9e00000000000000000000000000000000000000000000000000000000065c122200000000000000000000000000000000000000000000000000000000065c15a600000000000000000000000000000000000000000000000000000000065c1767f00000000000000000000000000000000000000000000000000000000000008ae00000000000000000000000006973fe88cc9a96c6f5eaf9da50f6a39495aa6ca0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c436974697a656e205a65726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343545a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004868747470733a2f2f716170692e716f72706f2e776f726c642f6170692f76312f7075626c69632d626c6f636b636861696e2d646174612f6e66742f636974697a656e2d7a65726f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d657461646174612e716f72706f2e776f726c642f63632f636974697a656e5f7a65726f2e6a736f6e000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Citizen Zero
Arg [1] : symbol_ (string): CTZ
Arg [2] : baseURI_ (string): https://qapi.qorpo.world/api/v1/public-blockchain-data/nft/citizen-zero/
Arg [3] : contractURI_ (string): https://metadata.qorpo.world/cc/citizen_zero.json
Arg [4] : whitelistMintStart_ (uint64): 1707141600
Arg [5] : fcfsMintStart_ (uint64): 1707156000
Arg [6] : publicMintStart_ (uint64): 1707170400
Arg [7] : mintEnd_ (uint64): 1707177599
Arg [8] : mintLimit_ (uint256): 2222
Arg [9] : royaltyReceiver_ (address): 0x06973fE88cC9a96C6F5eAf9da50f6A39495Aa6Ca
Arg [10] : royaltyFeeNumerator_ (uint96): 50
-----Encoded View---------------
22 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 0000000000000000000000000000000000000000000000000000000065c0e9e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000065c12220
Arg [6] : 0000000000000000000000000000000000000000000000000000000065c15a60
Arg [7] : 0000000000000000000000000000000000000000000000000000000065c1767f
Arg [8] : 00000000000000000000000000000000000000000000000000000000000008ae
Arg [9] : 00000000000000000000000006973fe88cc9a96c6f5eaf9da50f6a39495aa6ca
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [12] : 436974697a656e205a65726f0000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [14] : 43545a0000000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000048
Arg [16] : 68747470733a2f2f716170692e716f72706f2e776f726c642f6170692f76312f
Arg [17] : 7075626c69632d626c6f636b636861696e2d646174612f6e66742f636974697a
Arg [18] : 656e2d7a65726f2f000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [20] : 68747470733a2f2f6d657461646174612e716f72706f2e776f726c642f63632f
Arg [21] : 636974697a656e5f7a65726f2e6a736f6e000000000000000000000000000000
Deployed Bytecode Sourcemap
37316:7255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38855:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39514:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29255:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30207:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29787:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;837:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42734:1117;;;;;;;;;;;;;:::i;:::-;;40578:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30851:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24197:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;42122:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;43859:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31229:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40822:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;777:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28974:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39411:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43979:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28672:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1751:146;;;;;;;;;;;;;:::i;:::-;;2066:240;;;;;;;;;;;;;:::i;:::-;;37573:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;810:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29354:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37469:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40250:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30436:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2314:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39689:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31422:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2589:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39211:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29457:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40352:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39983:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;875:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41054:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41765:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41331:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40473:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30629:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37609:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37539:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1905:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44087:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40698:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37500:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38855:348;39011:4;39053:37;39078:11;39053:24;:37::i;:::-;:92;;;;39107:38;39133:11;39107:25;:38::i;:::-;39053:92;:142;;;;39184:10;39177:18;;39162:33;;;:11;:33;;;;39053:142;39033:162;;38855:348;;;:::o;39514:167::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39631:42:::1;39650:8;39660:12;39631:18;:42::i;:::-;39514:167:::0;;:::o;29255:91::-;29300:13;29333:5;29326:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29255:91;:::o;30207:221::-;30328:7;30353:23;30368:7;30353:14;:23::i;:::-;30396:15;:24;30412:7;30396:24;;;;;;;;;;;;;;;;;;;;;30389:31;;30207:221;;;:::o;29787:412::-;29868:13;29884:23;29899:7;29884:14;:23::i;:::-;29868:39;;29932:5;29926:11;;:2;:11;;;29918:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30024:5;30010:19;;:10;:19;;;:58;;;;30033:35;30050:5;30057:10;30033:16;:35::i;:::-;30010:58;29988:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30170:21;30179:2;30183:7;30170:8;:21::i;:::-;29857:342;29787:412;;:::o;837:31::-;;;;;;;;;;;;;:::o;42734:1117::-;1174:6;;;;;;;;;;;1173:7;1165:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;42820:7:::1;;;;;;;;;;;42802:25;;:15;:25;42780:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;42945:9;;42924:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;42902:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;43075:1;43047:13;:25;43061:10;43047:25;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;43025:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;43207:9;43193:23;;:10;:23;;;43171:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;43301:13;:25;43315:10;43301:25;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;43361:15;;;;;;;;;;;43343:33;;:15;:33;43339:505;;;43393:28;43410:10;43393:16;:28::i;:::-;43339:505;;;43475:13;;;;;;;;;;;43457:31;;:15;:31;:60;;;;;43513:4;43492:25;;:5;:17;43498:10;43492:17;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;43457:60;43439:405;;;43544:28;43561:10;43544:16;:28::i;:::-;43439:405;;;43626:18;;;;;;;;;;;43608:36;;:15;:36;:83;;;;;43687:4;43661:30;;:10;:22;43672:10;43661:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;43608:83;43590:254;;;43718:28;43735:10;43718:16;:28::i;:::-;43590:254;;;43779:53;;;;;;;;;;:::i;:::-;;;;;;;;43590:254;43439:405;43339:505;42734:1117::o:0;40578:112::-;40630:7;40657:25;:15;:23;:25::i;:::-;40650:32;;40578:112;:::o;30851:370::-;31060:39;31079:10;31091:7;31060:18;:39::i;:::-;31038:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;31185:28;31195:4;31201:2;31205:7;31185:9;:28::i;:::-;30851:370;;;:::o;24197:501::-;24337:7;24346;24371:26;24400:17;:26;24418:7;24400:26;;;;;;;;;;;24371:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24471:1;24443:30;;:7;:16;;;:30;;;24439:92;;24500:19;24490:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24439:92;24543:21;24620:17;:15;:17::i;:::-;24567:70;;24580:7;:23;;;24568:35;;:9;:35;;;;:::i;:::-;24567:70;;;;:::i;:::-;24543:94;;24658:7;:16;;;24676:13;24650:40;;;;;;24197:501;;;;;:::o;42122:456::-;42229:26;42270:19;42304:28;42360:23;42375:7;42360:14;:23::i;:::-;42416:16;:25;42433:7;42416:25;;;;;;;;;;;:38;;42469:16;:25;42486:7;42469:25;;;;;;;;;;;:37;;;42521:16;:25;42538:7;42521:25;;;;;;;;;;;:38;;42394:176;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42122:456;;;;;:::o;43859:112::-;43920:4;43944:10;:19;43955:7;43944:19;;;;;;;;;;;;;;;;;;;;;;;;;43937:26;;43859:112;;;:::o;31229:185::-;31367:39;31384:4;31390:2;31394:7;31367:39;;;;;;;;;;;;:16;:39::i;:::-;31229:185;;;:::o;40822:224::-;40901:39;40920:10;40932:7;40901:18;:39::i;:::-;40879:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;41024:14;41030:7;41024:5;:14::i;:::-;40822:224;:::o;777:26::-;;;;;;;;;;;;;:::o;28974:273::-;29091:7;29116:13;29132:17;29141:7;29132:8;:17::i;:::-;29116:33;;29185:1;29168:19;;:5;:19;;;29160:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29234:5;29227:12;;;28974:273;;;:::o;39411:95::-;39475:23;39490:7;39475:23;;;;;;:::i;:::-;;;;;;;;39411:95;:::o;43979:100::-;44033:4;44057:5;:14;44063:7;44057:14;;;;;;;;;;;;;;;;;;;;;;;;;44050:21;;43979:100;;;:::o;28672:294::-;28789:7;28853:1;28836:19;;:5;:19;;;28814:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28942:9;:16;28952:5;28942:16;;;;;;;;;;;;;;;;28935:23;;28672:294;;;:::o;1751:146::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;1857:1:::1;1821:39;;1842:5;;;;;;;;;;;1821:39;;;;;;;;;;;;1887:1;1871:5;;:18;;;;;;;;;;;;;;;;;;1751:146::o:0;2066:240::-;1174:6;;;;;;;;;;;1173:7;1165:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2145:16:::1;;;;;;;;;;;2131:30;;:10;:30;;;2123:39;;;::::0;::::1;;2206:16;;;;;;;;;;;2178:45;;2199:5;;;;;;;;;;;2178:45;;;;;;;;;;;;2242:16;;;;;;;;;;;2234:5;;:24;;;;;;;;;;;;;;;;;;2296:1;2269:16;;:29;;;;;;;;;;;;;;;;;;2066:240::o:0;37573:29::-;;;;;;;;;;;;;:::o;810:20::-;;;;;;;;;;;;;:::o;29354:95::-;29401:13;29434:7;29427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29354:95;:::o;37469:24::-;;;;:::o;40250:94::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40317:19:::1;40328:7;40317:10;:19::i;:::-;40250:94:::0;:::o;30436:185::-;30563:50;30582:10;30594:8;30604;30563:18;:50::i;:::-;30436:185;;:::o;2314:267::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2430:8:::1;2426:148;;;2488:4;2455:19;:30;2475:9;2455:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;2426:148;;;2532:19;:30;2552:9;2532:30;;;;;;;;;;;;;;;;2525:37;;;;;;;;;;;2426:148;2314:267:::0;;:::o;39689:286::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39846:9:::1;39841:127;39865:18;:25;39861:1;:29;39841:127;;;39948:8;39912:10;:33;39923:18;39942:1;39923:21;;;;;;;;:::i;:::-;;;;;;;;39912:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;39892:3;;;;;39841:127;;;;39689:286:::0;;:::o;31422:357::-;31610:39;31629:10;31641:7;31610:18;:39::i;:::-;31588:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;31733:38;31747:4;31753:2;31757:7;31766:4;31733:13;:38::i;:::-;31422:357;;;;:::o;2589:145::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2658:7:::1;2649:6;;:16;;;;;;;;;;;;;;;;;;2680:6;;;;;;;;;;;2676:51;;;2708:7;;;;;;;;;;2676:51;2589:145:::0;:::o;39211:192::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39352:43:::1;39372:11;39385:9;39352:43;;;;;;;:::i;:::-;;;;;;;;39211:192:::0;;:::o;29457:322::-;29557:13;29588:23;29603:7;29588:14;:23::i;:::-;29667:1;29648:8;29642:22;;;;;:::i;:::-;;;:26;:129;;;;;;;;;;;;;;;;;29712:8;29722:25;29739:7;29722:16;:25::i;:::-;29695:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29642:129;29622:149;;29457:322;;;:::o;40352:113::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40446:11:::1;40431:12;:26;;;;;;:::i;:::-;;40352:113:::0;:::o;39983:259::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;40128:9:::1;40123:112;40147:13;:20;40143:1;:24;40123:112;;;40215:8;40189:5;:23;40195:13;40209:1;40195:16;;;;;;;;:::i;:::-;;;;;;;;40189:23;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40169:3;;;;;40123:112;;;;39983:259:::0;;:::o;875:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;41054:269::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;41184:23:::1;41199:7;41184:14;:23::i;:::-;41218:16;:25;41235:7;41218:25;;;;;;;;;;;:38;;41262:13;41218:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41292:23;41307:7;41292:23;;;;;;:::i;:::-;;;;;;;;41054:269:::0;;:::o;41765:349::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;41972:19:::1;41951:18;;:40;;;;;;;;;;;;;;;;;;42018:14;42002:13;;:30;;;;;;;;;;;;;;;;;;42061:16;42043:15;;:34;;;;;;;;;;;;;;;;;;42098:8;42088:7;;:18;;;;;;;;;;;;;;;;;;41765:349:::0;;;;:::o;41331:426::-;1597:19;:31;1617:10;1597:31;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;1646:5;;;;;;;;;;;1632:19;;:10;:19;;;1597:54;1575:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;41468:23:::1;41483:7;41468:14;:23::i;:::-;41502:25;:13;:23;:25::i;:::-;41566:144;;;;;;;;41596:12;41566:144;;;;41623:23;:13;:21;:23::i;:::-;41566:144;;;;41661:16;:25;41678:7;41661:25;;;;;;;;;;;:38;;41566:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;41538:16:::1;:25;41555:7;41538:25;;;;;;;;;;;:172;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;41726:23;41741:7;41726:23;;;;;;:::i;:::-;;;;;;;;41331:426:::0;;:::o;40473:97::-;40517:13;40550:12;40543:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40473:97;:::o;30629:214::-;30771:4;30800:18;:25;30819:5;30800:25;;;;;;;;;;;;;;;:35;30826:8;30800:35;;;;;;;;;;;;;;;;;;;;;;;;;30793:42;;30629:214;;;;:::o;37609:21::-;;;;;;;;;;;;;:::o;37539:27::-;;;;;;;;;;;;;:::o;1905:153::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1987:23;;:9;:23;;::::0;1979:32:::1;;;::::0;::::1;;2041:9;2022:16;;:28;;;;;;;;;;;;;;;;;;1905:153:::0;:::o;44087:406::-;1285:5;;;;;;;;;;;1271:19;;:10;:19;;;1263:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:1:::1;44201:29;;:15;:29;;::::0;44197:289:::1;;44255:10;44247:28;;:36;44276:6;44247:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44197:289;;;44330:1;44320:6;:11:::0;44316:91:::1;;44366:15;44359:33;;;44401:4;44359:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44350:57;;44316:91;44429:15;44422:32;;;44455:10;44467:6;44422:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44197:289;44087:406:::0;;:::o;40698:116::-;40758:6;40784:13;:22;40798:7;40784:22;;;;;;;;;;;;;;;;;;;;;;;;;40777:29;;40698:116;;;:::o;37500:32::-;;;;;;;;;;;;;:::o;28204:355::-;28351:4;28408:25;28393:40;;;:11;:40;;;;:105;;;;28465:33;28450:48;;;:11;:48;;;;28393:105;:158;;;;28515:36;28539:11;28515:23;:36::i;:::-;28393:158;28373:178;;28204:355;;;:::o;23898:291::-;24045:4;24102:26;24087:41;;;:11;:41;;;;:94;;;;24145:36;24169:11;24145:23;:36::i;:::-;24087:94;24067:114;;23898:291;;;:::o;24811:392::-;24967:17;:15;:17::i;:::-;24951:33;;:12;:33;;;;24929:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:1;25073:22;;:8;:22;;;25065:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25160:35;;;;;;;;25172:8;25160:35;;;;;;25182:12;25160:35;;;;;25138:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24811:392;;:::o;35534:135::-;35616:16;35624:7;35616;:16::i;:::-;35608:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35534:135;:::o;35029:174::-;35131:2;35104:15;:24;35120:7;35104:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35187:7;35183:2;35149:46;;35158:23;35173:7;35158:14;:23::i;:::-;35149:46;;;;;;;;;;;;35029:174;;:::o;42586:140::-;42644:27;:15;:25;:27::i;:::-;42682:36;42688:2;42692:25;:15;:23;:25::i;:::-;42682:5;:36::i;:::-;42586:140;:::o;149:114::-;214:7;241;:14;;;234:21;;149:114;;;:::o;32406:331::-;32535:4;32557:13;32573:23;32588:7;32573:14;:23::i;:::-;32557:39;;32626:5;32615:16;;:7;:16;;;:65;;;;32648:32;32665:5;32672:7;32648:16;:32::i;:::-;32615:65;:113;;;;32721:7;32697:31;;:20;32709:7;32697:11;:20::i;:::-;:31;;;32615:113;32607:122;;;32406:331;;;;:::o;34236:785::-;34409:4;34382:31;;:23;34397:7;34382:14;:23::i;:::-;:31;;;34360:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34511:1;34497:16;;:2;:16;;;34489:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:42;34588:4;34594:2;34598:7;34607:1;34567:20;:42::i;:::-;34669:4;34642:31;;:23;34657:7;34642:14;:23::i;:::-;:31;;;34620:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34756:15;:24;34772:7;34756:24;;;;;;;;;;;;34749:31;;;;;;;;;;;34837:1;34818:9;:15;34828:4;34818:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;34870:1;34853:9;:13;34863:2;34853:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;34912:2;34893:7;:16;34901:7;34893:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34951:7;34947:2;34932:27;;34941:4;34932:27;;;;;;;;;;;;34972:41;34992:4;34998:2;35002:7;35011:1;34972:19;:41::i;:::-;34236:785;;;:::o;24706:97::-;24764:6;24790:5;24783:12;;24706:97;:::o;33752:476::-;33812:13;33828:23;33843:7;33828:14;:23::i;:::-;33812:39;;33864:51;33885:5;33900:1;33904:7;33913:1;33864:20;:51::i;:::-;33934:23;33949:7;33934:14;:23::i;:::-;33926:31;;33975:15;:24;33991:7;33975:24;;;;;;;;;;;;33968:31;;;;;;;;;;;34057:1;34037:9;:16;34047:5;34037:16;;;;;;;;;;;;;;;;:21;;;;;;;;;;;34087:7;:16;34095:7;34087:16;;;;;;;;;;;;34080:23;;;;;;;;;;;34149:7;34145:1;34121:36;;34130:5;34121:36;;;;;;;;;;;;34170:50;34190:5;34205:1;34209:7;34218:1;34170:19;:50::i;:::-;33801:427;33752:476;:::o;32145:117::-;32211:7;32238;:16;32246:7;32238:16;;;;;;;;;;;;;;;;;;;;;32231:23;;32145:117;;;:::o;28567:97::-;28649:7;28638:8;:18;;;;;;:::i;:::-;;28567:97;:::o;35211:315::-;35366:8;35357:17;;:5;:17;;;35349:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35453:8;35415:18;:25;35434:5;35415:25;;;;;;;;;;;;;;;:35;35441:8;35415:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35499:8;35477:41;;35492:5;35477:41;;;35509:8;35477:41;;;;;;:::i;:::-;;;;;;;;35211:315;;;:::o;31787:350::-;31943:28;31953:4;31959:2;31963:7;31943:9;:28::i;:::-;32004:47;32027:4;32033:2;32037:7;32046:4;32004:22;:47::i;:::-;31982:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;31787:350;;;;:::o;20304:716::-;20360:13;20411:14;20448:1;20428:17;20439:5;20428:10;:17::i;:::-;:21;20411:38;;20464:20;20498:6;20487:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20464:41;;20520:11;20649:6;20645:2;20641:15;20633:6;20629:28;20622:35;;20686:288;20693:4;20686:288;;;20718:5;;;;;;;;20860:8;20855:2;20848:5;20844:14;20839:30;20834:3;20826:44;20916:2;20907:11;;;;;;:::i;:::-;;;;;20950:1;20941:5;:10;20686:288;20937:21;20686:288;20995:6;20988:13;;;;;20304:716;;;:::o;271:127::-;378:1;360:7;:14;;;:19;;;;;;;;;;;271:127;:::o;23424:207::-;23554:4;23598:25;23583:40;;;:11;:40;;;;23576:47;;23424:207;;;:::o;32270:128::-;32335:4;32388:1;32359:31;;:17;32368:7;32359:8;:17::i;:::-;:31;;;;32352:38;;32270:128;;;:::o;33190:554::-;33284:1;33270:16;;:2;:16;;;33262:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33343:16;33351:7;33343;:16::i;:::-;33342:17;33334:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33405:48;33434:1;33438:2;33442:7;33451:1;33405:20;:48::i;:::-;33475:16;33483:7;33475;:16::i;:::-;33474:17;33466:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33579:1;33562:9;:13;33572:2;33562:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;33623:2;33604:7;:16;33612:7;33604:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33668:7;33664:2;33643:33;;33660:1;33643:33;;;;;;;;;;;;33689:47;33717:1;33721:2;33725:7;33734:1;33689:19;:47::i;:::-;33190:554;;:::o;36716:159::-;;;;;:::o;36883:158::-;;;;;:::o;35677:1031::-;35831:4;35852:14;35863:2;35852:10;:14::i;:::-;35848:853;;;35920:2;35904:36;;;35963:10;35996:4;36023:7;36053:4;35904:172;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35883:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36276:1;36259:6;:13;:18;36255:376;;36302:108;;;;;;;;;;:::i;:::-;;;;;;;;36255:376;36581:6;36575:13;36566:6;36562:2;36558:15;36551:38;35883:763;36150:41;;;36140:51;;;:6;:51;;;;36133:58;;;;;35848:853;36685:4;36678:11;;35677:1031;;;;;;;:::o;17230:922::-;17283:7;17303:14;17320:1;17303:18;;17370:6;17361:5;:15;17357:102;;17406:6;17397:15;;;;;;:::i;:::-;;;;;17441:2;17431:12;;;;17357:102;17486:6;17477:5;:15;17473:102;;17522:6;17513:15;;;;;;:::i;:::-;;;;;17557:2;17547:12;;;;17473:102;17602:6;17593:5;:15;17589:102;;17638:6;17629:15;;;;;;:::i;:::-;;;;;17673:2;17663:12;;;;17589:102;17718:5;17709;:14;17705:99;;17753:5;17744:14;;;;;;:::i;:::-;;;;;17787:1;17777:11;;;;17705:99;17831:5;17822;:14;17818:99;;17866:5;17857:14;;;;;;:::i;:::-;;;;;17900:1;17890:11;;;;17818:99;17944:5;17935;:14;17931:99;;17979:5;17970:14;;;;;;:::i;:::-;;;;;18013:1;18003:11;;;;17931:99;18057:5;18048;:14;18044:66;;18093:1;18083:11;;;;18044:66;18138:6;18131:13;;;17230:922;;;:::o;37194:115::-;37254:4;37300:1;37278:7;:19;;;:23;37271:30;;37194:115;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:109::-;2061:7;2101:26;2094:5;2090:38;2079:49;;2025:109;;;:::o;2140:120::-;2212:23;2229:5;2212:23;:::i;:::-;2205:5;2202:34;2192:62;;2250:1;2247;2240:12;2192:62;2140:120;:::o;2266:137::-;2311:5;2349:6;2336:20;2327:29;;2365:32;2391:5;2365:32;:::i;:::-;2266:137;;;;:::o;2409:472::-;2476:6;2484;2533:2;2521:9;2512:7;2508:23;2504:32;2501:119;;;2539:79;;:::i;:::-;2501:119;2659:1;2684:53;2729:7;2720:6;2709:9;2705:22;2684:53;:::i;:::-;2674:63;;2630:117;2786:2;2812:52;2856:7;2847:6;2836:9;2832:22;2812:52;:::i;:::-;2802:62;;2757:117;2409:472;;;;;:::o;2887:99::-;2939:6;2973:5;2967:12;2957:22;;2887:99;;;:::o;2992:169::-;3076:11;3110:6;3105:3;3098:19;3150:4;3145:3;3141:14;3126:29;;2992:169;;;;:::o;3167:246::-;3248:1;3258:113;3272:6;3269:1;3266:13;3258:113;;;3357:1;3352:3;3348:11;3342:18;3338:1;3333:3;3329:11;3322:39;3294:2;3291:1;3287:10;3282:15;;3258:113;;;3405:1;3396:6;3391:3;3387:16;3380:27;3229:184;3167:246;;;:::o;3419:102::-;3460:6;3511:2;3507:7;3502:2;3495:5;3491:14;3487:28;3477:38;;3419:102;;;:::o;3527:377::-;3615:3;3643:39;3676:5;3643:39;:::i;:::-;3698:71;3762:6;3757:3;3698:71;:::i;:::-;3691:78;;3778:65;3836:6;3831:3;3824:4;3817:5;3813:16;3778:65;:::i;:::-;3868:29;3890:6;3868:29;:::i;:::-;3863:3;3859:39;3852:46;;3619:285;3527:377;;;;:::o;3910:313::-;4023:4;4061:2;4050:9;4046:18;4038:26;;4110:9;4104:4;4100:20;4096:1;4085:9;4081:17;4074:47;4138:78;4211:4;4202:6;4138:78;:::i;:::-;4130:86;;3910:313;;;;:::o;4229:77::-;4266:7;4295:5;4284:16;;4229:77;;;:::o;4312:122::-;4385:24;4403:5;4385:24;:::i;:::-;4378:5;4375:35;4365:63;;4424:1;4421;4414:12;4365:63;4312:122;:::o;4440:139::-;4486:5;4524:6;4511:20;4502:29;;4540:33;4567:5;4540:33;:::i;:::-;4440:139;;;;:::o;4585:329::-;4644:6;4693:2;4681:9;4672:7;4668:23;4664:32;4661:119;;;4699:79;;:::i;:::-;4661:119;4819:1;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4790:117;4585:329;;;;:::o;4920:118::-;5007:24;5025:5;5007:24;:::i;:::-;5002:3;4995:37;4920:118;;:::o;5044:222::-;5137:4;5175:2;5164:9;5160:18;5152:26;;5188:71;5256:1;5245:9;5241:17;5232:6;5188:71;:::i;:::-;5044:222;;;;:::o;5272:474::-;5340:6;5348;5397:2;5385:9;5376:7;5372:23;5368:32;5365:119;;;5403:79;;:::i;:::-;5365:119;5523:1;5548:53;5593:7;5584:6;5573:9;5569:22;5548:53;:::i;:::-;5538:63;;5494:117;5650:2;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5621:118;5272:474;;;;;:::o;5752:118::-;5839:24;5857:5;5839:24;:::i;:::-;5834:3;5827:37;5752:118;;:::o;5876:222::-;5969:4;6007:2;5996:9;5992:18;5984:26;;6020:71;6088:1;6077:9;6073:17;6064:6;6020:71;:::i;:::-;5876:222;;;;:::o;6104:619::-;6181:6;6189;6197;6246:2;6234:9;6225:7;6221:23;6217:32;6214:119;;;6252:79;;:::i;:::-;6214:119;6372:1;6397:53;6442:7;6433:6;6422:9;6418:22;6397:53;:::i;:::-;6387:63;;6343:117;6499:2;6525:53;6570:7;6561:6;6550:9;6546:22;6525:53;:::i;:::-;6515:63;;6470:118;6627:2;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6598:118;6104:619;;;;;:::o;6729:474::-;6797:6;6805;6854:2;6842:9;6833:7;6829:23;6825:32;6822:119;;;6860:79;;:::i;:::-;6822:119;6980:1;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6951:117;7107:2;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7078:118;6729:474;;;;;:::o;7209:332::-;7330:4;7368:2;7357:9;7353:18;7345:26;;7381:71;7449:1;7438:9;7434:17;7425:6;7381:71;:::i;:::-;7462:72;7530:2;7519:9;7515:18;7506:6;7462:72;:::i;:::-;7209:332;;;;;:::o;7547:113::-;7613:6;7647:5;7641:12;7631:22;;7547:113;;;:::o;7666:183::-;7764:11;7798:6;7793:3;7786:19;7838:4;7833:3;7829:14;7814:29;;7666:183;;;;:::o;7855:131::-;7921:4;7944:3;7936:11;;7974:4;7969:3;7965:14;7957:22;;7855:131;;;:::o;7992:89::-;8028:7;8068:6;8061:5;8057:18;8046:29;;7992:89;;;:::o;8087:105::-;8162:23;8179:5;8162:23;:::i;:::-;8157:3;8150:36;8087:105;;:::o;8198:175::-;8265:10;8286:44;8326:3;8318:6;8286:44;:::i;:::-;8362:4;8357:3;8353:14;8339:28;;8198:175;;;;:::o;8379:112::-;8448:4;8480;8475:3;8471:14;8463:22;;8379:112;;;:::o;8525:724::-;8642:3;8671:53;8718:5;8671:53;:::i;:::-;8740:85;8818:6;8813:3;8740:85;:::i;:::-;8733:92;;8849:55;8898:5;8849:55;:::i;:::-;8927:7;8958:1;8943:281;8968:6;8965:1;8962:13;8943:281;;;9044:6;9038:13;9071:61;9128:3;9113:13;9071:61;:::i;:::-;9064:68;;9155:59;9207:6;9155:59;:::i;:::-;9145:69;;9003:221;8990:1;8987;8983:9;8978:14;;8943:281;;;8947:14;9240:3;9233:10;;8647:602;;;8525:724;;;;:::o;9255:680::-;9472:4;9510:2;9499:9;9495:18;9487:26;;9559:9;9553:4;9549:20;9545:1;9534:9;9530:17;9523:47;9587:78;9660:4;9651:6;9587:78;:::i;:::-;9579:86;;9675:72;9743:2;9732:9;9728:18;9719:6;9675:72;:::i;:::-;9794:9;9788:4;9784:20;9779:2;9768:9;9764:18;9757:48;9822:106;9923:4;9914:6;9822:106;:::i;:::-;9814:114;;9255:680;;;;;;:::o;9941:329::-;10000:6;10049:2;10037:9;10028:7;10024:23;10020:32;10017:119;;;10055:79;;:::i;:::-;10017:119;10175:1;10200:53;10245:7;10236:6;10225:9;10221:22;10200:53;:::i;:::-;10190:63;;10146:117;9941:329;;;;:::o;10276:101::-;10312:7;10352:18;10345:5;10341:30;10330:41;;10276:101;;;:::o;10383:115::-;10468:23;10485:5;10468:23;:::i;:::-;10463:3;10456:36;10383:115;;:::o;10504:218::-;10595:4;10633:2;10622:9;10618:18;10610:26;;10646:69;10712:1;10701:9;10697:17;10688:6;10646:69;:::i;:::-;10504:218;;;;:::o;10728:117::-;10837:1;10834;10827:12;10851:117;10960:1;10957;10950:12;10974:180;11022:77;11019:1;11012:88;11119:4;11116:1;11109:15;11143:4;11140:1;11133:15;11160:281;11243:27;11265:4;11243:27;:::i;:::-;11235:6;11231:40;11373:6;11361:10;11358:22;11337:18;11325:10;11322:34;11319:62;11316:88;;;11384:18;;:::i;:::-;11316:88;11424:10;11420:2;11413:22;11203:238;11160:281;;:::o;11447:129::-;11481:6;11508:20;;:::i;:::-;11498:30;;11537:33;11565:4;11557:6;11537:33;:::i;:::-;11447:129;;;:::o;11582:308::-;11644:4;11734:18;11726:6;11723:30;11720:56;;;11756:18;;:::i;:::-;11720:56;11794:29;11816:6;11794:29;:::i;:::-;11786:37;;11878:4;11872;11868:15;11860:23;;11582:308;;;:::o;11896:146::-;11993:6;11988:3;11983;11970:30;12034:1;12025:6;12020:3;12016:16;12009:27;11896:146;;;:::o;12048:425::-;12126:5;12151:66;12167:49;12209:6;12167:49;:::i;:::-;12151:66;:::i;:::-;12142:75;;12240:6;12233:5;12226:21;12278:4;12271:5;12267:16;12316:3;12307:6;12302:3;12298:16;12295:25;12292:112;;;12323:79;;:::i;:::-;12292:112;12413:54;12460:6;12455:3;12450;12413:54;:::i;:::-;12132:341;12048:425;;;;;:::o;12493:340::-;12549:5;12598:3;12591:4;12583:6;12579:17;12575:27;12565:122;;12606:79;;:::i;:::-;12565:122;12723:6;12710:20;12748:79;12823:3;12815:6;12808:4;12800:6;12796:17;12748:79;:::i;:::-;12739:88;;12555:278;12493:340;;;;:::o;12839:509::-;12908:6;12957:2;12945:9;12936:7;12932:23;12928:32;12925:119;;;12963:79;;:::i;:::-;12925:119;13111:1;13100:9;13096:17;13083:31;13141:18;13133:6;13130:30;13127:117;;;13163:79;;:::i;:::-;13127:117;13268:63;13323:7;13314:6;13303:9;13299:22;13268:63;:::i;:::-;13258:73;;13054:287;12839:509;;;;:::o;13354:116::-;13424:21;13439:5;13424:21;:::i;:::-;13417:5;13414:32;13404:60;;13460:1;13457;13450:12;13404:60;13354:116;:::o;13476:133::-;13519:5;13557:6;13544:20;13535:29;;13573:30;13597:5;13573:30;:::i;:::-;13476:133;;;;:::o;13615:468::-;13680:6;13688;13737:2;13725:9;13716:7;13712:23;13708:32;13705:119;;;13743:79;;:::i;:::-;13705:119;13863:1;13888:53;13933:7;13924:6;13913:9;13909:22;13888:53;:::i;:::-;13878:63;;13834:117;13990:2;14016:50;14058:7;14049:6;14038:9;14034:22;14016:50;:::i;:::-;14006:60;;13961:115;13615:468;;;;;:::o;14089:311::-;14166:4;14256:18;14248:6;14245:30;14242:56;;;14278:18;;:::i;:::-;14242:56;14328:4;14320:6;14316:17;14308:25;;14388:4;14382;14378:15;14370:23;;14089:311;;;:::o;14406:117::-;14515:1;14512;14505:12;14546:710;14642:5;14667:81;14683:64;14740:6;14683:64;:::i;:::-;14667:81;:::i;:::-;14658:90;;14768:5;14797:6;14790:5;14783:21;14831:4;14824:5;14820:16;14813:23;;14884:4;14876:6;14872:17;14864:6;14860:30;14913:3;14905:6;14902:15;14899:122;;;14932:79;;:::i;:::-;14899:122;15047:6;15030:220;15064:6;15059:3;15056:15;15030:220;;;15139:3;15168:37;15201:3;15189:10;15168:37;:::i;:::-;15163:3;15156:50;15235:4;15230:3;15226:14;15219:21;;15106:144;15090:4;15085:3;15081:14;15074:21;;15030:220;;;15034:21;14648:608;;14546:710;;;;;:::o;15279:370::-;15350:5;15399:3;15392:4;15384:6;15380:17;15376:27;15366:122;;15407:79;;:::i;:::-;15366:122;15524:6;15511:20;15549:94;15639:3;15631:6;15624:4;15616:6;15612:17;15549:94;:::i;:::-;15540:103;;15356:293;15279:370;;;;:::o;15655:678::-;15745:6;15753;15802:2;15790:9;15781:7;15777:23;15773:32;15770:119;;;15808:79;;:::i;:::-;15770:119;15956:1;15945:9;15941:17;15928:31;15986:18;15978:6;15975:30;15972:117;;;16008:79;;:::i;:::-;15972:117;16113:78;16183:7;16174:6;16163:9;16159:22;16113:78;:::i;:::-;16103:88;;15899:302;16240:2;16266:50;16308:7;16299:6;16288:9;16284:22;16266:50;:::i;:::-;16256:60;;16211:115;15655:678;;;;;:::o;16339:307::-;16400:4;16490:18;16482:6;16479:30;16476:56;;;16512:18;;:::i;:::-;16476:56;16550:29;16572:6;16550:29;:::i;:::-;16542:37;;16634:4;16628;16624:15;16616:23;;16339:307;;;:::o;16652:423::-;16729:5;16754:65;16770:48;16811:6;16770:48;:::i;:::-;16754:65;:::i;:::-;16745:74;;16842:6;16835:5;16828:21;16880:4;16873:5;16869:16;16918:3;16909:6;16904:3;16900:16;16897:25;16894:112;;;16925:79;;:::i;:::-;16894:112;17015:54;17062:6;17057:3;17052;17015:54;:::i;:::-;16735:340;16652:423;;;;;:::o;17094:338::-;17149:5;17198:3;17191:4;17183:6;17179:17;17175:27;17165:122;;17206:79;;:::i;:::-;17165:122;17323:6;17310:20;17348:78;17422:3;17414:6;17407:4;17399:6;17395:17;17348:78;:::i;:::-;17339:87;;17155:277;17094:338;;;;:::o;17438:943::-;17533:6;17541;17549;17557;17606:3;17594:9;17585:7;17581:23;17577:33;17574:120;;;17613:79;;:::i;:::-;17574:120;17733:1;17758:53;17803:7;17794:6;17783:9;17779:22;17758:53;:::i;:::-;17748:63;;17704:117;17860:2;17886:53;17931:7;17922:6;17911:9;17907:22;17886:53;:::i;:::-;17876:63;;17831:118;17988:2;18014:53;18059:7;18050:6;18039:9;18035:22;18014:53;:::i;:::-;18004:63;;17959:118;18144:2;18133:9;18129:18;18116:32;18175:18;18167:6;18164:30;18161:117;;;18197:79;;:::i;:::-;18161:117;18302:62;18356:7;18347:6;18336:9;18332:22;18302:62;:::i;:::-;18292:72;;18087:287;17438:943;;;;;;;:::o;18387:323::-;18443:6;18492:2;18480:9;18471:7;18467:23;18463:32;18460:119;;;18498:79;;:::i;:::-;18460:119;18618:1;18643:50;18685:7;18676:6;18665:9;18661:22;18643:50;:::i;:::-;18633:60;;18589:114;18387:323;;;;:::o;18716:120::-;18788:23;18805:5;18788:23;:::i;:::-;18781:5;18778:34;18768:62;;18826:1;18823;18816:12;18768:62;18716:120;:::o;18842:137::-;18887:5;18925:6;18912:20;18903:29;;18941:32;18967:5;18941:32;:::i;:::-;18842:137;;;;:::o;18985:472::-;19052:6;19060;19109:2;19097:9;19088:7;19084:23;19080:32;19077:119;;;19115:79;;:::i;:::-;19077:119;19235:1;19260:53;19305:7;19296:6;19285:9;19281:22;19260:53;:::i;:::-;19250:63;;19206:117;19362:2;19388:52;19432:7;19423:6;19412:9;19408:22;19388:52;:::i;:::-;19378:62;;19333:117;18985:472;;;;;:::o;19463:120::-;19535:23;19552:5;19535:23;:::i;:::-;19528:5;19525:34;19515:62;;19573:1;19570;19563:12;19515:62;19463:120;:::o;19589:137::-;19634:5;19672:6;19659:20;19650:29;;19688:32;19714:5;19688:32;:::i;:::-;19589:137;;;;:::o;19732:757::-;19814:6;19822;19830;19838;19887:3;19875:9;19866:7;19862:23;19858:33;19855:120;;;19894:79;;:::i;:::-;19855:120;20014:1;20039:52;20083:7;20074:6;20063:9;20059:22;20039:52;:::i;:::-;20029:62;;19985:116;20140:2;20166:52;20210:7;20201:6;20190:9;20186:22;20166:52;:::i;:::-;20156:62;;20111:117;20267:2;20293:52;20337:7;20328:6;20317:9;20313:22;20293:52;:::i;:::-;20283:62;;20238:117;20394:2;20420:52;20464:7;20455:6;20444:9;20440:22;20420:52;:::i;:::-;20410:62;;20365:117;19732:757;;;;;;;:::o;20495:654::-;20573:6;20581;20630:2;20618:9;20609:7;20605:23;20601:32;20598:119;;;20636:79;;:::i;:::-;20598:119;20756:1;20781:53;20826:7;20817:6;20806:9;20802:22;20781:53;:::i;:::-;20771:63;;20727:117;20911:2;20900:9;20896:18;20883:32;20942:18;20934:6;20931:30;20928:117;;;20964:79;;:::i;:::-;20928:117;21069:63;21124:7;21115:6;21104:9;21100:22;21069:63;:::i;:::-;21059:73;;20854:288;20495:654;;;;;:::o;21155:474::-;21223:6;21231;21280:2;21268:9;21259:7;21255:23;21251:32;21248:119;;;21286:79;;:::i;:::-;21248:119;21406:1;21431:53;21476:7;21467:6;21456:9;21452:22;21431:53;:::i;:::-;21421:63;;21377:117;21533:2;21559:53;21604:7;21595:6;21584:9;21580:22;21559:53;:::i;:::-;21549:63;;21504:118;21155:474;;;;;:::o;21635:115::-;21720:23;21737:5;21720:23;:::i;:::-;21715:3;21708:36;21635:115;;:::o;21756:218::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21898:69;21964:1;21953:9;21949:17;21940:6;21898:69;:::i;:::-;21756:218;;;;:::o;21980:172::-;22120:24;22116:1;22108:6;22104:14;22097:48;21980:172;:::o;22158:366::-;22300:3;22321:67;22385:2;22380:3;22321:67;:::i;:::-;22314:74;;22397:93;22486:3;22397:93;:::i;:::-;22515:2;22510:3;22506:12;22499:19;;22158:366;;;:::o;22530:419::-;22696:4;22734:2;22723:9;22719:18;22711:26;;22783:9;22777:4;22773:20;22769:1;22758:9;22754:17;22747:47;22811:131;22937:4;22811:131;:::i;:::-;22803:139;;22530:419;;;:::o;22955:180::-;23003:77;23000:1;22993:88;23100:4;23097:1;23090:15;23124:4;23121:1;23114:15;23141:320;23185:6;23222:1;23216:4;23212:12;23202:22;;23269:1;23263:4;23259:12;23290:18;23280:81;;23346:4;23338:6;23334:17;23324:27;;23280:81;23408:2;23400:6;23397:14;23377:18;23374:38;23371:84;;23427:18;;:::i;:::-;23371:84;23192:269;23141:320;;;:::o;23467:220::-;23607:34;23603:1;23595:6;23591:14;23584:58;23676:3;23671:2;23663:6;23659:15;23652:28;23467:220;:::o;23693:366::-;23835:3;23856:67;23920:2;23915:3;23856:67;:::i;:::-;23849:74;;23932:93;24021:3;23932:93;:::i;:::-;24050:2;24045:3;24041:12;24034:19;;23693:366;;;:::o;24065:419::-;24231:4;24269:2;24258:9;24254:18;24246:26;;24318:9;24312:4;24308:20;24304:1;24293:9;24289:17;24282:47;24346:131;24472:4;24346:131;:::i;:::-;24338:139;;24065:419;;;:::o;24490:248::-;24630:34;24626:1;24618:6;24614:14;24607:58;24699:31;24694:2;24686:6;24682:15;24675:56;24490:248;:::o;24744:366::-;24886:3;24907:67;24971:2;24966:3;24907:67;:::i;:::-;24900:74;;24983:93;25072:3;24983:93;:::i;:::-;25101:2;25096:3;25092:12;25085:19;;24744:366;;;:::o;25116:419::-;25282:4;25320:2;25309:9;25305:18;25297:26;;25369:9;25363:4;25359:20;25355:1;25344:9;25340:17;25333:47;25397:131;25523:4;25397:131;:::i;:::-;25389:139;;25116:419;;;:::o;25541:168::-;25681:20;25677:1;25669:6;25665:14;25658:44;25541:168;:::o;25715:366::-;25857:3;25878:67;25942:2;25937:3;25878:67;:::i;:::-;25871:74;;25954:93;26043:3;25954:93;:::i;:::-;26072:2;26067:3;26063:12;26056:19;;25715:366;;;:::o;26087:419::-;26253:4;26291:2;26280:9;26276:18;26268:26;;26340:9;26334:4;26330:20;26326:1;26315:9;26311:17;26304:47;26368:131;26494:4;26368:131;:::i;:::-;26360:139;;26087:419;;;:::o;26512:223::-;26652:34;26648:1;26640:6;26636:14;26629:58;26721:6;26716:2;26708:6;26704:15;26697:31;26512:223;:::o;26741:366::-;26883:3;26904:67;26968:2;26963:3;26904:67;:::i;:::-;26897:74;;26980:93;27069:3;26980:93;:::i;:::-;27098:2;27093:3;27089:12;27082:19;;26741:366;;;:::o;27113:419::-;27279:4;27317:2;27306:9;27302:18;27294:26;;27366:9;27360:4;27356:20;27352:1;27341:9;27337:17;27330:47;27394:131;27520:4;27394:131;:::i;:::-;27386:139;;27113:419;;;:::o;27538:143::-;27595:5;27626:6;27620:13;27611:22;;27642:33;27669:5;27642:33;:::i;:::-;27538:143;;;;:::o;27687:351::-;27757:6;27806:2;27794:9;27785:7;27781:23;27777:32;27774:119;;;27812:79;;:::i;:::-;27774:119;27932:1;27957:64;28013:7;28004:6;27993:9;27989:22;27957:64;:::i;:::-;27947:74;;27903:128;27687:351;;;;:::o;28044:182::-;28184:34;28180:1;28172:6;28168:14;28161:58;28044:182;:::o;28232:366::-;28374:3;28395:67;28459:2;28454:3;28395:67;:::i;:::-;28388:74;;28471:93;28560:3;28471:93;:::i;:::-;28589:2;28584:3;28580:12;28573:19;;28232:366;;;:::o;28604:419::-;28770:4;28808:2;28797:9;28793:18;28785:26;;28857:9;28851:4;28847:20;28843:1;28832:9;28828:17;28821:47;28885:131;29011:4;28885:131;:::i;:::-;28877:139;;28604:419;;;:::o;29029:243::-;29169:34;29165:1;29157:6;29153:14;29146:58;29238:26;29233:2;29225:6;29221:15;29214:51;29029:243;:::o;29278:366::-;29420:3;29441:67;29505:2;29500:3;29441:67;:::i;:::-;29434:74;;29517:93;29606:3;29517:93;:::i;:::-;29635:2;29630:3;29626:12;29619:19;;29278:366;;;:::o;29650:419::-;29816:4;29854:2;29843:9;29839:18;29831:26;;29903:9;29897:4;29893:20;29889:1;29878:9;29874:17;29867:47;29931:131;30057:4;29931:131;:::i;:::-;29923:139;;29650:419;;;:::o;30075:233::-;30215:34;30211:1;30203:6;30199:14;30192:58;30284:16;30279:2;30271:6;30267:15;30260:41;30075:233;:::o;30314:366::-;30456:3;30477:67;30541:2;30536:3;30477:67;:::i;:::-;30470:74;;30553:93;30642:3;30553:93;:::i;:::-;30671:2;30666:3;30662:12;30655:19;;30314:366;;;:::o;30686:419::-;30852:4;30890:2;30879:9;30875:18;30867:26;;30939:9;30933:4;30929:20;30925:1;30914:9;30910:17;30903:47;30967:131;31093:4;30967:131;:::i;:::-;30959:139;;30686:419;;;:::o;31111:180::-;31159:77;31156:1;31149:88;31256:4;31253:1;31246:15;31280:4;31277:1;31270:15;31297:171;31335:3;31358:23;31375:5;31358:23;:::i;:::-;31349:32;;31403:6;31396:5;31393:17;31390:43;;31413:18;;:::i;:::-;31390:43;31460:1;31453:5;31449:13;31442:20;;31297:171;;;:::o;31474:230::-;31614:34;31610:1;31602:6;31598:14;31591:58;31683:13;31678:2;31670:6;31666:15;31659:38;31474:230;:::o;31710:366::-;31852:3;31873:67;31937:2;31932:3;31873:67;:::i;:::-;31866:74;;31949:93;32038:3;31949:93;:::i;:::-;32067:2;32062:3;32058:12;32051:19;;31710:366;;;:::o;32082:419::-;32248:4;32286:2;32275:9;32271:18;32263:26;;32335:9;32329:4;32325:20;32321:1;32310:9;32306:17;32299:47;32363:131;32489:4;32363:131;:::i;:::-;32355:139;;32082:419;;;:::o;32507:232::-;32647:34;32643:1;32635:6;32631:14;32624:58;32716:15;32711:2;32703:6;32699:15;32692:40;32507:232;:::o;32745:366::-;32887:3;32908:67;32972:2;32967:3;32908:67;:::i;:::-;32901:74;;32984:93;33073:3;32984:93;:::i;:::-;33102:2;33097:3;33093:12;33086:19;;32745:366;;;:::o;33117:419::-;33283:4;33321:2;33310:9;33306:18;33298:26;;33370:9;33364:4;33360:20;33356:1;33345:9;33341:17;33334:47;33398:131;33524:4;33398:131;:::i;:::-;33390:139;;33117:419;;;:::o;33542:410::-;33582:7;33605:20;33623:1;33605:20;:::i;:::-;33600:25;;33639:20;33657:1;33639:20;:::i;:::-;33634:25;;33694:1;33691;33687:9;33716:30;33734:11;33716:30;:::i;:::-;33705:41;;33895:1;33886:7;33882:15;33879:1;33876:22;33856:1;33849:9;33829:83;33806:139;;33925:18;;:::i;:::-;33806:139;33590:362;33542:410;;;;:::o;33958:180::-;34006:77;34003:1;33996:88;34103:4;34100:1;34093:15;34127:4;34124:1;34117:15;34144:185;34184:1;34201:20;34219:1;34201:20;:::i;:::-;34196:25;;34235:20;34253:1;34235:20;:::i;:::-;34230:25;;34274:1;34264:35;;34279:18;;:::i;:::-;34264:35;34321:1;34318;34314:9;34309:14;;34144:185;;;;:::o;34335:174::-;34475:26;34471:1;34463:6;34459:14;34452:50;34335:174;:::o;34515:366::-;34657:3;34678:67;34742:2;34737:3;34678:67;:::i;:::-;34671:74;;34754:93;34843:3;34754:93;:::i;:::-;34872:2;34867:3;34863:12;34856:19;;34515:366;;;:::o;34887:419::-;35053:4;35091:2;35080:9;35076:18;35068:26;;35140:9;35134:4;35130:20;35126:1;35115:9;35111:17;35104:47;35168:131;35294:4;35168:131;:::i;:::-;35160:139;;34887:419;;;:::o;35312:228::-;35452:34;35448:1;35440:6;35436:14;35429:58;35521:11;35516:2;35508:6;35504:15;35497:36;35312:228;:::o;35546:366::-;35688:3;35709:67;35773:2;35768:3;35709:67;:::i;:::-;35702:74;;35785:93;35874:3;35785:93;:::i;:::-;35903:2;35898:3;35894:12;35887:19;;35546:366;;;:::o;35918:419::-;36084:4;36122:2;36111:9;36107:18;36099:26;;36171:9;36165:4;36161:20;36157:1;36146:9;36142:17;36135:47;36199:131;36325:4;36199:131;:::i;:::-;36191:139;;35918:419;;;:::o;36343:231::-;36483:34;36479:1;36471:6;36467:14;36460:58;36552:14;36547:2;36539:6;36535:15;36528:39;36343:231;:::o;36580:366::-;36722:3;36743:67;36807:2;36802:3;36743:67;:::i;:::-;36736:74;;36819:93;36908:3;36819:93;:::i;:::-;36937:2;36932:3;36928:12;36921:19;;36580:366;;;:::o;36952:419::-;37118:4;37156:2;37145:9;37141:18;37133:26;;37205:9;37199:4;37195:20;37191:1;37180:9;37176:17;37169:47;37233:131;37359:4;37233:131;:::i;:::-;37225:139;;36952:419;;;:::o;37377:180::-;37425:77;37422:1;37415:88;37522:4;37519:1;37512:15;37546:4;37543:1;37536:15;37563:332;37684:4;37722:2;37711:9;37707:18;37699:26;;37735:71;37803:1;37792:9;37788:17;37779:6;37735:71;:::i;:::-;37816:72;37884:2;37873:9;37869:18;37860:6;37816:72;:::i;:::-;37563:332;;;;;:::o;37901:148::-;38003:11;38040:3;38025:18;;37901:148;;;;:::o;38055:141::-;38104:4;38127:3;38119:11;;38150:3;38147:1;38140:14;38184:4;38181:1;38171:18;38163:26;;38055:141;;;:::o;38226:874::-;38329:3;38366:5;38360:12;38395:36;38421:9;38395:36;:::i;:::-;38447:89;38529:6;38524:3;38447:89;:::i;:::-;38440:96;;38567:1;38556:9;38552:17;38583:1;38578:166;;;;38758:1;38753:341;;;;38545:549;;38578:166;38662:4;38658:9;38647;38643:25;38638:3;38631:38;38724:6;38717:14;38710:22;38702:6;38698:35;38693:3;38689:45;38682:52;;38578:166;;38753:341;38820:38;38852:5;38820:38;:::i;:::-;38880:1;38894:154;38908:6;38905:1;38902:13;38894:154;;;38982:7;38976:14;38972:1;38967:3;38963:11;38956:35;39032:1;39023:7;39019:15;39008:26;;38930:4;38927:1;38923:12;38918:17;;38894:154;;;39077:6;39072:3;39068:16;39061:23;;38760:334;;38545:549;;38333:767;;38226:874;;;;:::o;39106:390::-;39212:3;39240:39;39273:5;39240:39;:::i;:::-;39295:89;39377:6;39372:3;39295:89;:::i;:::-;39288:96;;39393:65;39451:6;39446:3;39439:4;39432:5;39428:16;39393:65;:::i;:::-;39483:6;39478:3;39474:16;39467:23;;39216:280;39106:390;;;;:::o;39502:429::-;39679:3;39701:92;39789:3;39780:6;39701:92;:::i;:::-;39694:99;;39810:95;39901:3;39892:6;39810:95;:::i;:::-;39803:102;;39922:3;39915:10;;39502:429;;;;;:::o;39937:93::-;39974:6;40021:2;40016;40009:5;40005:14;40001:23;39991:33;;39937:93;;;:::o;40036:107::-;40080:8;40130:5;40124:4;40120:16;40099:37;;40036:107;;;;:::o;40149:393::-;40218:6;40268:1;40256:10;40252:18;40291:97;40321:66;40310:9;40291:97;:::i;:::-;40409:39;40439:8;40428:9;40409:39;:::i;:::-;40397:51;;40481:4;40477:9;40470:5;40466:21;40457:30;;40530:4;40520:8;40516:19;40509:5;40506:30;40496:40;;40225:317;;40149:393;;;;;:::o;40548:60::-;40576:3;40597:5;40590:12;;40548:60;;;:::o;40614:142::-;40664:9;40697:53;40715:34;40724:24;40742:5;40724:24;:::i;:::-;40715:34;:::i;:::-;40697:53;:::i;:::-;40684:66;;40614:142;;;:::o;40762:75::-;40805:3;40826:5;40819:12;;40762:75;;;:::o;40843:269::-;40953:39;40984:7;40953:39;:::i;:::-;41014:91;41063:41;41087:16;41063:41;:::i;:::-;41055:6;41048:4;41042:11;41014:91;:::i;:::-;41008:4;41001:105;40919:193;40843:269;;;:::o;41118:73::-;41163:3;41118:73;:::o;41197:189::-;41274:32;;:::i;:::-;41315:65;41373:6;41365;41359:4;41315:65;:::i;:::-;41250:136;41197:189;;:::o;41392:186::-;41452:120;41469:3;41462:5;41459:14;41452:120;;;41523:39;41560:1;41553:5;41523:39;:::i;:::-;41496:1;41489:5;41485:13;41476:22;;41452:120;;;41392:186;;:::o;41584:543::-;41685:2;41680:3;41677:11;41674:446;;;41719:38;41751:5;41719:38;:::i;:::-;41803:29;41821:10;41803:29;:::i;:::-;41793:8;41789:44;41986:2;41974:10;41971:18;41968:49;;;42007:8;41992:23;;41968:49;42030:80;42086:22;42104:3;42086:22;:::i;:::-;42076:8;42072:37;42059:11;42030:80;:::i;:::-;41689:431;;41674:446;41584:543;;;:::o;42133:117::-;42187:8;42237:5;42231:4;42227:16;42206:37;;42133:117;;;;:::o;42256:169::-;42300:6;42333:51;42381:1;42377:6;42369:5;42366:1;42362:13;42333:51;:::i;:::-;42329:56;42414:4;42408;42404:15;42394:25;;42307:118;42256:169;;;;:::o;42430:295::-;42506:4;42652:29;42677:3;42671:4;42652:29;:::i;:::-;42644:37;;42714:3;42711:1;42707:11;42701:4;42698:21;42690:29;;42430:295;;;;:::o;42730:1395::-;42847:37;42880:3;42847:37;:::i;:::-;42949:18;42941:6;42938:30;42935:56;;;42971:18;;:::i;:::-;42935:56;43015:38;43047:4;43041:11;43015:38;:::i;:::-;43100:67;43160:6;43152;43146:4;43100:67;:::i;:::-;43194:1;43218:4;43205:17;;43250:2;43242:6;43239:14;43267:1;43262:618;;;;43924:1;43941:6;43938:77;;;43990:9;43985:3;43981:19;43975:26;43966:35;;43938:77;44041:67;44101:6;44094:5;44041:67;:::i;:::-;44035:4;44028:81;43897:222;43232:887;;43262:618;43314:4;43310:9;43302:6;43298:22;43348:37;43380:4;43348:37;:::i;:::-;43407:1;43421:208;43435:7;43432:1;43429:14;43421:208;;;43514:9;43509:3;43505:19;43499:26;43491:6;43484:42;43565:1;43557:6;43553:14;43543:24;;43612:2;43601:9;43597:18;43584:31;;43458:4;43455:1;43451:12;43446:17;;43421:208;;;43657:6;43648:7;43645:19;43642:179;;;43715:9;43710:3;43706:19;43700:26;43758:48;43800:4;43792:6;43788:17;43777:9;43758:48;:::i;:::-;43750:6;43743:64;43665:156;43642:179;43867:1;43863;43855:6;43851:14;43847:22;43841:4;43834:36;43269:611;;;43232:887;;42822:1303;;;42730:1395;;:::o;44131:137::-;44185:5;44216:6;44210:13;44201:22;;44232:30;44256:5;44232:30;:::i;:::-;44131:137;;;;:::o;44274:345::-;44341:6;44390:2;44378:9;44369:7;44365:23;44361:32;44358:119;;;44396:79;;:::i;:::-;44358:119;44516:1;44541:61;44594:7;44585:6;44574:9;44570:22;44541:61;:::i;:::-;44531:71;;44487:125;44274:345;;;;:::o;44625:229::-;44765:34;44761:1;44753:6;44749:14;44742:58;44834:12;44829:2;44821:6;44817:15;44810:37;44625:229;:::o;44860:366::-;45002:3;45023:67;45087:2;45082:3;45023:67;:::i;:::-;45016:74;;45099:93;45188:3;45099:93;:::i;:::-;45217:2;45212:3;45208:12;45201:19;;44860:366;;;:::o;45232:419::-;45398:4;45436:2;45425:9;45421:18;45413:26;;45485:9;45479:4;45475:20;45471:1;45460:9;45456:17;45449:47;45513:131;45639:4;45513:131;:::i;:::-;45505:139;;45232:419;;;:::o;45657:175::-;45797:27;45793:1;45785:6;45781:14;45774:51;45657:175;:::o;45838:366::-;45980:3;46001:67;46065:2;46060:3;46001:67;:::i;:::-;45994:74;;46077:93;46166:3;46077:93;:::i;:::-;46195:2;46190:3;46186:12;46179:19;;45838:366;;;:::o;46210:419::-;46376:4;46414:2;46403:9;46399:18;46391:26;;46463:9;46457:4;46453:20;46449:1;46438:9;46434:17;46427:47;46491:131;46617:4;46491:131;:::i;:::-;46483:139;;46210:419;;;:::o;46635:224::-;46775:34;46771:1;46763:6;46759:14;46752:58;46844:7;46839:2;46831:6;46827:15;46820:32;46635:224;:::o;46865:366::-;47007:3;47028:67;47092:2;47087:3;47028:67;:::i;:::-;47021:74;;47104:93;47193:3;47104:93;:::i;:::-;47222:2;47217:3;47213:12;47206:19;;46865:366;;;:::o;47237:419::-;47403:4;47441:2;47430:9;47426:18;47418:26;;47490:9;47484:4;47480:20;47476:1;47465:9;47461:17;47454:47;47518:131;47644:4;47518:131;:::i;:::-;47510:139;;47237:419;;;:::o;47662:223::-;47802:34;47798:1;47790:6;47786:14;47779:58;47871:6;47866:2;47858:6;47854:15;47847:31;47662:223;:::o;47891:366::-;48033:3;48054:67;48118:2;48113:3;48054:67;:::i;:::-;48047:74;;48130:93;48219:3;48130:93;:::i;:::-;48248:2;48243:3;48239:12;48232:19;;47891:366;;;:::o;48263:419::-;48429:4;48467:2;48456:9;48452:18;48444:26;;48516:9;48510:4;48506:20;48502:1;48491:9;48487:17;48480:47;48544:131;48670:4;48544:131;:::i;:::-;48536:139;;48263:419;;;:::o;48688:175::-;48828:27;48824:1;48816:6;48812:14;48805:51;48688:175;:::o;48869:366::-;49011:3;49032:67;49096:2;49091:3;49032:67;:::i;:::-;49025:74;;49108:93;49197:3;49108:93;:::i;:::-;49226:2;49221:3;49217:12;49210:19;;48869:366;;;:::o;49241:419::-;49407:4;49445:2;49434:9;49430:18;49422:26;;49494:9;49488:4;49484:20;49480:1;49469:9;49465:17;49458:47;49522:131;49648:4;49522:131;:::i;:::-;49514:139;;49241:419;;;:::o;49666:237::-;49806:34;49802:1;49794:6;49790:14;49783:58;49875:20;49870:2;49862:6;49858:15;49851:45;49666:237;:::o;49909:366::-;50051:3;50072:67;50136:2;50131:3;50072:67;:::i;:::-;50065:74;;50148:93;50237:3;50148:93;:::i;:::-;50266:2;50261:3;50257:12;50250:19;;49909:366;;;:::o;50281:419::-;50447:4;50485:2;50474:9;50470:18;50462:26;;50534:9;50528:4;50524:20;50520:1;50509:9;50505:17;50498:47;50562:131;50688:4;50562:131;:::i;:::-;50554:139;;50281:419;;;:::o;50706:182::-;50846:34;50842:1;50834:6;50830:14;50823:58;50706:182;:::o;50894:366::-;51036:3;51057:67;51121:2;51116:3;51057:67;:::i;:::-;51050:74;;51133:93;51222:3;51133:93;:::i;:::-;51251:2;51246:3;51242:12;51235:19;;50894:366;;;:::o;51266:419::-;51432:4;51470:2;51459:9;51455:18;51447:26;;51519:9;51513:4;51509:20;51505:1;51494:9;51490:17;51483:47;51547:131;51673:4;51547:131;:::i;:::-;51539:139;;51266:419;;;:::o;51691:178::-;51831:30;51827:1;51819:6;51815:14;51808:54;51691:178;:::o;51875:366::-;52017:3;52038:67;52102:2;52097:3;52038:67;:::i;:::-;52031:74;;52114:93;52203:3;52114:93;:::i;:::-;52232:2;52227:3;52223:12;52216:19;;51875:366;;;:::o;52247:419::-;52413:4;52451:2;52440:9;52436:18;52428:26;;52500:9;52494:4;52490:20;52486:1;52475:9;52471:17;52464:47;52528:131;52654:4;52528:131;:::i;:::-;52520:139;;52247:419;;;:::o;52672:98::-;52723:6;52757:5;52751:12;52741:22;;52672:98;;;:::o;52776:168::-;52859:11;52893:6;52888:3;52881:19;52933:4;52928:3;52924:14;52909:29;;52776:168;;;;:::o;52950:373::-;53036:3;53064:38;53096:5;53064:38;:::i;:::-;53118:70;53181:6;53176:3;53118:70;:::i;:::-;53111:77;;53197:65;53255:6;53250:3;53243:4;53236:5;53232:16;53197:65;:::i;:::-;53287:29;53309:6;53287:29;:::i;:::-;53282:3;53278:39;53271:46;;53040:283;52950:373;;;;:::o;53329:640::-;53524:4;53562:3;53551:9;53547:19;53539:27;;53576:71;53644:1;53633:9;53629:17;53620:6;53576:71;:::i;:::-;53657:72;53725:2;53714:9;53710:18;53701:6;53657:72;:::i;:::-;53739;53807:2;53796:9;53792:18;53783:6;53739:72;:::i;:::-;53858:9;53852:4;53848:20;53843:2;53832:9;53828:18;53821:48;53886:76;53957:4;53948:6;53886:76;:::i;:::-;53878:84;;53329:640;;;;;;;:::o;53975:141::-;54031:5;54062:6;54056:13;54047:22;;54078:32;54104:5;54078:32;:::i;:::-;53975:141;;;;:::o;54122:349::-;54191:6;54240:2;54228:9;54219:7;54215:23;54211:32;54208:119;;;54246:79;;:::i;:::-;54208:119;54366:1;54391:63;54446:7;54437:6;54426:9;54422:22;54391:63;:::i;:::-;54381:73;;54337:127;54122:349;;;;:::o
Swarm Source
ipfs://651d214871294d907a5d0ee78e5ef765d47df9fa24d45822a764a4dfb671b46a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.