Source Code
Latest 25 from a total of 883 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Finish Raffle | 22572566 | 32 days ago | IN | 0 HYPE | 0.00011629 | ||||
| Finish Raffle | 22572540 | 32 days ago | IN | 0 HYPE | 0.00056646 | ||||
| Finish Raffle | 22572502 | 32 days ago | IN | 0 HYPE | 0.00102459 | ||||
| Finish Raffle | 22572437 | 32 days ago | IN | 0 HYPE | 0.0009233 | ||||
| Finish Raffle | 22572409 | 32 days ago | IN | 0 HYPE | 0.00038158 | ||||
| Buy Ticket | 22303228 | 35 days ago | IN | 0.002 HYPE | 0.00101335 | ||||
| Buy Ticket | 22154976 | 37 days ago | IN | 0.008 HYPE | 0.00003955 | ||||
| Buy Ticket | 22062721 | 38 days ago | IN | 0.002 HYPE | 0.00002936 | ||||
| Buy Ticket | 22062703 | 38 days ago | IN | 0.008 HYPE | 0.00002939 | ||||
| Buy Ticket | 22062682 | 38 days ago | IN | 0.008 HYPE | 0.00002939 | ||||
| Buy Ticket | 22062665 | 38 days ago | IN | 0.002 HYPE | 0.00002955 | ||||
| Buy Ticket | 22062645 | 38 days ago | IN | 0.002 HYPE | 0.00003082 | ||||
| Buy Ticket | 21980748 | 39 days ago | IN | 0.004 HYPE | 0.00003119 | ||||
| Buy Ticket | 20856705 | 51 days ago | IN | 0.001 HYPE | 0.00002918 | ||||
| Buy Ticket | 20733782 | 53 days ago | IN | 0.008 HYPE | 0.00058214 | ||||
| Buy Ticket | 20733721 | 53 days ago | IN | 0.008 HYPE | 0.00003492 | ||||
| Buy Ticket | 20342384 | 57 days ago | IN | 0.008 HYPE | 0.000954 | ||||
| Buy Ticket | 20342372 | 57 days ago | IN | 0.008 HYPE | 0.00082371 | ||||
| Buy Ticket | 20342361 | 57 days ago | IN | 0.002 HYPE | 0.00077569 | ||||
| Buy Ticket | 20342351 | 57 days ago | IN | 0.002 HYPE | 0.00075678 | ||||
| Buy Ticket | 20342294 | 57 days ago | IN | 0.002 HYPE | 0.00101335 | ||||
| Register Collect... | 20341513 | 57 days ago | IN | 0 HYPE | 0.0003383 | ||||
| Register Collect... | 20341380 | 57 days ago | IN | 0 HYPE | 0.00095693 | ||||
| Buy Ticket | 20244730 | 58 days ago | IN | 0.002 HYPE | 0.00092799 | ||||
| Buy Ticket | 20244703 | 58 days ago | IN | 0.001 HYPE | 0.0016398 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 22572566 | 32 days ago | 0.069264 HYPE | ||||
| 22572566 | 32 days ago | 0.002736 HYPE | ||||
| 22572540 | 32 days ago | 0.065416 HYPE | ||||
| 22572540 | 32 days ago | 0.002584 HYPE | ||||
| 22572502 | 32 days ago | 0.021164 HYPE | ||||
| 22572502 | 32 days ago | 0.000836 HYPE | ||||
| 22572437 | 32 days ago | 0.01443 HYPE | ||||
| 22572437 | 32 days ago | 0.00057 HYPE | ||||
| 22572409 | 32 days ago | 0.006657 HYPE | ||||
| 22572409 | 32 days ago | 0.000343 HYPE | ||||
| 19467717 | 67 days ago | 0.0262476 HYPE | ||||
| 19467717 | 67 days ago | 0.0013524 HYPE | ||||
| 18758233 | 75 days ago | 0.7215 HYPE | ||||
| 18758233 | 75 days ago | 0.0285 HYPE | ||||
| 18316526 | 80 days ago | 0.08559 HYPE | ||||
| 18316526 | 80 days ago | 0.00441 HYPE | ||||
| 18107566 | 83 days ago | 0.069 HYPE | ||||
| 18107566 | 83 days ago | 0.0345 HYPE | ||||
| 18107566 | 83 days ago | 0.1035 HYPE | ||||
| 18107566 | 83 days ago | 0.0069 HYPE | ||||
| 18107566 | 83 days ago | 0.0483 HYPE | ||||
| 18107566 | 83 days ago | 0.0069 HYPE | ||||
| 18107566 | 83 days ago | 0.069 HYPE | ||||
| 18107566 | 83 days ago | 0.0138 HYPE | ||||
| 18107566 | 83 days ago | 0.138 HYPE |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DystoMfersRafflesCoreV4
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at hyperevmscan.io on 2025-09-26
*/
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}
// File: @openzeppelin/contracts/security/Pausable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts/utils/Errors.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of common custom errors used in multiple contracts
*
* IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
* It is recommended to avoid relying on the error API for critical functionality.
*
* _Available since v5.1._
*/
library Errors {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error InsufficientBalance(uint256 balance, uint256 needed);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedCall();
/**
* @dev The deployment failed.
*/
error FailedDeployment();
/**
* @dev A necessary precompile is missing.
*/
error MissingPrecompile(address);
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert Errors.InsufficientBalance(address(this).balance, amount);
}
(bool success, bytes memory returndata) = recipient.call{value: amount}("");
if (!success) {
_revert(returndata);
}
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {Errors.FailedCall} error.
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert Errors.InsufficientBalance(address(this).balance, value);
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
* of an unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {Errors.FailedCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly ("memory-safe") {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert Errors.FailedCall();
}
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
/**
* @dev Required interface of an ERC-721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC-721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
* {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the address zero.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: dystomfersrafflescore_v4.sol
/// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// ===== Custom Errors =====
error NotAllowedToFinalize();
error PointsDisabled();
error PointsNotAllowed();
error PointsContractMissing();
error InvalidStatus();
error Unauthorized();
error InsufficientPoints();
error InvalidPointsRaffle();
error PickerPanic(uint256 code);
error PointsSpendFailed(bytes data);
// =========================
interface IDystoPoints {
function spendPoints(address account, bytes32 raffleId, uint256 amount) external;
function balanceOf(address account) external view returns (uint256);
function updatePoints(bytes32 raffleId, address actor, bytes32 eventSig, uint256 quantity) external returns (bool);
}
interface IRaffleWinnerPicker {
function pickWinner(bytes32 raffleId) external view returns (address, uint256);
}
interface IDystoLocker {
function lockedBalanceOf(address user) external view returns (uint256);
function getLockedTokens(address user) external view returns (uint256[] memory);
function DYSTO_MFERS() external view returns (address);
}
contract DystoMfersRafflesCoreV4 is Ownable, ReentrancyGuard, Pausable {
using Address for address payable;
address public DYSTOMFERS_ADDR = 0x4C3f38129b171f02167d05E72a2994810b42f2Aa;
address public DYSTO_LOCKER = 0xA596BefD9ba9f12f5dc3B7fA857571cA00cbe0d2;
address public raffleWinnerPicker;
address public DYSTO_POINTS;
address internal constant DEAD_ADDR = 0x000000000000000000000000000000000000dEaD;
// Event “signatures” (keccak) for updatePoints hooks
bytes32 internal constant R_BUY = keccak256("buyTicket");
bytes32 internal constant R_FINISH = keccak256("finishRaffle");
bytes32 internal constant R_CANCEL = keccak256("cancelRaffle");
enum RaffleType { Token, NFT }
enum RaffleStatus { Pending, Filled, Finished, Cancelled }
struct CreateArgs {
RaffleType rType;
address prizeAddress;
uint256 prizeAmountOrId;
address ticketToken;
uint256 ticketPrice;
uint256 ticketQty;
uint256 duration;
uint256 maxPerUser;
address gateToken;
bool isBurningRaffle;
bool withGraceExtension;
uint256 autoFinalizeMinTickets;
uint8 featurePeriods;
uint256 priceInPoints;
}
struct RaffleStats {
uint256 ticketsSold;
uint256 soldAmount;
uint256 feeAmount;
address winner;
uint256 winnerTicket;
}
struct RaffleBehavior {
bool isBurningRaffle;
bool isGraceExtended;
uint256 autoFinalizeMinTickets;
uint64 featuredUntil;
uint256 priceInPoints;
}
struct Raffle {
bytes32 id;
address creator;
RaffleType rType;
address prizeAddress;
uint256 prizeAmountOrId;
address ticketToken;
uint256 ticketPrice;
uint256 ticketQty;
uint256 endTimestamp;
RaffleStatus status;
address gateToken;
uint256 maxPerUser;
RaffleStats stats;
RaffleBehavior behavior;
}
struct TicketPurchase {
address buyer;
uint256 amount;
uint256 timestamp;
uint256 gateTokenId;
bool withPoints;
}
struct Collection {
address cAddress;
string cName;
uint256 cRoyaltyFees;
address cRoyaltyAddress;
}
struct AllowedToken {
address tokenAddress;
string tokenTicker;
}
struct RaffleResult {
address winner;
uint256 randomTicket;
}
mapping(address => bool) public contractWhitelist;
modifier onlyEOAorWhitelisted() {
require(
msg.sender == tx.origin || contractWhitelist[msg.sender],
"Wallet or whitelisted contract needed"
);
_;
}
address[] public allowedCollections;
mapping(address => Collection) public allowedCollectionsMap;
address[] public allowedTokens;
mapping(address => AllowedToken) public allowedTokensMap;
uint256 public maxTickets = 250;
uint256 public maxDuration = 30 days;
uint256 public platformFee = 500; // 5% (base 10000)
address public feeCollector;
uint256 public constant DISCOUNT_PER_10 = 10; // -0.1% each 10 locked (500 locked dystomfers equals zero fees)
// Auto expire values
uint256 public autoFinishBaseDelay = 24 hours;
uint256 public autoFinishExtendedDelay = 72 hours;
uint256 public gracePeriodFee = 0.0001 ether;
uint256 public autoFinalizeFeatureFee = 0.0001 ether;
// Feature values
uint256 public featurePerPeriodFee = 0.0001 ether;
uint256 public constant FEATURE_PERIOD = 7 days;
uint256 public antiFarmFee = 0.0001 ether;
// Curated list of accounts allowed to auto-finish raffles when applies.
mapping(address => bool) public afCallers;
mapping(bytes32 => Raffle) public raffles;
mapping(address => bytes32[]) public rafflesByCreator;
mapping(bytes32 => address[]) public raffleBuyers;
mapping(bytes32 => mapping(address => uint256)) public ticketsByUser;
mapping(bytes32 => bool) public raffleWinnerPicked;
mapping(bytes32 => mapping(uint256 => bool)) public gateTokenConsumed;
mapping(bytes32 => TicketPurchase[]) public ticketHistory;
mapping(bytes32 => RaffleResult) public raffleResults;
mapping(address => bytes32[]) public rafflesEnteredByUser;
mapping(address => mapping(bytes32 => bool)) public hasEnteredRaffle;
bytes32[] public featuredList;
mapping(bytes32 => bool) public isInFeaturedSet;
bytes32[] public allRaffleIds;
event RaffleCreated(
bytes32 indexed id,
address indexed creator,
RaffleType rType,
address prizeAddress,
uint256 prizeAmountOrId,
address ticketToken,
uint256 ticketPrice,
uint256 ticketQty,
uint256 endTimestamp
);
event TicketPurchased(bytes32 indexed raffleId, address indexed buyer, uint256 amount, uint256 gateTokenId, bool withPoints);
event RaffleCancelled(bytes32 indexed raffleId);
event RaffleFinished(bytes32 indexed raffleId, address winner);
event WinnerPicked(bytes32 indexed raffleId, address indexed winner, uint256 winnerTicket);
event FeaturedExtended(
bytes32 indexed raffleId,
address indexed payer,
uint256 periodsAdded,
uint256 totalFeePaid,
uint64 oldUntil,
uint64 newUntil
);
uint256 public totalRafflesFinished;
uint256 public totalTicketsSold;
mapping(address => uint256) public totalTicketsSoldByToken;
mapping(address => uint256) public totalFeesCollectedByToken;
mapping(address => uint256) public rafflesCreatedByUser;
mapping(address => uint256) public ticketsBoughtByUser;
mapping(address => uint256) public rafflesWonByUser;
//earning stats
mapping(address => mapping(address => uint256)) public creatorProfits;
mapping(address => mapping(address => uint256)) public winnerPrizes;
constructor(address _feeCollector) Ownable(msg.sender) {
feeCollector = _feeCollector;
afCallers[msg.sender] = true;
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
function setMaxTickets(uint256 _max) external onlyOwner {
maxTickets = _max;
}
function setMaxDuration(uint256 _duration) external onlyOwner {
maxDuration = _duration;
}
function setPlatformFee(uint256 _fee) external onlyOwner {
platformFee = _fee;
}
function setFeeCollector(address _collector) external onlyOwner {
feeCollector = _collector;
}
function setDystoLocker(address _locker) external onlyOwner {
DYSTO_LOCKER = _locker;
DYSTOMFERS_ADDR = IDystoLocker(_locker).DYSTO_MFERS();
}
function recoverHYPE() external onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "No HYPE");
Address.sendValue(payable(owner()), balance);
}
function recoverERC721(address token, uint256 tokenId, address to) external onlyOwner {
IERC721(token).transferFrom(address(this), to, tokenId);
}
function recoverToken(address _token, address _to) external onlyOwner {
require(_token != address(0), "token address cannot be 0");
uint256 bal = IERC20(_token).balanceOf(address(this));
IERC20(_token).transfer(_to, bal);
}
function addToWhitelist(address _contract) external onlyOwner {
require(_contract.code.length > 0, "Not a contract");
contractWhitelist[_contract] = true;
}
function removeFromWhitelist(address _contract) external onlyOwner {
require(contractWhitelist[_contract], "Not in whitelist");
contractWhitelist[_contract] = false;
}
function registerCollection(address _addr, string calldata _name, uint256 _royaltyFee, address _royaltyAddr) external onlyOwner {
require(_addr != address(0), "Invalid address");
require(_royaltyFee <= 1000, "Royalty too high");
if (allowedCollectionsMap[_addr].cAddress == address(0)) allowedCollections.push(_addr);
allowedCollectionsMap[_addr] = Collection(_addr, _name, _royaltyFee, _royaltyAddr);
}
function removeCollection(address _addr) external onlyOwner {
require(_addr != address(0), "Invalid address");
require(allowedCollectionsMap[_addr].cAddress != address(0), "Collection not registered");
delete allowedCollectionsMap[_addr];
uint256 len = allowedCollections.length;
for (uint256 i = 0; i < len; i++) {
if (allowedCollections[i] == _addr) {
allowedCollections[i] = allowedCollections[len - 1];
allowedCollections.pop();
break;
}
}
}
function registerAllowedToken(address _addr, string calldata _ticker) external onlyOwner {
require(_addr != address(0), "Invalid token");
require(bytes(_ticker).length > 0, "Ticker empty");
if (allowedTokensMap[_addr].tokenAddress == address(0)) allowedTokens.push(_addr);
allowedTokensMap[_addr] = AllowedToken(_addr, _ticker);
}
function removeAllowedToken(address _addr) external onlyOwner {
require(_addr != address(0), "Invalid token");
require(allowedTokensMap[_addr].tokenAddress != address(0), "Token not registered");
delete allowedTokensMap[_addr];
uint256 len = allowedTokens.length;
for (uint256 i = 0; i < len; i++) {
if (allowedTokens[i] == _addr) {
allowedTokens[i] = allowedTokens[len - 1];
allowedTokens.pop();
break;
}
}
}
function setraffleWinnerPicker(address _picker) external onlyOwner {
raffleWinnerPicker = _picker;
}
function setAutoFinishDelays(uint256 baseDelay, uint256 extDelay) external onlyOwner {
autoFinishBaseDelay = baseDelay;
autoFinishExtendedDelay = extDelay;
}
function setAutoFinalizeFeatureFee(uint256 newFee) external onlyOwner {
autoFinalizeFeatureFee = newFee;
}
function setAutoFinishCaller(address account, bool allowed) external onlyOwner {
afCallers[account] = allowed;
}
function setFeaturePerPeriodFee(uint256 newFee) external onlyOwner {
featurePerPeriodFee = newFee;
}
function setAntiFarmFee(uint256 newFee) external onlyOwner {
antiFarmFee = newFee;
}
function setGracePeriodFee(uint256 newFee) external onlyOwner {
gracePeriodFee = newFee;
}
function setPointsContract(address points) external onlyOwner {
DYSTO_POINTS = points; // allow zero to disable
}
function _generateRaffleId(address creator, address prizeAddress, uint256 nonce) internal view returns (bytes32) {
return keccak256(abi.encodePacked(block.timestamp, creator, prizeAddress, nonce));
}
function _hasLockedToken(address user, uint256 tokenId) internal view returns (bool) {
if (IDystoLocker(DYSTO_LOCKER).lockedBalanceOf(user) == 0) return false;
uint256[] memory tokens = IDystoLocker(DYSTO_LOCKER).getLockedTokens(user);
for (uint256 i = 0; i < tokens.length; i++) {
if (tokens[i] == tokenId) return true;
}
return false;
}
function _featuredIndexAdd(bytes32 raffleId) internal {
if (!isInFeaturedSet[raffleId]) {
isInFeaturedSet[raffleId] = true;
featuredList.push(raffleId);
}
}
/// @dev Records that `user` has entered `raffleId` once. No-op if already recorded.
function _recordRaffleEntry(address user, bytes32 raffleId) internal {
if (!hasEnteredRaffle[user][raffleId]) {
hasEnteredRaffle[user][raffleId] = true;
rafflesEnteredByUser[user].push(raffleId);
}
}
/// @dev Pays platform fees, creator share, and delivers the prize to the winner.
function _payoutAndDeliverPrize(bytes32 raffleId, Raffle storage r) internal {
RaffleStats storage s = r.stats;
// --- Preconditions ---
address winner = s.winner;
require(winner != address(0), "Winner not set");
require(feeCollector != address(0), "feeCollect=0");
// --- Platform fee with locker-based discount ---
uint256 locked = IDystoLocker(DYSTO_LOCKER).lockedBalanceOf(r.creator);
uint256 discountBps = (locked / 10) * DISCOUNT_PER_10; // e.g., 2 bps per 10 locked (use your constant)
uint256 effectiveBps = platformFee > discountBps ? platformFee - discountBps : 0;
uint256 fee = (s.soldAmount * effectiveBps) / 10_000;
uint256 creatorShare = s.soldAmount - fee;
// Persist fee on stats before external calls
s.feeAmount = fee;
// burning raffles => DEAD
address payoutRecipient = r.behavior.isBurningRaffle ? DEAD_ADDR : r.creator;
// --- Pay platform fee and creator share (native or ERC20 ticket token) ---
if (r.ticketToken == address(0)) {
(bool sentFee, ) = payable(feeCollector).call{value: fee}("");
require(sentFee, "Native fee tx fail");
(bool sentCreator, ) = payable(payoutRecipient).call{value: creatorShare}("");
require(sentCreator, "Native pay fail");
} else {
require(IERC20(r.ticketToken).transfer(feeCollector, fee), "ERC20 fee tx fail");
require(IERC20(r.ticketToken).transfer(payoutRecipient, creatorShare), "ERC20 pay fail");
}
// --- Deliver prize to winner ---
if (r.rType == RaffleType.Token) {
if (r.prizeAddress == address(0)) {
(bool ok, ) = payable(winner).call{value: r.prizeAmountOrId}("");
require(ok, "Native prize tx fail");
} else {
require(IERC20(r.prizeAddress).transfer(winner, r.prizeAmountOrId), "ERC20 prize tx fail");
}
// Track winner’s prizes by token (address(0) for native)
winnerPrizes[winner][r.prizeAddress] += r.prizeAmountOrId;
} else {
// NFT
IERC721(r.prizeAddress).transferFrom(address(this), winner, r.prizeAmountOrId);
winnerPrizes[winner][r.prizeAddress] += 1;
}
// --- Global aggregates ---
address t = r.ticketToken; // address(0) if tickets were paid in native
unchecked {
totalTicketsSoldByToken[t] += s.ticketsSold;
totalRafflesFinished++;
rafflesWonByUser[winner]++;
}
// Existing per-token fee/profit accumulators
totalFeesCollectedByToken[t] += fee;
creatorProfits[payoutRecipient][t] += creatorShare;
if (DYSTO_POINTS != address(0)) {
IDystoPoints(DYSTO_POINTS).updatePoints(raffleId, msg.sender, R_FINISH, 0);
}
// Final settlement event
emit RaffleFinished(raffleId, winner);
}
function _graceWindowOver(Raffle storage r) internal view returns (bool) {
uint256 wait = r.behavior.isGraceExtended ? autoFinishExtendedDelay : autoFinishBaseDelay;
return block.timestamp >= r.endTimestamp + wait;
}
function createRaffle(CreateArgs calldata a)
external
payable
whenNotPaused
nonReentrant
returns (bytes32) {
return _createRaffle(a);
}
function _createRaffle(CreateArgs calldata a) internal returns (bytes32 id) {
if (a.ticketToken != address(0)) {
require(allowedTokensMap[a.ticketToken].tokenAddress != address(0), "ERC20 not allowed");
}
require(a.ticketQty > 0 && a.ticketQty <= maxTickets, "Invalid ticketQty");
require(a.ticketPrice > 0, "Ticket price required");
require(a.duration > 0 && a.duration <= maxDuration, "Invalid duration");
require(a.maxPerUser > 0 && a.maxPerUser <= a.ticketQty, "Invalid maxPerUser");
if (a.autoFinalizeMinTickets > 0) {
require(a.autoFinalizeMinTickets <= a.ticketQty, "minTickets > ticketQty");
}
if (a.priceInPoints > 0) {
if(DYSTO_POINTS == address(0)) {
revert PointsNotAllowed();
}
else {
if((a.ticketToken != address(0)) || (a.ticketPrice < antiFarmFee)) revert InvalidPointsRaffle();
}
}
{
uint256 expectedValue = 0;
if (a.rType == RaffleType.Token) {
if (a.prizeAddress == address(0)) {
// Native prize
require(a.prizeAmountOrId > 0, "Invalid prize amount");
expectedValue += a.prizeAmountOrId;
} else {
// ERC20 prize must be allowlisted
require(allowedTokensMap[a.prizeAddress].tokenAddress != address(0), "Prize token not allowed");
}
} else if (a.rType == RaffleType.NFT) {
require(allowedCollectionsMap[a.prizeAddress].cAddress != address(0), "NFT not allowed");
} else {
revert("Invalid type");
}
// Paid grace extension
if (a.withGraceExtension) {
expectedValue += gracePeriodFee;
}
// Paid auto-finalize threshold
if (a.autoFinalizeMinTickets > 0) {
expectedValue += autoFinalizeFeatureFee;
}
// Paid featured on create
if (a.featurePeriods > 0) {
expectedValue += featurePerPeriodFee * a.featurePeriods;
}
require(msg.value == expectedValue, "Invalid value");
}
if (a.rType == RaffleType.Token && a.prizeAddress != address(0)) {
// ERC20 prize
require(
IERC20(a.prizeAddress).transferFrom(msg.sender, address(this), a.prizeAmountOrId),
"Prize ERC20 transferFrom fail"
);
} else if (a.rType == RaffleType.NFT) {
// NFT prize
IERC721(a.prizeAddress).transferFrom(msg.sender, address(this), a.prizeAmountOrId);
}
if (a.withGraceExtension) {
require(feeCollector != address(0), "feeCollect=0");
(bool ok1, ) = payable(feeCollector).call{value: gracePeriodFee}("");
require(ok1, "Grace fee xfer fail");
}
if (a.autoFinalizeMinTickets > 0) {
require(feeCollector != address(0), "feeCollect=0");
(bool ok2, ) = payable(feeCollector).call{value: autoFinalizeFeatureFee}("");
require(ok2, "AutoFinalize fee xfer fail");
}
if (a.featurePeriods > 0) {
uint256 _feat = featurePerPeriodFee * a.featurePeriods;
require(feeCollector != address(0), "feeCollect=0");
(bool ok3, ) = payable(feeCollector).call{value: _feat}("");
require(ok3, "Featured fee xfer fail");
}
id = _generateRaffleId(
msg.sender,
a.prizeAddress,
a.prizeAmountOrId + a.ticketQty + block.number
);
Raffle storage r = raffles[id];
r.id = id;
r.creator = msg.sender;
r.rType = a.rType;
r.prizeAddress = a.prizeAddress;
r.prizeAmountOrId = a.prizeAmountOrId;
r.ticketToken = a.ticketToken;
r.ticketPrice = a.ticketPrice;
r.ticketQty = a.ticketQty;
r.endTimestamp = block.timestamp + a.duration;
r.status = RaffleStatus.Pending;
r.gateToken = a.gateToken;
r.maxPerUser = a.maxPerUser;
r.behavior = RaffleBehavior({
isBurningRaffle: a.isBurningRaffle,
isGraceExtended: a.withGraceExtension,
autoFinalizeMinTickets: a.autoFinalizeMinTickets,
featuredUntil: a.featurePeriods > 0 ? uint64(block.timestamp + uint64(a.featurePeriods) * uint64(FEATURE_PERIOD)) : uint64(0),
priceInPoints: a.priceInPoints
});
if (r.behavior.featuredUntil >= block.timestamp) {
_featuredIndexAdd(id);
}
r.stats = RaffleStats({
ticketsSold: 0,
soldAmount: 0,
feeAmount: 0,
winner: address(0),
winnerTicket: 0
});
rafflesByCreator[msg.sender].push(id);
allRaffleIds.push(id);
rafflesCreatedByUser[msg.sender]++;
emit RaffleCreated(
id,
msg.sender,
a.rType,
a.prizeAddress,
a.prizeAmountOrId,
a.ticketToken,
a.ticketPrice,
a.ticketQty,
r.endTimestamp
);
}
function buyTicket(bytes32 raffleId, uint256 amount, uint256 gateTokenId, bool usePoints)
external
payable
nonReentrant
whenNotPaused
onlyEOAorWhitelisted
{
require(amount > 0, "Invalid amount");
Raffle storage r = raffles[raffleId];
require(r.status == RaffleStatus.Pending, "Not available");
require(block.timestamp < r.endTimestamp, "Raffle ended");
require(msg.sender != r.creator, "Creator not allowed");
if (r.gateToken != address(0)) {
bool isDystoMfers = (r.gateToken == DYSTOMFERS_ADDR);
bool ok;
require(gateTokenId != 0, "gateTokenId required");
if (isDystoMfers) {
bool ownsDirect = (IERC721(r.gateToken).ownerOf(gateTokenId) == msg.sender);
bool ownsLocked = _hasLockedToken(msg.sender, gateTokenId);
ok = (ownsDirect || ownsLocked);
} else {
ok = (IERC721(r.gateToken).ownerOf(gateTokenId) == msg.sender);
}
require(ok, "Not owner of gate token");
require(!gateTokenConsumed[raffleId][gateTokenId], "Excl token already used");
} else {
require(gateTokenId == 0, "gateTokenId not expected");
}
uint256 remaining = r.ticketQty - r.stats.ticketsSold;
require(amount <= remaining, "Not enough tickets left");
uint256 alreadyBought = ticketsByUser[raffleId][msg.sender];
require(alreadyBought + amount <= r.maxPerUser, "Exceeds limit");
uint256 total = r.ticketPrice * amount;
if (usePoints) {
total = 0; // total is zero if use points...
if (r.behavior.priceInPoints == 0) revert PointsNotAllowed();
if (DYSTO_POINTS == address(0)) revert PointsContractMissing();
require(msg.value == 0, "Invalid HYPE amt");
uint256 costInPoints = r.behavior.priceInPoints * amount;
uint256 pointsBal = IDystoPoints(DYSTO_POINTS).balanceOf(msg.sender);
if (pointsBal < costInPoints) revert InsufficientPoints();
try IDystoPoints(DYSTO_POINTS).spendPoints(msg.sender, raffleId, costInPoints) {
// ok
} catch (bytes memory lowLevelData) {
if (lowLevelData.length > 0) {
assembly { revert(add(lowLevelData, 32), mload(lowLevelData)) }
}
revert PointsSpendFailed(lowLevelData);
}
} else {
if (r.ticketToken == address(0)) {
require(msg.value == total, "Invalid HYPE amt");
} else {
require(IERC20(r.ticketToken).transferFrom(msg.sender, address(this), total), "Payment fail");
}
}
if (alreadyBought == 0) {
raffleBuyers[raffleId].push(msg.sender);
}
ticketsByUser[raffleId][msg.sender] += amount;
r.stats.ticketsSold += amount;
r.stats.soldAmount += total;
ticketHistory[raffleId].push(TicketPurchase({
buyer: msg.sender,
amount: amount,
timestamp: block.timestamp,
gateTokenId: gateTokenId,
withPoints: usePoints
}));
ticketsBoughtByUser[msg.sender] += amount;
totalTicketsSold += amount;
if (r.gateToken != address(0)) {
gateTokenConsumed[raffleId][gateTokenId] = true;
}
_recordRaffleEntry(msg.sender, raffleId);
if ((DYSTO_POINTS != address(0)) && !usePoints) {
IDystoPoints(DYSTO_POINTS).updatePoints(raffleId, msg.sender, R_BUY, amount);
}
emit TicketPurchased(raffleId, msg.sender, amount, gateTokenId, usePoints);
if (r.stats.ticketsSold == r.ticketQty) {
r.status = RaffleStatus.Filled;
}
}
function _canFinalize(address caller, Raffle storage r) internal view returns (bool) {
if (r.status == RaffleStatus.Filled) return true;
if (caller == r.creator) return true; // creador siempre
bool expired = block.timestamp >= r.endTimestamp;
if (!expired) return false;
if (!afCallers[caller]) return false;
bool thresholdOk = (
r.behavior.autoFinalizeMinTickets == 0 ||
r.stats.ticketsSold >= r.behavior.autoFinalizeMinTickets
);
if (thresholdOk) return true;
return _graceWindowOver(r);
}
function finishRaffle(bytes32 raffleId) external nonReentrant whenNotPaused onlyEOAorWhitelisted {
Raffle storage r = raffles[raffleId];
RaffleStats storage s = r.stats;
require(raffleWinnerPicker != address(0), "Winner Picker not set");
require(r.status != RaffleStatus.Finished && r.status != RaffleStatus.Cancelled, "Already closed");
require(!raffleWinnerPicked[raffleId], "Winner already picked");
require(s.ticketsSold > 0, "No tickets sold");
if (!_canFinalize(msg.sender, r)) revert NotAllowedToFinalize();
address winner;
uint256 randTicket;
// PICK WINNER
try IRaffleWinnerPicker(raffleWinnerPicker).pickWinner(raffleId) returns (address w, uint256 rt) {
require(w != address(0), "Winner is zero address");
winner = w;
randTicket = rt;
} catch Error(string memory reason) {
revert(string(abi.encodePacked("Picker Error (reason): ", reason)));
} catch Panic(uint256 errorCode) {
revert PickerPanic(errorCode);
} catch {
revert("Picker Error: unknown failure");
}
raffleWinnerPicked[raffleId] = true;
raffleResults[raffleId] = RaffleResult({
winner: winner,
randomTicket: randTicket
});
r.status = RaffleStatus.Finished;
r.stats.winner = winner;
r.stats.winnerTicket = randTicket;
emit WinnerPicked(raffleId, winner, randTicket);
// Shared settlement
_payoutAndDeliverPrize(raffleId, r);
}
function expireAndCancelRaffle(bytes32 raffleId) external payable nonReentrant whenNotPaused {
Raffle storage r = raffles[raffleId];
require(msg.sender == r.creator || msg.sender == owner(), "Not authorized");
require(r.status == RaffleStatus.Pending, "Invalid status");
if (r.stats.ticketsSold > 0) {
require(block.timestamp >= r.endTimestamp, "Raffle still active");
}
require(msg.value == antiFarmFee, "Cancel penalty required");
r.status = RaffleStatus.Cancelled;
if (r.stats.ticketsSold > 0) {
address[] memory buyers = raffleBuyers[raffleId];
for (uint256 i = 0; i < buyers.length; i++) {
address buyer = buyers[i];
uint256 qty = ticketsByUser[raffleId][buyer];
if (qty > 0) {
uint256 refund = qty * r.ticketPrice;
if (r.ticketToken == address(0)) {
payable(buyer).sendValue(refund);
} else {
IERC20(r.ticketToken).transfer(buyer, refund);
}
}
}
}
if (r.rType == RaffleType.Token) {
if (r.prizeAddress == address(0)) {
payable(r.creator).sendValue(r.prizeAmountOrId);
} else {
IERC20(r.prizeAddress).transfer(r.creator, r.prizeAmountOrId);
}
} else if (r.rType == RaffleType.NFT) {
IERC721(r.prizeAddress).transferFrom(address(this), r.creator, r.prizeAmountOrId);
}
if (DYSTO_POINTS != address(0)) {
IDystoPoints(DYSTO_POINTS).updatePoints(raffleId, msg.sender, R_CANCEL, 0);
}
emit RaffleCancelled(raffleId);
}
function featureRaffle(bytes32 raffleId, uint256 periods) external payable nonReentrant {
require(periods > 0, "periods=0");
Raffle storage r = raffles[raffleId];
require(r.status == RaffleStatus.Pending, "Not available");
uint256 required = featurePerPeriodFee * periods;
require(msg.value == required, "bad msg.value");
uint64 prev = r.behavior.featuredUntil;
uint64 base = prev > block.timestamp ? prev : uint64(block.timestamp);
uint64 next = base + uint64(periods) * uint64(FEATURE_PERIOD);
r.behavior.featuredUntil = next;
if (r.behavior.featuredUntil >= block.timestamp) {
_featuredIndexAdd(raffleId);
}
// forward fee
require(feeCollector != address(0), "feeCollector=0");
(bool ok, ) = payable(feeCollector).call{value: msg.value}("");
require(ok, "Featured fee xfer fail");
emit FeaturedExtended(raffleId, msg.sender, periods, msg.value, prev, next);
}
function getTicketHistory(bytes32 id) external view returns (TicketPurchase[] memory) {
return ticketHistory[id];
}
function rafflesEnteredByUserLength(address user) external view returns (uint256) {
return rafflesEnteredByUser[user].length;
}
function featuredListLength() external view returns (uint256) {
return featuredList.length;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InsufficientPoints","type":"error"},{"inputs":[],"name":"InvalidPointsRaffle","type":"error"},{"inputs":[],"name":"NotAllowedToFinalize","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint256","name":"code","type":"uint256"}],"name":"PickerPanic","type":"error"},{"inputs":[],"name":"PointsContractMissing","type":"error"},{"inputs":[],"name":"PointsNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"PointsSpendFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"uint256","name":"periodsAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFeePaid","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"oldUntil","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"newUntil","type":"uint64"}],"name":"FeaturedExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"RaffleCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"enum DystoMfersRafflesCoreV4.RaffleType","name":"rType","type":"uint8"},{"indexed":false,"internalType":"address","name":"prizeAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"prizeAmountOrId","type":"uint256"},{"indexed":false,"internalType":"address","name":"ticketToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ticketQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTimestamp","type":"uint256"}],"name":"RaffleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"winner","type":"address"}],"name":"RaffleFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gateTokenId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"withPoints","type":"bool"}],"name":"TicketPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"winnerTicket","type":"uint256"}],"name":"WinnerPicked","type":"event"},{"inputs":[],"name":"DISCOUNT_PER_10","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSTOMFERS_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSTO_LOCKER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSTO_POINTS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEATURE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"afCallers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allRaffleIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedCollections","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedCollectionsMap","outputs":[{"internalType":"address","name":"cAddress","type":"address"},{"internalType":"string","name":"cName","type":"string"},{"internalType":"uint256","name":"cRoyaltyFees","type":"uint256"},{"internalType":"address","name":"cRoyaltyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTokensMap","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tokenTicker","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiFarmFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoFinalizeFeatureFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoFinishBaseDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoFinishExtendedDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"gateTokenId","type":"uint256"},{"internalType":"bool","name":"usePoints","type":"bool"}],"name":"buyTicket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum DystoMfersRafflesCoreV4.RaffleType","name":"rType","type":"uint8"},{"internalType":"address","name":"prizeAddress","type":"address"},{"internalType":"uint256","name":"prizeAmountOrId","type":"uint256"},{"internalType":"address","name":"ticketToken","type":"address"},{"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"internalType":"uint256","name":"ticketQty","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"maxPerUser","type":"uint256"},{"internalType":"address","name":"gateToken","type":"address"},{"internalType":"bool","name":"isBurningRaffle","type":"bool"},{"internalType":"bool","name":"withGraceExtension","type":"bool"},{"internalType":"uint256","name":"autoFinalizeMinTickets","type":"uint256"},{"internalType":"uint8","name":"featurePeriods","type":"uint8"},{"internalType":"uint256","name":"priceInPoints","type":"uint256"}],"internalType":"struct DystoMfersRafflesCoreV4.CreateArgs","name":"a","type":"tuple"}],"name":"createRaffle","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"creatorProfits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"expireAndCancelRaffle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"featurePerPeriodFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"},{"internalType":"uint256","name":"periods","type":"uint256"}],"name":"featureRaffle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"featuredList","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"featuredListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"raffleId","type":"bytes32"}],"name":"finishRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gateTokenConsumed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTicketHistory","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"gateTokenId","type":"uint256"},{"internalType":"bool","name":"withPoints","type":"bool"}],"internalType":"struct DystoMfersRafflesCoreV4.TicketPurchase[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriodFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hasEnteredRaffle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"isInFeaturedSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"raffleBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"raffleResults","outputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"randomTicket","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"raffleWinnerPicked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleWinnerPicker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"raffles","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"enum DystoMfersRafflesCoreV4.RaffleType","name":"rType","type":"uint8"},{"internalType":"address","name":"prizeAddress","type":"address"},{"internalType":"uint256","name":"prizeAmountOrId","type":"uint256"},{"internalType":"address","name":"ticketToken","type":"address"},{"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"internalType":"uint256","name":"ticketQty","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"enum DystoMfersRafflesCoreV4.RaffleStatus","name":"status","type":"uint8"},{"internalType":"address","name":"gateToken","type":"address"},{"internalType":"uint256","name":"maxPerUser","type":"uint256"},{"components":[{"internalType":"uint256","name":"ticketsSold","type":"uint256"},{"internalType":"uint256","name":"soldAmount","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"winnerTicket","type":"uint256"}],"internalType":"struct DystoMfersRafflesCoreV4.RaffleStats","name":"stats","type":"tuple"},{"components":[{"internalType":"bool","name":"isBurningRaffle","type":"bool"},{"internalType":"bool","name":"isGraceExtended","type":"bool"},{"internalType":"uint256","name":"autoFinalizeMinTickets","type":"uint256"},{"internalType":"uint64","name":"featuredUntil","type":"uint64"},{"internalType":"uint256","name":"priceInPoints","type":"uint256"}],"internalType":"struct DystoMfersRafflesCoreV4.RaffleBehavior","name":"behavior","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rafflesByCreator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rafflesCreatedByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rafflesEnteredByUser","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"rafflesEnteredByUserLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rafflesWonByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverHYPE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_ticker","type":"string"}],"name":"registerAllowedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_royaltyFee","type":"uint256"},{"internalType":"address","name":"_royaltyAddr","type":"address"}],"name":"registerCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeAllowedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setAntiFarmFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setAutoFinalizeFeatureFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAutoFinishCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"baseDelay","type":"uint256"},{"internalType":"uint256","name":"extDelay","type":"uint256"}],"name":"setAutoFinishDelays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_locker","type":"address"}],"name":"setDystoLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setFeaturePerPeriodFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setGracePeriodFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setMaxDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"points","type":"address"}],"name":"setPointsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_picker","type":"address"}],"name":"setraffleWinnerPicker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ticketHistory","outputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"gateTokenId","type":"uint256"},{"internalType":"bool","name":"withPoints","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ticketsBoughtByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"ticketsByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalFeesCollectedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRafflesFinished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTicketsSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalTicketsSoldByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"winnerPrizes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405260028054744c3f38129b171f02167d05e72a2994810b42f2aa00610100600160a81b0319909116179055600380546001600160a01b03191673a596befd9ba9f12f5dc3b7fa857571ca00cbe0d217905560fa600b5562278d00600c556101f4600d5562015180600f556203f480601055655af3107a4000601181905560128190556013819055601455348015610098575f5ffd5b5060405161615d38038061615d8339810160408190526100b791610183565b33806100dc57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100e581610134565b5060018080556002805460ff19908116909155600e80546001600160a01b0319166001600160a01b039490941693909317909255335f90815260156020526040902080549092161790556101b0565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610193575f5ffd5b81516001600160a01b03811681146101a9575f5ffd5b9392505050565b615fa0806101bd5f395ff3fe608060405260043610610463575f3560e01c80637e3be98b11610241578063c347782411610134578063e86ab4cb116100b3578063f2fde38b11610078578063f2fde38b1461103f578063f7205ed61461105e578063f855d8e614611073578063fe63921714611087578063feaea586146110a6575f5ffd5b8063e86ab4cb14610fa2578063eca9dd1814610fce578063ee45ab2414610fed578063f0e9fcd114611001578063f2baaaeb14611020575f5ffd5b8063d340fd03116100f9578063d340fd0314610d3d578063d62cd77614610d73578063d7cd93f514610d92578063e31ef12c14610da7578063e43252d714610f83575f5ffd5b8063c347782414610c70578063c415b95c14610c9b578063c6e63e5e14610cba578063cf0f34c414610cf3578063d143d78414610d12575f5ffd5b8063983694b1116101c0578063a673f7a011610185578063a673f7a014610bdf578063b5cd87bf14610bf4578063b99d6aae14610c07578063b9b9da1114610c26578063c218929014610c51575f5ffd5b8063983694b114610b5857806398a8a3ec14610b775780639b89470314610b965780639ea6b4b914610bab578063a42dce8014610bc0575f5ffd5b80638ab1d681116102065780638ab1d68114610ac05780638da5cb5b14610adf57806390469a9d14610afb578063936f3d7814610b1a57806395754abb14610b39575f5ffd5b80637e3be98b14610a5c5780637fdac5aa14610a725780638456cb5914610a8557806384c438dc14610a995780638638395c14610aac575f5ffd5b8063431692721161035957806369bcd79d116102d85780636f84c77f1161029d5780636f84c77f1461098b578063715018a6146109a057806376006c07146109b457806376ff4401146109ea5780637dd97bef14610a3d575f5ffd5b806369bcd79d146108c65780636a84d89f146108f15780636b0300911461092a5780636b71537a146109495780636db5c8fd14610976575f5ffd5b80635028d05a1161031e5780635028d05a1461081e57806356264d6c1461083d578063563a25951461085c5780635c975abb146108905780635e5f2e26146108a7575f5ffd5b80634316927214610779578063493918981461078e5780634c999f5e146107ad5780634ca38d4a146107db5780634e13630b146107fa575f5ffd5b80632e6a1c5b116103e55780633f4ba83a116103aa5780633f4ba83a146106805780633f81a7d6146106945780633f9ca776146106bf578063411ef03b1461071c57806341ff7b421461074b575f5ffd5b80632e6a1c5b146105e057806331e69bec146105ff57806334701db81461061e5780633a9346e7146106335780633e4787d914610661575f5ffd5b80631476737d1161042b5780631476737d1461052c578063193d24171461053f5780631abd67261461057557806323eb17eb146105ac57806326232a2e146105cb575f5ffd5b80630403e0601461046757806304134827146104aa5780630cf96540146104cd5780630ebd5cf7146104ee57806312e8e2c31461050d575b5f5ffd5b348015610472575f5ffd5b5061049561048136600461547b565b601a6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156104b5575f5ffd5b506104bf600f5481565b6040519081526020016104a1565b3480156104d8575f5ffd5b506104ec6104e73660046154b3565b6110c5565b005b3480156104f9575f5ffd5b506104ec6105083660046154ea565b6110f7565b348015610518575f5ffd5b506104ec61052736600461547b565b61110a565b6104bf61053a36600461550a565b611117565b34801561054a575f5ffd5b506104bf610559366004615524565b601960209081525f928352604080842090915290825290205481565b348015610580575f5ffd5b50600454610594906001600160a01b031681565b6040516001600160a01b0390911681526020016104a1565b3480156105b7575f5ffd5b506104ec6105c636600461547b565b611141565b3480156105d6575f5ffd5b506104bf600d5481565b3480156105eb575f5ffd5b506104bf6105fa36600461547b565b61114e565b34801561060a575f5ffd5b506104bf61061936600461547b565b61116d565b348015610629575f5ffd5b506104bf60245481565b34801561063e575f5ffd5b5061049561064d366004615547565b60156020525f908152604090205460ff1681565b34801561066c575f5ffd5b506104ec61067b36600461547b565b61117c565b34801561068b575f5ffd5b506104ec6115d9565b34801561069f575f5ffd5b506104bf6106ae366004615547565b60266020525f908152604090205481565b3480156106ca575f5ffd5b506106fd6106d936600461547b565b601d6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016104a1565b348015610727575f5ffd5b5061073b610736366004615547565b6115eb565b6040516104a19493929190615597565b348015610756575f5ffd5b5061049561076536600461547b565b60216020525f908152604090205460ff1681565b348015610784575f5ffd5b506104bf60105481565b348015610799575f5ffd5b506104bf6107a83660046155db565b6116ad565b3480156107b8575f5ffd5b506104956107c7366004615547565b60066020525f908152604090205460ff1681565b3480156107e6575f5ffd5b506105946107f536600461547b565b6116d8565b348015610805575f5ffd5b506002546105949061010090046001600160a01b031681565b348015610829575f5ffd5b506104ec610838366004615547565b611700565b348015610848575f5ffd5b506104ec61085736600461547b565b6118fe565b348015610867575f5ffd5b506104bf610876366004615547565b6001600160a01b03165f908152601e602052604090205490565b34801561089b575f5ffd5b5060025460ff16610495565b3480156108b2575f5ffd5b506105946108c136600461547b565b61190b565b3480156108d1575f5ffd5b506104bf6108e0366004615547565b60256020525f908152604090205481565b3480156108fc575f5ffd5b5061049561090b3660046155db565b601f60209081525f928352604080842090915290825290205460ff1681565b348015610935575f5ffd5b506104bf6109443660046155db565b61191a565b348015610954575f5ffd5b50610968610963366004615547565b611933565b6040516104a1929190615605565b348015610981575f5ffd5b506104bf600c5481565b348015610996575f5ffd5b506104bf60135481565b3480156109ab575f5ffd5b506104ec6119df565b3480156109bf575f5ffd5b506104bf6109ce366004615630565b602b60209081525f928352604080842090915290825290205481565b3480156109f5575f5ffd5b50610a09610a043660046154ea565b6119f0565b604080516001600160a01b03909616865260208601949094529284019190915260608301521515608082015260a0016104a1565b348015610a48575f5ffd5b50610594610a573660046154ea565b611a47565b348015610a67575f5ffd5b506104bf62093a8081565b6104ec610a8036600461565c565b611a7b565b348015610a90575f5ffd5b506104ec612580565b6104ec610aa73660046154ea565b612590565b348015610ab7575f5ffd5b506104ec61283a565b348015610acb575f5ffd5b506104ec610ada366004615547565b612894565b348015610aea575f5ffd5b505f546001600160a01b0316610594565b348015610b06575f5ffd5b506104ec610b15366004615547565b612916565b348015610b25575f5ffd5b506104ec610b343660046156de565b612ac5565b348015610b44575f5ffd5b506104ec610b53366004615547565b612c9c565b348015610b63575f5ffd5b506104ec610b72366004615547565b612cc6565b348015610b82575f5ffd5b50600554610594906001600160a01b031681565b348015610ba1575f5ffd5b506104bf600b5481565b348015610bb6575f5ffd5b506104bf60235481565b348015610bcb575f5ffd5b506104ec610bda366004615547565b612cf0565b348015610bea575f5ffd5b506104bf60145481565b6104ec610c0236600461547b565b612d1a565b348015610c12575f5ffd5b506104ec610c2136600461574c565b61328b565b348015610c31575f5ffd5b506104bf610c40366004615547565b60296020525f908152604090205481565b348015610c5c575f5ffd5b50600354610594906001600160a01b031681565b348015610c7b575f5ffd5b506104bf610c8a366004615547565b60276020525f908152604090205481565b348015610ca6575f5ffd5b50600e54610594906001600160a01b031681565b348015610cc5575f5ffd5b50610495610cd43660046154ea565b601b60209081525f928352604080842090915290825290205460ff1681565b348015610cfe575f5ffd5b506104ec610d0d36600461547b565b61341c565b348015610d1d575f5ffd5b506104bf610d2c366004615547565b60286020525f908152604090205481565b348015610d48575f5ffd5b506104bf610d57366004615630565b602a60209081525f928352604080842090915290825290205481565b348015610d7e575f5ffd5b506104ec610d8d366004615547565b613429565b348015610d9d575f5ffd5b506104bf60115481565b348015610db2575f5ffd5b50610f69610dc136600461547b565b6016602052805f5260405f205f91509050805f015490806001015f9054906101000a90046001600160a01b0316908060010160149054906101000a900460ff1690806002015f9054906101000a90046001600160a01b031690806003015490806004015f9054906101000a90046001600160a01b031690806005015490806006015490806007015490806008015f9054906101000a900460ff16908060080160019054906101000a90046001600160a01b03169080600901549080600a016040518060a00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815250509080600f016040518060a00160405290815f82015f9054906101000a900460ff161515151581526020015f820160019054906101000a900460ff1615151515815260200160018201548152602001600282015f9054906101000a90046001600160401b03166001600160401b03166001600160401b0316815260200160038201548152505090508e565b6040516104a19e9d9c9b9a999897969594939291906157d4565b348015610f8e575f5ffd5b506104ec610f9d366004615547565b6134d5565b348015610fad575f5ffd5b50610fc1610fbc36600461547b565b61354a565b6040516104a191906158e0565b348015610fd9575f5ffd5b506104ec610fe836600461547b565b6135f2565b348015610ff8575f5ffd5b506104bf600a81565b34801561100c575f5ffd5b506104ec61101b36600461595a565b6135ff565b34801561102b575f5ffd5b506104ec61103a36600461547b565b613669565b34801561104a575f5ffd5b506104ec611059366004615547565b613676565b348015611069575f5ffd5b506104bf60125481565b34801561107e575f5ffd5b506020546104bf565b348015611092575f5ffd5b506104ec6110a136600461547b565b6136b0565b3480156110b1575f5ffd5b506104ec6110c0366004615630565b6136bd565b6110cd6137f7565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6110ff6137f7565b600f91909155601055565b6111126137f7565b600d55565b5f611120613823565b611128613869565b611131826138c2565b905061113c60018055565b919050565b6111496137f7565b601255565b6020818154811061115d575f80fd5b5f91825260209091200154905081565b6022818154811061115d575f80fd5b611184613869565b61118c613823565b333214806111a85750335f9081526006602052604090205460ff165b6111cd5760405162461bcd60e51b81526004016111c490615999565b60405180910390fd5b5f818152601660205260409020600454600a8201906001600160a01b031661122f5760405162461bcd60e51b815260206004820152601560248201527415da5b9b995c88141a58dad95c881b9bdd081cd95d605a1b60448201526064016111c4565b6002600883015460ff16600381111561124a5761124a61579c565b1415801561127157506003600883015460ff16600381111561126e5761126e61579c565b14155b6112ae5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e4818db1bdcd95960921b60448201526064016111c4565b5f838152601a602052604090205460ff16156113045760405162461bcd60e51b815260206004820152601560248201527415da5b9b995c88185b1c9958591e481c1a58dad959605a1b60448201526064016111c4565b80546113445760405162461bcd60e51b815260206004820152600f60248201526e139bc81d1a58dad95d1cc81cdbdb19608a1b60448201526064016111c4565b61134e33836146e9565b61136b57604051633130f83b60e21b815260040160405180910390fd5b600480546040516316fe155560e31b81529182018590525f9182916001600160a01b03169063b7f0aaa8906024016040805180830381865afa9250505080156113d1575060408051601f3d908101601f191682019092526113ce918101906159de565b60015b6114b4576113dd615a0a565b806308c379a00361143357506113f1615a63565b806113fc575061146c565b8060405160200161140d9190615ae5565b60408051601f198184030181529082905262461bcd60e51b82526111c491600401615b24565b634e487b710361146c57611445615b36565b90611450575061146c565b6040516376fe9bf960e11b8152600481018290526024016111c4565b60405162461bcd60e51b815260206004820152601d60248201527f5069636b6572204572726f723a20756e6b6e6f776e206661696c75726500000060448201526064016111c4565b6001600160a01b0382166115035760405162461bcd60e51b815260206004820152601660248201527557696e6e6572206973207a65726f206164647265737360501b60448201526064016111c4565b5f878152601a60209081526040808320805460ff199081166001908117909255825180840184526001600160a01b038881168083528287018981528f8952601d8852978690209251835492166001600160a01b03199283161783559651919093015560088b0180549091166002179055600d8a01805490911684179055600e8901849055518381529395509193509187917fc1ff24a495d58cd405efb9c0782d4630105d6c9aeb10b1ca1f1ac1076e1605b3910160405180910390a36115c985856147b2565b505050506115d660018055565b50565b6115e16137f7565b6115e9615013565b565b60086020525f9081526040902080546001820180546001600160a01b03909216929161161690615b53565b80601f016020809104026020016040519081016040528092919081815260200182805461164290615b53565b801561168d5780601f106116645761010080835404028352916020019161168d565b820191905f5260205f20905b81548152906001019060200180831161167057829003601f168201915b5050505060028301546003909301549192916001600160a01b0316905084565b6017602052815f5260405f2081815481106116c6575f80fd5b905f5260205f20015f91509150505481565b600781815481106116e7575f80fd5b5f918252602090912001546001600160a01b0316905081565b6117086137f7565b6001600160a01b0381166117505760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016111c4565b6001600160a01b038181165f90815260086020526040902054166117b65760405162461bcd60e51b815260206004820152601960248201527f436f6c6c656374696f6e206e6f7420726567697374657265640000000000000060448201526064016111c4565b6001600160a01b0381165f90815260086020526040812080546001600160a01b0319168155906117e96001830182615431565b505f60028201819055600390910180546001600160a01b0319169055600754905b818110156118f957826001600160a01b03166007828154811061182f5761182f615b8b565b5f918252602090912001546001600160a01b0316036118f1576007611855600184615bb3565b8154811061186557611865615b8b565b5f91825260209091200154600780546001600160a01b03909216918390811061189057611890615b8b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060078054806118cc576118cc615bc6565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b60010161180a565b505050565b6119066137f7565b600b55565b600981815481106116e7575f80fd5b601e602052815f5260405f2081815481106116c6575f80fd5b600a6020525f9081526040902080546001820180546001600160a01b03909216929161195e90615b53565b80601f016020809104026020016040519081016040528092919081815260200182805461198a90615b53565b80156119d55780601f106119ac576101008083540402835291602001916119d5565b820191905f5260205f20905b8154815290600101906020018083116119b857829003601f168201915b5050505050905082565b6119e76137f7565b6115e95f615065565b601c602052815f5260405f208181548110611a09575f80fd5b5f918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b039093169550909350919060ff1685565b6018602052815f5260405f208181548110611a60575f80fd5b5f918252602090912001546001600160a01b03169150829050565b611a83613869565b611a8b613823565b33321480611aa75750335f9081526006602052604090205460ff165b611ac35760405162461bcd60e51b81526004016111c490615999565b5f8311611b035760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064016111c4565b5f84815260166020526040812090600882015460ff166003811115611b2a57611b2a61579c565b14611b675760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b60448201526064016111c4565b80600701544210611ba95760405162461bcd60e51b815260206004820152600c60248201526b149859999b1948195b99195960a21b60448201526064016111c4565b60018101546001600160a01b03163303611bfb5760405162461bcd60e51b815260206004820152601360248201527210dc99585d1bdc881b9bdd08185b1b1bddd959606a1b60448201526064016111c4565b600881015461010090046001600160a01b031615611e64576002546008820154610100918290046001600160a01b039081169290910416145f848103611c7a5760405162461bcd60e51b815260206004820152601460248201527319d85d19551bdad95b9259081c995c5d5a5c995960621b60448201526064016111c4565b8115611d285760088301546040516331a9108f60e11b81525f9133916101009091046001600160a01b031690636352211e90611cbe908a9060040190815260200190565b602060405180830381865afa158015611cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfd9190615bda565b6001600160a01b03161490505f611d1433886150b4565b90508180611d1f5750805b92505050611da7565b60088301546040516331a9108f60e11b815260048101879052339161010090046001600160a01b031690636352211e90602401602060405180830381865afa158015611d76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d9a9190615bda565b6001600160a01b03161490505b80611df45760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f776e6572206f66206761746520746f6b656e00000000000000000060448201526064016111c4565b5f878152601b6020908152604080832088845290915290205460ff1615611e5d5760405162461bcd60e51b815260206004820152601760248201527f4578636c20746f6b656e20616c7265616479207573656400000000000000000060448201526064016111c4565b5050611eb2565b8215611eb25760405162461bcd60e51b815260206004820152601860248201527f67617465546f6b656e4964206e6f74206578706563746564000000000000000060448201526064016111c4565b600a81015460068201545f91611ec791615bb3565b905080851115611f195760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768207469636b657473206c65667400000000000000000060448201526064016111c4565b5f8681526019602090815260408083203384529091529020546009830154611f418783615bf5565b1115611f7f5760405162461bcd60e51b815260206004820152600d60248201526c115e18d959591cc81b1a5b5a5d609a1b60448201526064016111c4565b5f868460050154611f909190615c08565b90508415612192575060128301545f908103611fbf576040516313c29beb60e21b815260040160405180910390fd5b6005546001600160a01b0316611fe8576040516360d3bd9b60e11b815260040160405180910390fd5b34156120295760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081216541148185b5d60821b60448201526064016111c4565b60128401545f9061203b908990615c08565b6005546040516370a0823160e01b81523360048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612086573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120aa9190615c1f565b9050818110156120cd5760405163303e7a0760e01b815260040160405180910390fd5b600554604051633d984a6b60e11b8152336004820152602481018c9052604481018490526001600160a01b0390911690637b3094d6906064015f604051808303815f87803b15801561211d575f5ffd5b505af192505050801561212e575060015b61218b573d80801561215b576040519150601f19603f3d011682016040523d82523d5f602084013e612160565b606091505b5080511561217057805160208201fd5b80604051632efb8a8160e21b81526004016111c49190615b24565b505061229b565b60048401546001600160a01b03166121eb578034146121e65760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081216541148185b5d60821b60448201526064016111c4565b61229b565b6004808501546040516323b872dd60e01b81526001600160a01b03909116916323b872dd916122209133913091879101615c36565b6020604051808303815f875af115801561223c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122609190615c5a565b61229b5760405162461bcd60e51b815260206004820152600c60248201526b14185e5b595b9d0819985a5b60a21b60448201526064016111c4565b815f036122d0575f8881526018602090815260408220805460018101825590835291200180546001600160a01b031916331790555b5f888152601960209081526040808320338452909152812080548992906122f8908490615bf5565b9091555050600a840180548891905f90612313908490615bf5565b9091555050600b840180548291905f9061232e908490615bf5565b90915550505f888152601c60209081526040808320815160a081018352338082528185018d815242838601908152606084018e81528d151560808601908152865460018082018955978b52898b209651600590910290960180546001600160a01b0319166001600160a01b039097169690961786559251958501959095555160028401559251600383015591516004909101805460ff191691151591909117905583526028909152812080548992906123e8908490615bf5565b925050819055508660245f8282546124009190615bf5565b9091555050600884015461010090046001600160a01b031615612441575f888152601b602090815260408083208984529091529020805460ff191660011790555b61244b33896151e5565b6005546001600160a01b031615801590612463575084155b1561250957600554604051632fbb1b0960e01b8152600481018a90523360248201527fa373ddddfee8d2b488aaa8d0eb111c537a84f43f82a2fd27cc3375908a96708e6044820152606481018990526001600160a01b0390911690632fbb1b09906084016020604051808303815f875af11580156124e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125079190615c5a565b505b604080518881526020810188905286151581830152905133918a917f885c137bcf20d0136037b6cc715639c3bd5484642ceca94076ab6218bc58bfa89181900360600190a36006840154600a8501540361256d5760088401805460ff191660011790555b5050505061257a60018055565b50505050565b6125886137f7565b6115e9615259565b612598613869565b5f81116125d35760405162461bcd60e51b81526020600482015260096024820152680706572696f64733d360bc1b60448201526064016111c4565b5f82815260166020526040812090600882015460ff1660038111156125fa576125fa61579c565b146126375760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b60448201526064016111c4565b5f826013546126469190615c08565b90508034146126875760405162461bcd60e51b815260206004820152600d60248201526c626164206d73672e76616c756560981b60448201526064016111c4565b60118201546001600160401b03165f4282116126a357426126a5565b815b90505f6126b562093a8087615c75565b6126bf9083615c9e565b60118601805467ffffffffffffffff19166001600160401b03831690811790915590915042116126f2576126f287615296565b600e546001600160a01b031661273b5760405162461bcd60e51b815260206004820152600e60248201526d0666565436f6c6c6563746f723d360941b60448201526064016111c4565b600e546040515f916001600160a01b03169034908381818185875af1925050503d805f8114612785576040519150601f19603f3d011682016040523d82523d5f602084013e61278a565b606091505b50509050806127d45760405162461bcd60e51b81526020600482015260166024820152751199585d1d5c995908199959481e19995c8819985a5b60521b60448201526064016111c4565b604080518881523460208201526001600160401b038681168284015284166060820152905133918a917f4b46fb692eac6328b179f93845053ebcd7bcf9fe6e074f3903bf0067321957e49181900360800190a350505050505061283660018055565b5050565b6128426137f7565b478061287a5760405162461bcd60e51b81526020600482015260076024820152664e6f204859504560c81b60448201526064016111c4565b6115d661288e5f546001600160a01b031690565b826152f6565b61289c6137f7565b6001600160a01b0381165f9081526006602052604090205460ff166128f65760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b60448201526064016111c4565b6001600160a01b03165f908152600660205260409020805460ff19169055565b61291e6137f7565b6001600160a01b0381166129645760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064016111c4565b6001600160a01b038181165f908152600a6020526040902054166129c15760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881b9bdd081c9959da5cdd195c995960621b60448201526064016111c4565b6001600160a01b0381165f908152600a6020526040812080546001600160a01b0319168155906129f46001830182615431565b50506009545f5b818110156118f957826001600160a01b031660098281548110612a2057612a20615b8b565b5f918252602090912001546001600160a01b031603612abd576009612a46600184615bb3565b81548110612a5657612a56615b8b565b5f91825260209091200154600980546001600160a01b039092169183908110612a8157612a81615b8b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806118cc576118cc615bc6565b6001016129fb565b612acd6137f7565b6001600160a01b038516612b155760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016111c4565b6103e8821115612b5a5760405162461bcd60e51b815260206004820152601060248201526f0a4def2c2d8e8f240e8dede40d0d2ced60831b60448201526064016111c4565b6001600160a01b038581165f9081526008602052604090205416612bc357600780546001810182555f919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0387161790555b6040518060800160405280866001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060208083018690526001600160a01b0385811660409485015289811683526008825292909120835181546001600160a01b03191693169290921782558201516001820190612c629082615d08565b5060408201516002820155606090910151600390910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b612ca46137f7565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b612cce6137f7565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b612cf86137f7565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b612d22613869565b612d2a613823565b5f81815260166020526040902060018101546001600160a01b0316331480612d5b57505f546001600160a01b031633145b612d985760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111c4565b5f600882015460ff166003811115612db257612db261579c565b14612df05760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073746174757360901b60448201526064016111c4565b600a81015415612e44578060070154421015612e445760405162461bcd60e51b8152602060048201526013602482015272526166666c65207374696c6c2061637469766560681b60448201526064016111c4565b6014543414612e955760405162461bcd60e51b815260206004820152601760248201527f43616e63656c2070656e616c747920726571756972656400000000000000000060448201526064016111c4565b60088101805460ff19166003179055600a8101541561302f575f82815260186020908152604080832080548251818502810185019093528083529192909190830182828015612f0b57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612eed575b509394505f93505050505b815181101561302c575f828281518110612f3257612f32615b8b565b6020908102919091018101515f8781526019835260408082206001600160a01b038416835290935291909120549091508015613022575f856005015482612f799190615c08565b60048701549091506001600160a01b0316612fa657612fa16001600160a01b038416826152f6565b613020565b60048681015460405163a9059cbb60e01b81526001600160a01b03868116938201939093526024810184905291169063a9059cbb906044016020604051808303815f875af1158015612ffa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061301e9190615c5a565b505b505b5050600101612f16565b50505b5f600182810154600160a01b900460ff16908111156130505761305061579c565b036131115760028101546001600160a01b031661308b5760038101546001820154613086916001600160a01b03909116906152f6565b6131a6565b60028101546001820154600383015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af11580156130e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061310b9190615c5a565b506131a6565b60018082810154600160a01b900460ff16908111156131325761313261579c565b036131a6576002810154600182015460038301546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936131789330939290911691600401615c36565b5f604051808303815f87803b15801561318f575f5ffd5b505af11580156131a1573d5f5f3e3d5ffd5b505050505b6005546001600160a01b03161561325757600554604051632fbb1b0960e01b8152600481018490523360248201527f2c806d86ec7b269f509920644acf521970ee0dd23037515935166f066128f77660448201525f60648201526001600160a01b0390911690632fbb1b09906084016020604051808303815f875af1158015613231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132559190615c5a565b505b60405182907fb65f9c027107c653c9c1b5190af4437a21775684943c70e325624643546b4b19905f90a2506115d660018055565b6132936137f7565b6001600160a01b0383166132d95760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064016111c4565b806133155760405162461bcd60e51b815260206004820152600c60248201526b5469636b657220656d70747960a01b60448201526064016111c4565b6001600160a01b038381165f908152600a60205260409020541661337e57600980546001810182555f919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0385161790555b6040518060400160405280846001600160a01b0316815260200183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506001600160a01b038681168252600a60209081526040909220845181546001600160a01b03191692169190911781559083015190915060018201906134149082615d08565b505050505050565b6134246137f7565b600c55565b6134316137f7565b600380546001600160a01b0319166001600160a01b03831690811790915560408051632777b50160e01b81529051632777b501916004808201926020929091908290030181865afa158015613488573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134ac9190615bda565b600260016101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b6134dd6137f7565b5f816001600160a01b03163b116135275760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b60448201526064016111c4565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b6060601c5f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156135e7575f8481526020908190206040805160a0810182526005860290920180546001600160a01b0316835260018082015484860152600282015492840192909252600381015460608401526004015460ff1615156080830152908352909201910161357c565b505050509050919050565b6135fa6137f7565b601355565b6136076137f7565b6040516323b872dd60e01b81526001600160a01b038416906323b872dd9061363790309085908790600401615c36565b5f604051808303815f87803b15801561364e575f5ffd5b505af1158015613660573d5f5f3e3d5ffd5b50505050505050565b6136716137f7565b601455565b61367e6137f7565b6001600160a01b0381166136a757604051631e4fbdf760e01b81525f60048201526024016111c4565b6115d681615065565b6136b86137f7565b601155565b6136c56137f7565b6001600160a01b03821661371b5760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016111c4565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561375f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137839190615c1f565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af11580156137d3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257a9190615c5a565b5f546001600160a01b031633146115e95760405163118cdaa760e01b81523360048201526024016111c4565b60025460ff16156115e95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016111c4565b6002600154036138bb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016111c4565b6002600155565b5f806138d46080840160608501615547565b6001600160a01b031614613953575f600a816138f66080860160608701615547565b6001600160a01b03908116825260208201929092526040015f205416036139535760405162461bcd60e51b8152602060048201526011602482015270115490cc8c081b9bdd08185b1b1bddd959607a1b60448201526064016111c4565b5f8260a0013511801561396c5750600b548260a0013511155b6139ac5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207469636b657451747960781b60448201526064016111c4565b5f8260800135116139f75760405162461bcd60e51b8152602060048201526015602482015274151a58dad95d081c1c9a58d9481c995c5d5a5c9959605a1b60448201526064016111c4565b5f8260c00135118015613a105750600c548260c0013511155b613a4f5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b60448201526064016111c4565b5f8260e00135118015613a6a57508160a001358260e0013511155b613aab5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21036b0bc2832b92ab9b2b960711b60448201526064016111c4565b61016082013515613b08578160a001358261016001351115613b085760405162461bcd60e51b81526020600482015260166024820152756d696e5469636b657473203e207469636b657451747960501b60448201526064016111c4565b6101a082013515613b86576005546001600160a01b0316613b3c576040516313c29beb60e21b815260040160405180910390fd5b5f613b4d6080840160608501615547565b6001600160a01b0316141580613b6857506014548260800135105b15613b86576040516387a66f8d60e01b815260040160405180910390fd5b5f80613b956020850185615dc2565b6001811115613ba657613ba661579c565b03613cab575f613bbc6040850160208601615547565b6001600160a01b031603613c29575f836040013511613c145760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081c1c9a5e9948185b5bdd5b9d60621b60448201526064016111c4565b613c22604084013582615bf5565b9050613d76565b5f600a81613c3d6040870160208801615547565b6001600160a01b03908116825260208201929092526040015f20541603613ca65760405162461bcd60e51b815260206004820152601760248201527f5072697a6520746f6b656e206e6f7420616c6c6f77656400000000000000000060448201526064016111c4565b613d76565b6001613cba6020850185615dc2565b6001811115613ccb57613ccb61579c565b03613d3f575f600881613ce46040870160208801615547565b6001600160a01b03908116825260208201929092526040015f20541603613ca65760405162461bcd60e51b815260206004820152600f60248201526e139195081b9bdd08185b1b1bddd959608a1b60448201526064016111c4565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207479706560a01b60448201526064016111c4565b613d8861016084016101408501615de0565b15613d9d57601154613d9a9082615bf5565b90505b61016083013515613db857601254613db59082615bf5565b90505b5f613dcb6101a085016101808601615dfb565b60ff161115613e0357613de66101a084016101808501615dfb565b60ff16601354613df69190615c08565b613e009082615bf5565b90505b803414613e425760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b60448201526064016111c4565b505f613e516020840184615dc2565b6001811115613e6257613e6261579c565b148015613e8757505f613e7b6040840160208501615547565b6001600160a01b031614155b15613f6057613e9c6040830160208401615547565b6001600160a01b03166323b872dd333085604001356040518463ffffffff1660e01b8152600401613ecf93929190615c36565b6020604051808303815f875af1158015613eeb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f0f9190615c5a565b613f5b5760405162461bcd60e51b815260206004820152601d60248201527f5072697a65204552433230207472616e7366657246726f6d206661696c00000060448201526064016111c4565b613ff6565b6001613f6f6020840184615dc2565b6001811115613f8057613f8061579c565b03613ff657613f956040830160208401615547565b6001600160a01b03166323b872dd333085604001356040518463ffffffff1660e01b8152600401613fc893929190615c36565b5f604051808303815f87803b158015613fdf575f5ffd5b505af1158015613ff1573d5f5f3e3d5ffd5b505050505b61400861016083016101408401615de0565b156140cf57600e546001600160a01b03166140355760405162461bcd60e51b81526004016111c490615e1b565b600e546011546040515f926001600160a01b031691908381818185875af1925050503d805f8114614081576040519150601f19603f3d011682016040523d82523d5f602084013e614086565b606091505b50509050806140cd5760405162461bcd60e51b815260206004820152601360248201527211dc9858d948199959481e19995c8819985a5b606a1b60448201526064016111c4565b505b610160820135156141a657600e546001600160a01b03166141025760405162461bcd60e51b81526004016111c490615e1b565b600e546012546040515f926001600160a01b031691908381818185875af1925050503d805f811461414e576040519150601f19603f3d011682016040523d82523d5f602084013e614153565b606091505b50509050806141a45760405162461bcd60e51b815260206004820152601a60248201527f4175746f46696e616c697a65206665652078666572206661696c00000000000060448201526064016111c4565b505b5f6141b96101a084016101808501615dfb565b60ff1611156142ac575f6141d56101a084016101808501615dfb565b60ff166013546141e59190615c08565b600e549091506001600160a01b03166142105760405162461bcd60e51b81526004016111c490615e1b565b600e546040515f916001600160a01b03169083908381818185875af1925050503d805f811461425a576040519150601f19603f3d011682016040523d82523d5f602084013e61425f565b606091505b50509050806142a95760405162461bcd60e51b81526020600482015260166024820152751199585d1d5c995908199959481e19995c8819985a5b60521b60448201526064016111c4565b50505b614333336142c06040850160208601615547565b436142d360a08701356040880135615bf5565b6142dd9190615bf5565b60408051426020808301919091526bffffffffffffffffffffffff19606096871b8116838501529490951b9093166054840152606880840192909252805180840390920182526088909201909152805191012090565b5f8181526016602090815260409091208281556001810180546001600160a01b0319163317905591925061436990840184615dc2565b8160010160146101000a81548160ff0219169083600181111561438e5761438e61579c565b02179055506143a36040840160208501615547565b6002820180546001600160a01b0319166001600160a01b0392909216919091179055604083013560038201556143df6080840160608501615547565b6004820180546001600160a01b0319166001600160a01b03929092169190911790556080830135600582015560a0830135600682015561442360c084013542615bf5565b600782015560088101805460ff1916905561444661012084016101008501615547565b6008820180546001600160a01b039290921661010002610100600160a81b031990921691909117905560e083013560098201556040805160a081019091528061449761014086016101208701615de0565b151581526020016144b061016086016101408701615de0565b1515815261016085013560208201526040015f6144d56101a087016101808801615dfb565b60ff16116144e3575f614519565b62093a806144f96101a087016101808801615dfb565b60ff166145069190615c75565b614519906001600160401b031642615bf5565b6001600160401b0390811682526101a08601356020928301528251600f850180549385015115156101000261ff00199215159290921661ffff1990941693909317179091556040820151601084015560608201516011840180549190921667ffffffffffffffff199091168117909155608090910151601283015542116145a3576145a382615296565b6040805160a0810182525f8082526020808301829052828401829052606083018290526080909201819052600a8401819055600b8401819055600c8401819055600d840180546001600160a01b0319169055600e84018190553380825260178352838220805460018181018355918452848420018790556022805491820190557f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e510018690558152602790915290812080549161465e83615e41565b90915550339050827f307ffadcf63a116158ce0668f08a5386c70bf41e1ac9756dfd08958260eb4f1f6146946020870187615dc2565b6146a46040880160208901615547565b60408801356146b960808a0160608b01615547565b89608001358a60a0013589600701546040516146db9796959493929190615e59565b60405180910390a350919050565b5f6001600883015460ff1660038111156147055761470561579c565b03614712575060016147ac565b60018201546001600160a01b0390811690841603614732575060016147ac565b600782015442101580614748575f9150506147ac565b6001600160a01b0384165f9081526015602052604090205460ff16614770575f9150506147ac565b60108301545f90158061478b57506010840154600a85015410155b9050801561479e576001925050506147ac565b6147a784615382565b925050505b92915050565b600d810154600a8201906001600160a01b0316806148035760405162461bcd60e51b815260206004820152600e60248201526d15da5b9b995c881b9bdd081cd95d60921b60448201526064016111c4565b600e546001600160a01b031661482b5760405162461bcd60e51b81526004016111c490615e1b565b6003546001840154604051632c9aab9b60e11b81526001600160a01b0391821660048201525f929190911690635935573690602401602060405180830381865afa15801561487b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061489f9190615c1f565b90505f600a6148ae8184615ea1565b6148b89190615c08565b90505f81600d54116148ca575f6148d8565b81600d546148d89190615bb3565b90505f6127108287600101546148ee9190615c08565b6148f89190615ea1565b90505f81876001015461490b9190615bb3565b60028801839055600f8901549091505f9060ff166149365760018901546001600160a01b031661493a565b61dead5b60048a01549091506001600160a01b0316614a7c57600e546040515f916001600160a01b03169085908381818185875af1925050503d805f8114614999576040519150601f19603f3d011682016040523d82523d5f602084013e61499e565b606091505b50509050806149e45760405162461bcd60e51b815260206004820152601260248201527113985d1a5d9948199959481d1e0819985a5b60721b60448201526064016111c4565b5f826001600160a01b0316846040515f6040518083038185875af1925050503d805f8114614a2d576040519150601f19603f3d011682016040523d82523d5f602084013e614a32565b606091505b5050905080614a755760405162461bcd60e51b815260206004820152600f60248201526e13985d1a5d99481c185e4819985a5b608a1b60448201526064016111c4565b5050614beb565b600489810154600e5460405163a9059cbb60e01b81526001600160a01b039182169381019390935260248301869052169063a9059cbb906044016020604051808303815f875af1158015614ad2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614af69190615c5a565b614b365760405162461bcd60e51b8152602060048201526011602482015270115490cc8c08199959481d1e0819985a5b607a1b60448201526064016111c4565b60048981015460405163a9059cbb60e01b81526001600160a01b03848116938201939093526024810185905291169063a9059cbb906044016020604051808303815f875af1158015614b8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bae9190615c5a565b614beb5760405162461bcd60e51b815260206004820152600e60248201526d115490cc8c081c185e4819985a5b60921b60448201526064016111c4565b5f60018a810154600160a01b900460ff1690811115614c0c57614c0c61579c565b03614dc95760028901546001600160a01b0316614cc15760038901546040515f916001600160a01b038a16918381818185875af1925050503d805f8114614c6e576040519150601f19603f3d011682016040523d82523d5f602084013e614c73565b606091505b5050905080614cbb5760405162461bcd60e51b815260206004820152601460248201527313985d1a5d99481c1c9a5e99481d1e0819985a5b60621b60448201526064016111c4565b50614d7e565b600289015460038a015460405163a9059cbb60e01b81526001600160a01b038a81166004830152602482019290925291169063a9059cbb906044016020604051808303815f875af1158015614d18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d3c9190615c5a565b614d7e5760405162461bcd60e51b8152602060048201526013602482015272115490cc8c081c1c9a5e99481d1e0819985a5b606a1b60448201526064016111c4565b60038901546001600160a01b038089165f908152602b6020908152604080832060028f015490941683529290529081208054909190614dbe908490615bf5565b90915550614e719050565b600289015460038a01546040516323b872dd60e01b81526001600160a01b03909216916323b872dd91614e029130918c91600401615c36565b5f604051808303815f87803b158015614e19575f5ffd5b505af1158015614e2b573d5f5f3e3d5ffd5b505050506001600160a01b038781165f908152602b6020908152604080832060028e01549094168352929052908120805460019290614e6b908490615bf5565b90915550505b600489015488546001600160a01b039182165f8181526025602090815260408083208054909501909455602380546001908101909155948c1682526029815283822080549095019094558181526026909352908220805491928692614ed7908490615bf5565b90915550506001600160a01b038083165f908152602a6020908152604080832093851683529290529081208054859290614f12908490615bf5565b90915550506005546001600160a01b031615614fc857600554604051632fbb1b0960e01b8152600481018d90523360248201527f08e19337d1433fa5b45d707c63aeb986ab7d1b81c8a4f6eabb9887f6875c0a0d60448201525f60648201526001600160a01b0390911690632fbb1b09906084016020604051808303815f875af1158015614fa2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fc69190615c5a565b505b6040516001600160a01b03891681528b907f4c9429828b8a8a57ced9bd94f8941b01b0647e84414d1004fca57ded1a0c7fbe9060200160405180910390a25050505050505050505050565b61501b6153bf565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600354604051632c9aab9b60e11b81526001600160a01b0384811660048301525f921690635935573690602401602060405180830381865afa1580156150fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151209190615c1f565b5f0361512d57505f6147ac565b600354604051631acb657560e21b81526001600160a01b0385811660048301525f921690636b2d95d4906024015f60405180830381865afa158015615174573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261519b9190810190615ec0565b90505f5b81518110156151db57838282815181106151bb576151bb615b8b565b6020026020010151036151d3576001925050506147ac565b60010161519f565b505f949350505050565b6001600160a01b0382165f908152601f6020908152604080832084845290915290205460ff16612836576001600160a01b03919091165f818152601f602090815260408083208584528252808320805460ff19166001908117909155938352601e8252822080549384018155825290200155565b615261613823565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150483390565b5f8181526021602052604090205460ff166115d6575f8181526021602090815260408220805460ff191660019081179091558154908101825591527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0155565b804710156153205760405163cf47918160e01b8152476004820152602481018290526044016111c4565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461536a576040519150601f19603f3d011682016040523d82523d5f602084013e61536f565b606091505b50915091508161257a5761257a81615408565b600f8101545f908190610100900460ff1661539f57600f546153a3565b6010545b90508083600701546153b59190615bf5565b4210159392505050565b60025460ff166115e95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016111c4565b8051156154185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461543d90615b53565b5f825580601f1061544c575050565b601f0160209004905f5260205f20908101906115d691905b80821115615477575f8155600101615464565b5090565b5f6020828403121561548b575f5ffd5b5035919050565b6001600160a01b03811681146115d6575f5ffd5b80151581146115d6575f5ffd5b5f5f604083850312156154c4575f5ffd5b82356154cf81615492565b915060208301356154df816154a6565b809150509250929050565b5f5f604083850312156154fb575f5ffd5b50508035926020909101359150565b5f6101c082840312801561551c575f5ffd5b509092915050565b5f5f60408385031215615535575f5ffd5b8235915060208301356154df81615492565b5f60208284031215615557575f5ffd5b813561556281615492565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03851681526080602082018190525f906155ba90830186615569565b6040830194909452506001600160a01b039190911660609091015292915050565b5f5f604083850312156155ec575f5ffd5b82356155f781615492565b946020939093013593505050565b6001600160a01b03831681526040602082018190525f9061562890830184615569565b949350505050565b5f5f60408385031215615641575f5ffd5b823561564c81615492565b915060208301356154df81615492565b5f5f5f5f6080858703121561566f575f5ffd5b843593506020850135925060408501359150606085013561568f816154a6565b939692955090935050565b5f5f83601f8401126156aa575f5ffd5b5081356001600160401b038111156156c0575f5ffd5b6020830191508360208285010111156156d7575f5ffd5b9250929050565b5f5f5f5f5f608086880312156156f2575f5ffd5b85356156fd81615492565b945060208601356001600160401b03811115615717575f5ffd5b6157238882890161569a565b90955093505060408601359150606086013561573e81615492565b809150509295509295909350565b5f5f5f6040848603121561575e575f5ffd5b833561576981615492565b925060208401356001600160401b03811115615783575f5ffd5b61578f8682870161569a565b9497909650939450505050565b634e487b7160e01b5f52602160045260245ffd5b600281106157c0576157c061579c565b9052565b600481106157c0576157c061579c565b8e81526001600160a01b038e1660208201526102c081016157f8604083018f6157b0565b6001600160a01b038d81166060840152608083018d90528b1660a08301528960c08301528860e0830152876101008301526158376101208301886157c4565b6001600160a01b0386166101408301526101608201859052835161018083015260208401516101a083015260408401516101c083015260608401516001600160a01b03166101e083015260808401516102008301528251151561022083015260208301511515610240830152604083015161026083015260608301516001600160401b031661028083015260808301516102a08301529f9e505050505050505050505050505050565b602080825282518282018190525f918401906040840190835b8181101561594f57835180516001600160a01b031684526020808201518186015260408083015190860152606080830151908601526080918201511515918501919091529093019260a0909201916001016158f9565b509095945050505050565b5f5f5f6060848603121561596c575f5ffd5b833561597781615492565b925060208401359150604084013561598e81615492565b809150509250925092565b60208082526025908201527f57616c6c6574206f722077686974656c697374656420636f6e7472616374206e604082015264195959195960da1b606082015260800190565b5f5f604083850312156159ef575f5ffd5b82516159fa81615492565b6020939093015192949293505050565b5f60033d1115615a205760045f5f3e505f5160e01c5b90565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715615a5c57615a5c615a23565b6040525050565b5f60443d1015615a705790565b6040513d600319016004823e80513d60248201116001600160401b0382111715615a9957505090565b80820180516001600160401b03811115615ab4575050505090565b3d8401600319018282016020011115615ace575050505090565b615add60208285010185615a37565b509392505050565b7f5069636b6572204572726f722028726561736f6e293a2000000000000000000081525f82518060208501601785015e5f920160170191825250919050565b602081525f6155626020830184615569565b5f5f60233d1115615b4f57602060045f3e50505f516001905b9091565b600181811c90821680615b6757607f821691505b602082108103615b8557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156147ac576147ac615b9f565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215615bea575f5ffd5b815161556281615492565b808201808211156147ac576147ac615b9f565b80820281158282048414176147ac576147ac615b9f565b5f60208284031215615c2f575f5ffd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215615c6a575f5ffd5b8151615562816154a6565b6001600160401b038181168382160290811690818114615c9757615c97615b9f565b5092915050565b6001600160401b0381811683821601908111156147ac576147ac615b9f565b601f8211156118f957805f5260205f20601f840160051c81016020851015615ce25750805b601f840160051c820191505b81811015615d01575f8155600101615cee565b5050505050565b81516001600160401b03811115615d2157615d21615a23565b615d3581615d2f8454615b53565b84615cbd565b6020601f821160018114615d67575f8315615d505750848201515b5f19600385901b1c1916600184901b178455615d01565b5f84815260208120601f198516915b82811015615d965787850151825560209485019460019092019101615d76565b5084821015615db357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215615dd2575f5ffd5b813560028110615562575f5ffd5b5f60208284031215615df0575f5ffd5b8135615562816154a6565b5f60208284031215615e0b575f5ffd5b813560ff81168114615562575f5ffd5b6020808252600c908201526b0666565436f6c6c6563743d360a41b604082015260600190565b5f60018201615e5257615e52615b9f565b5060010190565b60e08101615e67828a6157b0565b6001600160a01b0397881660208301526040820196909652939095166060840152608083019190915260a082015260c00191909152919050565b5f82615ebb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215615ed0575f5ffd5b81516001600160401b03811115615ee5575f5ffd5b8201601f81018413615ef5575f5ffd5b80516001600160401b03811115615f0e57615f0e615a23565b8060051b604051615f226020830182615a37565b918252602081840181019290810187841115615f3c575f5ffd5b6020850194505b83851015615f5f57845180825260209586019590935001615f43565b50969550505050505056fea26469706673582212205e9e1fe1c8800002af85ecc9de4a570c6d4ef7a55c260a1f8eb2a83057ad3db564736f6c634300081e0033000000000000000000000000efce3cf5ff0198f9303b4270d7d117ea74f083f8
Deployed Bytecode
0x608060405260043610610463575f3560e01c80637e3be98b11610241578063c347782411610134578063e86ab4cb116100b3578063f2fde38b11610078578063f2fde38b1461103f578063f7205ed61461105e578063f855d8e614611073578063fe63921714611087578063feaea586146110a6575f5ffd5b8063e86ab4cb14610fa2578063eca9dd1814610fce578063ee45ab2414610fed578063f0e9fcd114611001578063f2baaaeb14611020575f5ffd5b8063d340fd03116100f9578063d340fd0314610d3d578063d62cd77614610d73578063d7cd93f514610d92578063e31ef12c14610da7578063e43252d714610f83575f5ffd5b8063c347782414610c70578063c415b95c14610c9b578063c6e63e5e14610cba578063cf0f34c414610cf3578063d143d78414610d12575f5ffd5b8063983694b1116101c0578063a673f7a011610185578063a673f7a014610bdf578063b5cd87bf14610bf4578063b99d6aae14610c07578063b9b9da1114610c26578063c218929014610c51575f5ffd5b8063983694b114610b5857806398a8a3ec14610b775780639b89470314610b965780639ea6b4b914610bab578063a42dce8014610bc0575f5ffd5b80638ab1d681116102065780638ab1d68114610ac05780638da5cb5b14610adf57806390469a9d14610afb578063936f3d7814610b1a57806395754abb14610b39575f5ffd5b80637e3be98b14610a5c5780637fdac5aa14610a725780638456cb5914610a8557806384c438dc14610a995780638638395c14610aac575f5ffd5b8063431692721161035957806369bcd79d116102d85780636f84c77f1161029d5780636f84c77f1461098b578063715018a6146109a057806376006c07146109b457806376ff4401146109ea5780637dd97bef14610a3d575f5ffd5b806369bcd79d146108c65780636a84d89f146108f15780636b0300911461092a5780636b71537a146109495780636db5c8fd14610976575f5ffd5b80635028d05a1161031e5780635028d05a1461081e57806356264d6c1461083d578063563a25951461085c5780635c975abb146108905780635e5f2e26146108a7575f5ffd5b80634316927214610779578063493918981461078e5780634c999f5e146107ad5780634ca38d4a146107db5780634e13630b146107fa575f5ffd5b80632e6a1c5b116103e55780633f4ba83a116103aa5780633f4ba83a146106805780633f81a7d6146106945780633f9ca776146106bf578063411ef03b1461071c57806341ff7b421461074b575f5ffd5b80632e6a1c5b146105e057806331e69bec146105ff57806334701db81461061e5780633a9346e7146106335780633e4787d914610661575f5ffd5b80631476737d1161042b5780631476737d1461052c578063193d24171461053f5780631abd67261461057557806323eb17eb146105ac57806326232a2e146105cb575f5ffd5b80630403e0601461046757806304134827146104aa5780630cf96540146104cd5780630ebd5cf7146104ee57806312e8e2c31461050d575b5f5ffd5b348015610472575f5ffd5b5061049561048136600461547b565b601a6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156104b5575f5ffd5b506104bf600f5481565b6040519081526020016104a1565b3480156104d8575f5ffd5b506104ec6104e73660046154b3565b6110c5565b005b3480156104f9575f5ffd5b506104ec6105083660046154ea565b6110f7565b348015610518575f5ffd5b506104ec61052736600461547b565b61110a565b6104bf61053a36600461550a565b611117565b34801561054a575f5ffd5b506104bf610559366004615524565b601960209081525f928352604080842090915290825290205481565b348015610580575f5ffd5b50600454610594906001600160a01b031681565b6040516001600160a01b0390911681526020016104a1565b3480156105b7575f5ffd5b506104ec6105c636600461547b565b611141565b3480156105d6575f5ffd5b506104bf600d5481565b3480156105eb575f5ffd5b506104bf6105fa36600461547b565b61114e565b34801561060a575f5ffd5b506104bf61061936600461547b565b61116d565b348015610629575f5ffd5b506104bf60245481565b34801561063e575f5ffd5b5061049561064d366004615547565b60156020525f908152604090205460ff1681565b34801561066c575f5ffd5b506104ec61067b36600461547b565b61117c565b34801561068b575f5ffd5b506104ec6115d9565b34801561069f575f5ffd5b506104bf6106ae366004615547565b60266020525f908152604090205481565b3480156106ca575f5ffd5b506106fd6106d936600461547b565b601d6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016104a1565b348015610727575f5ffd5b5061073b610736366004615547565b6115eb565b6040516104a19493929190615597565b348015610756575f5ffd5b5061049561076536600461547b565b60216020525f908152604090205460ff1681565b348015610784575f5ffd5b506104bf60105481565b348015610799575f5ffd5b506104bf6107a83660046155db565b6116ad565b3480156107b8575f5ffd5b506104956107c7366004615547565b60066020525f908152604090205460ff1681565b3480156107e6575f5ffd5b506105946107f536600461547b565b6116d8565b348015610805575f5ffd5b506002546105949061010090046001600160a01b031681565b348015610829575f5ffd5b506104ec610838366004615547565b611700565b348015610848575f5ffd5b506104ec61085736600461547b565b6118fe565b348015610867575f5ffd5b506104bf610876366004615547565b6001600160a01b03165f908152601e602052604090205490565b34801561089b575f5ffd5b5060025460ff16610495565b3480156108b2575f5ffd5b506105946108c136600461547b565b61190b565b3480156108d1575f5ffd5b506104bf6108e0366004615547565b60256020525f908152604090205481565b3480156108fc575f5ffd5b5061049561090b3660046155db565b601f60209081525f928352604080842090915290825290205460ff1681565b348015610935575f5ffd5b506104bf6109443660046155db565b61191a565b348015610954575f5ffd5b50610968610963366004615547565b611933565b6040516104a1929190615605565b348015610981575f5ffd5b506104bf600c5481565b348015610996575f5ffd5b506104bf60135481565b3480156109ab575f5ffd5b506104ec6119df565b3480156109bf575f5ffd5b506104bf6109ce366004615630565b602b60209081525f928352604080842090915290825290205481565b3480156109f5575f5ffd5b50610a09610a043660046154ea565b6119f0565b604080516001600160a01b03909616865260208601949094529284019190915260608301521515608082015260a0016104a1565b348015610a48575f5ffd5b50610594610a573660046154ea565b611a47565b348015610a67575f5ffd5b506104bf62093a8081565b6104ec610a8036600461565c565b611a7b565b348015610a90575f5ffd5b506104ec612580565b6104ec610aa73660046154ea565b612590565b348015610ab7575f5ffd5b506104ec61283a565b348015610acb575f5ffd5b506104ec610ada366004615547565b612894565b348015610aea575f5ffd5b505f546001600160a01b0316610594565b348015610b06575f5ffd5b506104ec610b15366004615547565b612916565b348015610b25575f5ffd5b506104ec610b343660046156de565b612ac5565b348015610b44575f5ffd5b506104ec610b53366004615547565b612c9c565b348015610b63575f5ffd5b506104ec610b72366004615547565b612cc6565b348015610b82575f5ffd5b50600554610594906001600160a01b031681565b348015610ba1575f5ffd5b506104bf600b5481565b348015610bb6575f5ffd5b506104bf60235481565b348015610bcb575f5ffd5b506104ec610bda366004615547565b612cf0565b348015610bea575f5ffd5b506104bf60145481565b6104ec610c0236600461547b565b612d1a565b348015610c12575f5ffd5b506104ec610c2136600461574c565b61328b565b348015610c31575f5ffd5b506104bf610c40366004615547565b60296020525f908152604090205481565b348015610c5c575f5ffd5b50600354610594906001600160a01b031681565b348015610c7b575f5ffd5b506104bf610c8a366004615547565b60276020525f908152604090205481565b348015610ca6575f5ffd5b50600e54610594906001600160a01b031681565b348015610cc5575f5ffd5b50610495610cd43660046154ea565b601b60209081525f928352604080842090915290825290205460ff1681565b348015610cfe575f5ffd5b506104ec610d0d36600461547b565b61341c565b348015610d1d575f5ffd5b506104bf610d2c366004615547565b60286020525f908152604090205481565b348015610d48575f5ffd5b506104bf610d57366004615630565b602a60209081525f928352604080842090915290825290205481565b348015610d7e575f5ffd5b506104ec610d8d366004615547565b613429565b348015610d9d575f5ffd5b506104bf60115481565b348015610db2575f5ffd5b50610f69610dc136600461547b565b6016602052805f5260405f205f91509050805f015490806001015f9054906101000a90046001600160a01b0316908060010160149054906101000a900460ff1690806002015f9054906101000a90046001600160a01b031690806003015490806004015f9054906101000a90046001600160a01b031690806005015490806006015490806007015490806008015f9054906101000a900460ff16908060080160019054906101000a90046001600160a01b03169080600901549080600a016040518060a00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820154815250509080600f016040518060a00160405290815f82015f9054906101000a900460ff161515151581526020015f820160019054906101000a900460ff1615151515815260200160018201548152602001600282015f9054906101000a90046001600160401b03166001600160401b03166001600160401b0316815260200160038201548152505090508e565b6040516104a19e9d9c9b9a999897969594939291906157d4565b348015610f8e575f5ffd5b506104ec610f9d366004615547565b6134d5565b348015610fad575f5ffd5b50610fc1610fbc36600461547b565b61354a565b6040516104a191906158e0565b348015610fd9575f5ffd5b506104ec610fe836600461547b565b6135f2565b348015610ff8575f5ffd5b506104bf600a81565b34801561100c575f5ffd5b506104ec61101b36600461595a565b6135ff565b34801561102b575f5ffd5b506104ec61103a36600461547b565b613669565b34801561104a575f5ffd5b506104ec611059366004615547565b613676565b348015611069575f5ffd5b506104bf60125481565b34801561107e575f5ffd5b506020546104bf565b348015611092575f5ffd5b506104ec6110a136600461547b565b6136b0565b3480156110b1575f5ffd5b506104ec6110c0366004615630565b6136bd565b6110cd6137f7565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6110ff6137f7565b600f91909155601055565b6111126137f7565b600d55565b5f611120613823565b611128613869565b611131826138c2565b905061113c60018055565b919050565b6111496137f7565b601255565b6020818154811061115d575f80fd5b5f91825260209091200154905081565b6022818154811061115d575f80fd5b611184613869565b61118c613823565b333214806111a85750335f9081526006602052604090205460ff165b6111cd5760405162461bcd60e51b81526004016111c490615999565b60405180910390fd5b5f818152601660205260409020600454600a8201906001600160a01b031661122f5760405162461bcd60e51b815260206004820152601560248201527415da5b9b995c88141a58dad95c881b9bdd081cd95d605a1b60448201526064016111c4565b6002600883015460ff16600381111561124a5761124a61579c565b1415801561127157506003600883015460ff16600381111561126e5761126e61579c565b14155b6112ae5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e4818db1bdcd95960921b60448201526064016111c4565b5f838152601a602052604090205460ff16156113045760405162461bcd60e51b815260206004820152601560248201527415da5b9b995c88185b1c9958591e481c1a58dad959605a1b60448201526064016111c4565b80546113445760405162461bcd60e51b815260206004820152600f60248201526e139bc81d1a58dad95d1cc81cdbdb19608a1b60448201526064016111c4565b61134e33836146e9565b61136b57604051633130f83b60e21b815260040160405180910390fd5b600480546040516316fe155560e31b81529182018590525f9182916001600160a01b03169063b7f0aaa8906024016040805180830381865afa9250505080156113d1575060408051601f3d908101601f191682019092526113ce918101906159de565b60015b6114b4576113dd615a0a565b806308c379a00361143357506113f1615a63565b806113fc575061146c565b8060405160200161140d9190615ae5565b60408051601f198184030181529082905262461bcd60e51b82526111c491600401615b24565b634e487b710361146c57611445615b36565b90611450575061146c565b6040516376fe9bf960e11b8152600481018290526024016111c4565b60405162461bcd60e51b815260206004820152601d60248201527f5069636b6572204572726f723a20756e6b6e6f776e206661696c75726500000060448201526064016111c4565b6001600160a01b0382166115035760405162461bcd60e51b815260206004820152601660248201527557696e6e6572206973207a65726f206164647265737360501b60448201526064016111c4565b5f878152601a60209081526040808320805460ff199081166001908117909255825180840184526001600160a01b038881168083528287018981528f8952601d8852978690209251835492166001600160a01b03199283161783559651919093015560088b0180549091166002179055600d8a01805490911684179055600e8901849055518381529395509193509187917fc1ff24a495d58cd405efb9c0782d4630105d6c9aeb10b1ca1f1ac1076e1605b3910160405180910390a36115c985856147b2565b505050506115d660018055565b50565b6115e16137f7565b6115e9615013565b565b60086020525f9081526040902080546001820180546001600160a01b03909216929161161690615b53565b80601f016020809104026020016040519081016040528092919081815260200182805461164290615b53565b801561168d5780601f106116645761010080835404028352916020019161168d565b820191905f5260205f20905b81548152906001019060200180831161167057829003601f168201915b5050505060028301546003909301549192916001600160a01b0316905084565b6017602052815f5260405f2081815481106116c6575f80fd5b905f5260205f20015f91509150505481565b600781815481106116e7575f80fd5b5f918252602090912001546001600160a01b0316905081565b6117086137f7565b6001600160a01b0381166117505760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016111c4565b6001600160a01b038181165f90815260086020526040902054166117b65760405162461bcd60e51b815260206004820152601960248201527f436f6c6c656374696f6e206e6f7420726567697374657265640000000000000060448201526064016111c4565b6001600160a01b0381165f90815260086020526040812080546001600160a01b0319168155906117e96001830182615431565b505f60028201819055600390910180546001600160a01b0319169055600754905b818110156118f957826001600160a01b03166007828154811061182f5761182f615b8b565b5f918252602090912001546001600160a01b0316036118f1576007611855600184615bb3565b8154811061186557611865615b8b565b5f91825260209091200154600780546001600160a01b03909216918390811061189057611890615b8b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060078054806118cc576118cc615bc6565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b60010161180a565b505050565b6119066137f7565b600b55565b600981815481106116e7575f80fd5b601e602052815f5260405f2081815481106116c6575f80fd5b600a6020525f9081526040902080546001820180546001600160a01b03909216929161195e90615b53565b80601f016020809104026020016040519081016040528092919081815260200182805461198a90615b53565b80156119d55780601f106119ac576101008083540402835291602001916119d5565b820191905f5260205f20905b8154815290600101906020018083116119b857829003601f168201915b5050505050905082565b6119e76137f7565b6115e95f615065565b601c602052815f5260405f208181548110611a09575f80fd5b5f918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b039093169550909350919060ff1685565b6018602052815f5260405f208181548110611a60575f80fd5b5f918252602090912001546001600160a01b03169150829050565b611a83613869565b611a8b613823565b33321480611aa75750335f9081526006602052604090205460ff165b611ac35760405162461bcd60e51b81526004016111c490615999565b5f8311611b035760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064016111c4565b5f84815260166020526040812090600882015460ff166003811115611b2a57611b2a61579c565b14611b675760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b60448201526064016111c4565b80600701544210611ba95760405162461bcd60e51b815260206004820152600c60248201526b149859999b1948195b99195960a21b60448201526064016111c4565b60018101546001600160a01b03163303611bfb5760405162461bcd60e51b815260206004820152601360248201527210dc99585d1bdc881b9bdd08185b1b1bddd959606a1b60448201526064016111c4565b600881015461010090046001600160a01b031615611e64576002546008820154610100918290046001600160a01b039081169290910416145f848103611c7a5760405162461bcd60e51b815260206004820152601460248201527319d85d19551bdad95b9259081c995c5d5a5c995960621b60448201526064016111c4565b8115611d285760088301546040516331a9108f60e11b81525f9133916101009091046001600160a01b031690636352211e90611cbe908a9060040190815260200190565b602060405180830381865afa158015611cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfd9190615bda565b6001600160a01b03161490505f611d1433886150b4565b90508180611d1f5750805b92505050611da7565b60088301546040516331a9108f60e11b815260048101879052339161010090046001600160a01b031690636352211e90602401602060405180830381865afa158015611d76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d9a9190615bda565b6001600160a01b03161490505b80611df45760405162461bcd60e51b815260206004820152601760248201527f4e6f74206f776e6572206f66206761746520746f6b656e00000000000000000060448201526064016111c4565b5f878152601b6020908152604080832088845290915290205460ff1615611e5d5760405162461bcd60e51b815260206004820152601760248201527f4578636c20746f6b656e20616c7265616479207573656400000000000000000060448201526064016111c4565b5050611eb2565b8215611eb25760405162461bcd60e51b815260206004820152601860248201527f67617465546f6b656e4964206e6f74206578706563746564000000000000000060448201526064016111c4565b600a81015460068201545f91611ec791615bb3565b905080851115611f195760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768207469636b657473206c65667400000000000000000060448201526064016111c4565b5f8681526019602090815260408083203384529091529020546009830154611f418783615bf5565b1115611f7f5760405162461bcd60e51b815260206004820152600d60248201526c115e18d959591cc81b1a5b5a5d609a1b60448201526064016111c4565b5f868460050154611f909190615c08565b90508415612192575060128301545f908103611fbf576040516313c29beb60e21b815260040160405180910390fd5b6005546001600160a01b0316611fe8576040516360d3bd9b60e11b815260040160405180910390fd5b34156120295760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081216541148185b5d60821b60448201526064016111c4565b60128401545f9061203b908990615c08565b6005546040516370a0823160e01b81523360048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612086573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120aa9190615c1f565b9050818110156120cd5760405163303e7a0760e01b815260040160405180910390fd5b600554604051633d984a6b60e11b8152336004820152602481018c9052604481018490526001600160a01b0390911690637b3094d6906064015f604051808303815f87803b15801561211d575f5ffd5b505af192505050801561212e575060015b61218b573d80801561215b576040519150601f19603f3d011682016040523d82523d5f602084013e612160565b606091505b5080511561217057805160208201fd5b80604051632efb8a8160e21b81526004016111c49190615b24565b505061229b565b60048401546001600160a01b03166121eb578034146121e65760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081216541148185b5d60821b60448201526064016111c4565b61229b565b6004808501546040516323b872dd60e01b81526001600160a01b03909116916323b872dd916122209133913091879101615c36565b6020604051808303815f875af115801561223c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122609190615c5a565b61229b5760405162461bcd60e51b815260206004820152600c60248201526b14185e5b595b9d0819985a5b60a21b60448201526064016111c4565b815f036122d0575f8881526018602090815260408220805460018101825590835291200180546001600160a01b031916331790555b5f888152601960209081526040808320338452909152812080548992906122f8908490615bf5565b9091555050600a840180548891905f90612313908490615bf5565b9091555050600b840180548291905f9061232e908490615bf5565b90915550505f888152601c60209081526040808320815160a081018352338082528185018d815242838601908152606084018e81528d151560808601908152865460018082018955978b52898b209651600590910290960180546001600160a01b0319166001600160a01b039097169690961786559251958501959095555160028401559251600383015591516004909101805460ff191691151591909117905583526028909152812080548992906123e8908490615bf5565b925050819055508660245f8282546124009190615bf5565b9091555050600884015461010090046001600160a01b031615612441575f888152601b602090815260408083208984529091529020805460ff191660011790555b61244b33896151e5565b6005546001600160a01b031615801590612463575084155b1561250957600554604051632fbb1b0960e01b8152600481018a90523360248201527fa373ddddfee8d2b488aaa8d0eb111c537a84f43f82a2fd27cc3375908a96708e6044820152606481018990526001600160a01b0390911690632fbb1b09906084016020604051808303815f875af11580156124e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125079190615c5a565b505b604080518881526020810188905286151581830152905133918a917f885c137bcf20d0136037b6cc715639c3bd5484642ceca94076ab6218bc58bfa89181900360600190a36006840154600a8501540361256d5760088401805460ff191660011790555b5050505061257a60018055565b50505050565b6125886137f7565b6115e9615259565b612598613869565b5f81116125d35760405162461bcd60e51b81526020600482015260096024820152680706572696f64733d360bc1b60448201526064016111c4565b5f82815260166020526040812090600882015460ff1660038111156125fa576125fa61579c565b146126375760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420617661696c61626c6560981b60448201526064016111c4565b5f826013546126469190615c08565b90508034146126875760405162461bcd60e51b815260206004820152600d60248201526c626164206d73672e76616c756560981b60448201526064016111c4565b60118201546001600160401b03165f4282116126a357426126a5565b815b90505f6126b562093a8087615c75565b6126bf9083615c9e565b60118601805467ffffffffffffffff19166001600160401b03831690811790915590915042116126f2576126f287615296565b600e546001600160a01b031661273b5760405162461bcd60e51b815260206004820152600e60248201526d0666565436f6c6c6563746f723d360941b60448201526064016111c4565b600e546040515f916001600160a01b03169034908381818185875af1925050503d805f8114612785576040519150601f19603f3d011682016040523d82523d5f602084013e61278a565b606091505b50509050806127d45760405162461bcd60e51b81526020600482015260166024820152751199585d1d5c995908199959481e19995c8819985a5b60521b60448201526064016111c4565b604080518881523460208201526001600160401b038681168284015284166060820152905133918a917f4b46fb692eac6328b179f93845053ebcd7bcf9fe6e074f3903bf0067321957e49181900360800190a350505050505061283660018055565b5050565b6128426137f7565b478061287a5760405162461bcd60e51b81526020600482015260076024820152664e6f204859504560c81b60448201526064016111c4565b6115d661288e5f546001600160a01b031690565b826152f6565b61289c6137f7565b6001600160a01b0381165f9081526006602052604090205460ff166128f65760405162461bcd60e51b815260206004820152601060248201526f139bdd081a5b881dda1a5d195b1a5cdd60821b60448201526064016111c4565b6001600160a01b03165f908152600660205260409020805460ff19169055565b61291e6137f7565b6001600160a01b0381166129645760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064016111c4565b6001600160a01b038181165f908152600a6020526040902054166129c15760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881b9bdd081c9959da5cdd195c995960621b60448201526064016111c4565b6001600160a01b0381165f908152600a6020526040812080546001600160a01b0319168155906129f46001830182615431565b50506009545f5b818110156118f957826001600160a01b031660098281548110612a2057612a20615b8b565b5f918252602090912001546001600160a01b031603612abd576009612a46600184615bb3565b81548110612a5657612a56615b8b565b5f91825260209091200154600980546001600160a01b039092169183908110612a8157612a81615b8b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806118cc576118cc615bc6565b6001016129fb565b612acd6137f7565b6001600160a01b038516612b155760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016111c4565b6103e8821115612b5a5760405162461bcd60e51b815260206004820152601060248201526f0a4def2c2d8e8f240e8dede40d0d2ced60831b60448201526064016111c4565b6001600160a01b038581165f9081526008602052604090205416612bc357600780546001810182555f919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0387161790555b6040518060800160405280866001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250505060208083018690526001600160a01b0385811660409485015289811683526008825292909120835181546001600160a01b03191693169290921782558201516001820190612c629082615d08565b5060408201516002820155606090910151600390910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b612ca46137f7565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b612cce6137f7565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b612cf86137f7565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b612d22613869565b612d2a613823565b5f81815260166020526040902060018101546001600160a01b0316331480612d5b57505f546001600160a01b031633145b612d985760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111c4565b5f600882015460ff166003811115612db257612db261579c565b14612df05760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073746174757360901b60448201526064016111c4565b600a81015415612e44578060070154421015612e445760405162461bcd60e51b8152602060048201526013602482015272526166666c65207374696c6c2061637469766560681b60448201526064016111c4565b6014543414612e955760405162461bcd60e51b815260206004820152601760248201527f43616e63656c2070656e616c747920726571756972656400000000000000000060448201526064016111c4565b60088101805460ff19166003179055600a8101541561302f575f82815260186020908152604080832080548251818502810185019093528083529192909190830182828015612f0b57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612eed575b509394505f93505050505b815181101561302c575f828281518110612f3257612f32615b8b565b6020908102919091018101515f8781526019835260408082206001600160a01b038416835290935291909120549091508015613022575f856005015482612f799190615c08565b60048701549091506001600160a01b0316612fa657612fa16001600160a01b038416826152f6565b613020565b60048681015460405163a9059cbb60e01b81526001600160a01b03868116938201939093526024810184905291169063a9059cbb906044016020604051808303815f875af1158015612ffa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061301e9190615c5a565b505b505b5050600101612f16565b50505b5f600182810154600160a01b900460ff16908111156130505761305061579c565b036131115760028101546001600160a01b031661308b5760038101546001820154613086916001600160a01b03909116906152f6565b6131a6565b60028101546001820154600383015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303815f875af11580156130e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061310b9190615c5a565b506131a6565b60018082810154600160a01b900460ff16908111156131325761313261579c565b036131a6576002810154600182015460038301546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936131789330939290911691600401615c36565b5f604051808303815f87803b15801561318f575f5ffd5b505af11580156131a1573d5f5f3e3d5ffd5b505050505b6005546001600160a01b03161561325757600554604051632fbb1b0960e01b8152600481018490523360248201527f2c806d86ec7b269f509920644acf521970ee0dd23037515935166f066128f77660448201525f60648201526001600160a01b0390911690632fbb1b09906084016020604051808303815f875af1158015613231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132559190615c5a565b505b60405182907fb65f9c027107c653c9c1b5190af4437a21775684943c70e325624643546b4b19905f90a2506115d660018055565b6132936137f7565b6001600160a01b0383166132d95760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064016111c4565b806133155760405162461bcd60e51b815260206004820152600c60248201526b5469636b657220656d70747960a01b60448201526064016111c4565b6001600160a01b038381165f908152600a60205260409020541661337e57600980546001810182555f919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0385161790555b6040518060400160405280846001600160a01b0316815260200183838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506001600160a01b038681168252600a60209081526040909220845181546001600160a01b03191692169190911781559083015190915060018201906134149082615d08565b505050505050565b6134246137f7565b600c55565b6134316137f7565b600380546001600160a01b0319166001600160a01b03831690811790915560408051632777b50160e01b81529051632777b501916004808201926020929091908290030181865afa158015613488573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134ac9190615bda565b600260016101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b6134dd6137f7565b5f816001600160a01b03163b116135275760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b60448201526064016111c4565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b6060601c5f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156135e7575f8481526020908190206040805160a0810182526005860290920180546001600160a01b0316835260018082015484860152600282015492840192909252600381015460608401526004015460ff1615156080830152908352909201910161357c565b505050509050919050565b6135fa6137f7565b601355565b6136076137f7565b6040516323b872dd60e01b81526001600160a01b038416906323b872dd9061363790309085908790600401615c36565b5f604051808303815f87803b15801561364e575f5ffd5b505af1158015613660573d5f5f3e3d5ffd5b50505050505050565b6136716137f7565b601455565b61367e6137f7565b6001600160a01b0381166136a757604051631e4fbdf760e01b81525f60048201526024016111c4565b6115d681615065565b6136b86137f7565b601155565b6136c56137f7565b6001600160a01b03821661371b5760405162461bcd60e51b815260206004820152601960248201527f746f6b656e20616464726573732063616e6e6f7420626520300000000000000060448201526064016111c4565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561375f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137839190615c1f565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af11580156137d3573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257a9190615c5a565b5f546001600160a01b031633146115e95760405163118cdaa760e01b81523360048201526024016111c4565b60025460ff16156115e95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016111c4565b6002600154036138bb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016111c4565b6002600155565b5f806138d46080840160608501615547565b6001600160a01b031614613953575f600a816138f66080860160608701615547565b6001600160a01b03908116825260208201929092526040015f205416036139535760405162461bcd60e51b8152602060048201526011602482015270115490cc8c081b9bdd08185b1b1bddd959607a1b60448201526064016111c4565b5f8260a0013511801561396c5750600b548260a0013511155b6139ac5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207469636b657451747960781b60448201526064016111c4565b5f8260800135116139f75760405162461bcd60e51b8152602060048201526015602482015274151a58dad95d081c1c9a58d9481c995c5d5a5c9959605a1b60448201526064016111c4565b5f8260c00135118015613a105750600c548260c0013511155b613a4f5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b60448201526064016111c4565b5f8260e00135118015613a6a57508160a001358260e0013511155b613aab5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21036b0bc2832b92ab9b2b960711b60448201526064016111c4565b61016082013515613b08578160a001358261016001351115613b085760405162461bcd60e51b81526020600482015260166024820152756d696e5469636b657473203e207469636b657451747960501b60448201526064016111c4565b6101a082013515613b86576005546001600160a01b0316613b3c576040516313c29beb60e21b815260040160405180910390fd5b5f613b4d6080840160608501615547565b6001600160a01b0316141580613b6857506014548260800135105b15613b86576040516387a66f8d60e01b815260040160405180910390fd5b5f80613b956020850185615dc2565b6001811115613ba657613ba661579c565b03613cab575f613bbc6040850160208601615547565b6001600160a01b031603613c29575f836040013511613c145760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081c1c9a5e9948185b5bdd5b9d60621b60448201526064016111c4565b613c22604084013582615bf5565b9050613d76565b5f600a81613c3d6040870160208801615547565b6001600160a01b03908116825260208201929092526040015f20541603613ca65760405162461bcd60e51b815260206004820152601760248201527f5072697a6520746f6b656e206e6f7420616c6c6f77656400000000000000000060448201526064016111c4565b613d76565b6001613cba6020850185615dc2565b6001811115613ccb57613ccb61579c565b03613d3f575f600881613ce46040870160208801615547565b6001600160a01b03908116825260208201929092526040015f20541603613ca65760405162461bcd60e51b815260206004820152600f60248201526e139195081b9bdd08185b1b1bddd959608a1b60448201526064016111c4565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207479706560a01b60448201526064016111c4565b613d8861016084016101408501615de0565b15613d9d57601154613d9a9082615bf5565b90505b61016083013515613db857601254613db59082615bf5565b90505b5f613dcb6101a085016101808601615dfb565b60ff161115613e0357613de66101a084016101808501615dfb565b60ff16601354613df69190615c08565b613e009082615bf5565b90505b803414613e425760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b60448201526064016111c4565b505f613e516020840184615dc2565b6001811115613e6257613e6261579c565b148015613e8757505f613e7b6040840160208501615547565b6001600160a01b031614155b15613f6057613e9c6040830160208401615547565b6001600160a01b03166323b872dd333085604001356040518463ffffffff1660e01b8152600401613ecf93929190615c36565b6020604051808303815f875af1158015613eeb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f0f9190615c5a565b613f5b5760405162461bcd60e51b815260206004820152601d60248201527f5072697a65204552433230207472616e7366657246726f6d206661696c00000060448201526064016111c4565b613ff6565b6001613f6f6020840184615dc2565b6001811115613f8057613f8061579c565b03613ff657613f956040830160208401615547565b6001600160a01b03166323b872dd333085604001356040518463ffffffff1660e01b8152600401613fc893929190615c36565b5f604051808303815f87803b158015613fdf575f5ffd5b505af1158015613ff1573d5f5f3e3d5ffd5b505050505b61400861016083016101408401615de0565b156140cf57600e546001600160a01b03166140355760405162461bcd60e51b81526004016111c490615e1b565b600e546011546040515f926001600160a01b031691908381818185875af1925050503d805f8114614081576040519150601f19603f3d011682016040523d82523d5f602084013e614086565b606091505b50509050806140cd5760405162461bcd60e51b815260206004820152601360248201527211dc9858d948199959481e19995c8819985a5b606a1b60448201526064016111c4565b505b610160820135156141a657600e546001600160a01b03166141025760405162461bcd60e51b81526004016111c490615e1b565b600e546012546040515f926001600160a01b031691908381818185875af1925050503d805f811461414e576040519150601f19603f3d011682016040523d82523d5f602084013e614153565b606091505b50509050806141a45760405162461bcd60e51b815260206004820152601a60248201527f4175746f46696e616c697a65206665652078666572206661696c00000000000060448201526064016111c4565b505b5f6141b96101a084016101808501615dfb565b60ff1611156142ac575f6141d56101a084016101808501615dfb565b60ff166013546141e59190615c08565b600e549091506001600160a01b03166142105760405162461bcd60e51b81526004016111c490615e1b565b600e546040515f916001600160a01b03169083908381818185875af1925050503d805f811461425a576040519150601f19603f3d011682016040523d82523d5f602084013e61425f565b606091505b50509050806142a95760405162461bcd60e51b81526020600482015260166024820152751199585d1d5c995908199959481e19995c8819985a5b60521b60448201526064016111c4565b50505b614333336142c06040850160208601615547565b436142d360a08701356040880135615bf5565b6142dd9190615bf5565b60408051426020808301919091526bffffffffffffffffffffffff19606096871b8116838501529490951b9093166054840152606880840192909252805180840390920182526088909201909152805191012090565b5f8181526016602090815260409091208281556001810180546001600160a01b0319163317905591925061436990840184615dc2565b8160010160146101000a81548160ff0219169083600181111561438e5761438e61579c565b02179055506143a36040840160208501615547565b6002820180546001600160a01b0319166001600160a01b0392909216919091179055604083013560038201556143df6080840160608501615547565b6004820180546001600160a01b0319166001600160a01b03929092169190911790556080830135600582015560a0830135600682015561442360c084013542615bf5565b600782015560088101805460ff1916905561444661012084016101008501615547565b6008820180546001600160a01b039290921661010002610100600160a81b031990921691909117905560e083013560098201556040805160a081019091528061449761014086016101208701615de0565b151581526020016144b061016086016101408701615de0565b1515815261016085013560208201526040015f6144d56101a087016101808801615dfb565b60ff16116144e3575f614519565b62093a806144f96101a087016101808801615dfb565b60ff166145069190615c75565b614519906001600160401b031642615bf5565b6001600160401b0390811682526101a08601356020928301528251600f850180549385015115156101000261ff00199215159290921661ffff1990941693909317179091556040820151601084015560608201516011840180549190921667ffffffffffffffff199091168117909155608090910151601283015542116145a3576145a382615296565b6040805160a0810182525f8082526020808301829052828401829052606083018290526080909201819052600a8401819055600b8401819055600c8401819055600d840180546001600160a01b0319169055600e84018190553380825260178352838220805460018181018355918452848420018790556022805491820190557f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e510018690558152602790915290812080549161465e83615e41565b90915550339050827f307ffadcf63a116158ce0668f08a5386c70bf41e1ac9756dfd08958260eb4f1f6146946020870187615dc2565b6146a46040880160208901615547565b60408801356146b960808a0160608b01615547565b89608001358a60a0013589600701546040516146db9796959493929190615e59565b60405180910390a350919050565b5f6001600883015460ff1660038111156147055761470561579c565b03614712575060016147ac565b60018201546001600160a01b0390811690841603614732575060016147ac565b600782015442101580614748575f9150506147ac565b6001600160a01b0384165f9081526015602052604090205460ff16614770575f9150506147ac565b60108301545f90158061478b57506010840154600a85015410155b9050801561479e576001925050506147ac565b6147a784615382565b925050505b92915050565b600d810154600a8201906001600160a01b0316806148035760405162461bcd60e51b815260206004820152600e60248201526d15da5b9b995c881b9bdd081cd95d60921b60448201526064016111c4565b600e546001600160a01b031661482b5760405162461bcd60e51b81526004016111c490615e1b565b6003546001840154604051632c9aab9b60e11b81526001600160a01b0391821660048201525f929190911690635935573690602401602060405180830381865afa15801561487b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061489f9190615c1f565b90505f600a6148ae8184615ea1565b6148b89190615c08565b90505f81600d54116148ca575f6148d8565b81600d546148d89190615bb3565b90505f6127108287600101546148ee9190615c08565b6148f89190615ea1565b90505f81876001015461490b9190615bb3565b60028801839055600f8901549091505f9060ff166149365760018901546001600160a01b031661493a565b61dead5b60048a01549091506001600160a01b0316614a7c57600e546040515f916001600160a01b03169085908381818185875af1925050503d805f8114614999576040519150601f19603f3d011682016040523d82523d5f602084013e61499e565b606091505b50509050806149e45760405162461bcd60e51b815260206004820152601260248201527113985d1a5d9948199959481d1e0819985a5b60721b60448201526064016111c4565b5f826001600160a01b0316846040515f6040518083038185875af1925050503d805f8114614a2d576040519150601f19603f3d011682016040523d82523d5f602084013e614a32565b606091505b5050905080614a755760405162461bcd60e51b815260206004820152600f60248201526e13985d1a5d99481c185e4819985a5b608a1b60448201526064016111c4565b5050614beb565b600489810154600e5460405163a9059cbb60e01b81526001600160a01b039182169381019390935260248301869052169063a9059cbb906044016020604051808303815f875af1158015614ad2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614af69190615c5a565b614b365760405162461bcd60e51b8152602060048201526011602482015270115490cc8c08199959481d1e0819985a5b607a1b60448201526064016111c4565b60048981015460405163a9059cbb60e01b81526001600160a01b03848116938201939093526024810185905291169063a9059cbb906044016020604051808303815f875af1158015614b8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bae9190615c5a565b614beb5760405162461bcd60e51b815260206004820152600e60248201526d115490cc8c081c185e4819985a5b60921b60448201526064016111c4565b5f60018a810154600160a01b900460ff1690811115614c0c57614c0c61579c565b03614dc95760028901546001600160a01b0316614cc15760038901546040515f916001600160a01b038a16918381818185875af1925050503d805f8114614c6e576040519150601f19603f3d011682016040523d82523d5f602084013e614c73565b606091505b5050905080614cbb5760405162461bcd60e51b815260206004820152601460248201527313985d1a5d99481c1c9a5e99481d1e0819985a5b60621b60448201526064016111c4565b50614d7e565b600289015460038a015460405163a9059cbb60e01b81526001600160a01b038a81166004830152602482019290925291169063a9059cbb906044016020604051808303815f875af1158015614d18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d3c9190615c5a565b614d7e5760405162461bcd60e51b8152602060048201526013602482015272115490cc8c081c1c9a5e99481d1e0819985a5b606a1b60448201526064016111c4565b60038901546001600160a01b038089165f908152602b6020908152604080832060028f015490941683529290529081208054909190614dbe908490615bf5565b90915550614e719050565b600289015460038a01546040516323b872dd60e01b81526001600160a01b03909216916323b872dd91614e029130918c91600401615c36565b5f604051808303815f87803b158015614e19575f5ffd5b505af1158015614e2b573d5f5f3e3d5ffd5b505050506001600160a01b038781165f908152602b6020908152604080832060028e01549094168352929052908120805460019290614e6b908490615bf5565b90915550505b600489015488546001600160a01b039182165f8181526025602090815260408083208054909501909455602380546001908101909155948c1682526029815283822080549095019094558181526026909352908220805491928692614ed7908490615bf5565b90915550506001600160a01b038083165f908152602a6020908152604080832093851683529290529081208054859290614f12908490615bf5565b90915550506005546001600160a01b031615614fc857600554604051632fbb1b0960e01b8152600481018d90523360248201527f08e19337d1433fa5b45d707c63aeb986ab7d1b81c8a4f6eabb9887f6875c0a0d60448201525f60648201526001600160a01b0390911690632fbb1b09906084016020604051808303815f875af1158015614fa2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fc69190615c5a565b505b6040516001600160a01b03891681528b907f4c9429828b8a8a57ced9bd94f8941b01b0647e84414d1004fca57ded1a0c7fbe9060200160405180910390a25050505050505050505050565b61501b6153bf565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600354604051632c9aab9b60e11b81526001600160a01b0384811660048301525f921690635935573690602401602060405180830381865afa1580156150fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151209190615c1f565b5f0361512d57505f6147ac565b600354604051631acb657560e21b81526001600160a01b0385811660048301525f921690636b2d95d4906024015f60405180830381865afa158015615174573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261519b9190810190615ec0565b90505f5b81518110156151db57838282815181106151bb576151bb615b8b565b6020026020010151036151d3576001925050506147ac565b60010161519f565b505f949350505050565b6001600160a01b0382165f908152601f6020908152604080832084845290915290205460ff16612836576001600160a01b03919091165f818152601f602090815260408083208584528252808320805460ff19166001908117909155938352601e8252822080549384018155825290200155565b615261613823565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150483390565b5f8181526021602052604090205460ff166115d6575f8181526021602090815260408220805460ff191660019081179091558154908101825591527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0155565b804710156153205760405163cf47918160e01b8152476004820152602481018290526044016111c4565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461536a576040519150601f19603f3d011682016040523d82523d5f602084013e61536f565b606091505b50915091508161257a5761257a81615408565b600f8101545f908190610100900460ff1661539f57600f546153a3565b6010545b90508083600701546153b59190615bf5565b4210159392505050565b60025460ff166115e95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016111c4565b8051156154185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461543d90615b53565b5f825580601f1061544c575050565b601f0160209004905f5260205f20908101906115d691905b80821115615477575f8155600101615464565b5090565b5f6020828403121561548b575f5ffd5b5035919050565b6001600160a01b03811681146115d6575f5ffd5b80151581146115d6575f5ffd5b5f5f604083850312156154c4575f5ffd5b82356154cf81615492565b915060208301356154df816154a6565b809150509250929050565b5f5f604083850312156154fb575f5ffd5b50508035926020909101359150565b5f6101c082840312801561551c575f5ffd5b509092915050565b5f5f60408385031215615535575f5ffd5b8235915060208301356154df81615492565b5f60208284031215615557575f5ffd5b813561556281615492565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03851681526080602082018190525f906155ba90830186615569565b6040830194909452506001600160a01b039190911660609091015292915050565b5f5f604083850312156155ec575f5ffd5b82356155f781615492565b946020939093013593505050565b6001600160a01b03831681526040602082018190525f9061562890830184615569565b949350505050565b5f5f60408385031215615641575f5ffd5b823561564c81615492565b915060208301356154df81615492565b5f5f5f5f6080858703121561566f575f5ffd5b843593506020850135925060408501359150606085013561568f816154a6565b939692955090935050565b5f5f83601f8401126156aa575f5ffd5b5081356001600160401b038111156156c0575f5ffd5b6020830191508360208285010111156156d7575f5ffd5b9250929050565b5f5f5f5f5f608086880312156156f2575f5ffd5b85356156fd81615492565b945060208601356001600160401b03811115615717575f5ffd5b6157238882890161569a565b90955093505060408601359150606086013561573e81615492565b809150509295509295909350565b5f5f5f6040848603121561575e575f5ffd5b833561576981615492565b925060208401356001600160401b03811115615783575f5ffd5b61578f8682870161569a565b9497909650939450505050565b634e487b7160e01b5f52602160045260245ffd5b600281106157c0576157c061579c565b9052565b600481106157c0576157c061579c565b8e81526001600160a01b038e1660208201526102c081016157f8604083018f6157b0565b6001600160a01b038d81166060840152608083018d90528b1660a08301528960c08301528860e0830152876101008301526158376101208301886157c4565b6001600160a01b0386166101408301526101608201859052835161018083015260208401516101a083015260408401516101c083015260608401516001600160a01b03166101e083015260808401516102008301528251151561022083015260208301511515610240830152604083015161026083015260608301516001600160401b031661028083015260808301516102a08301529f9e505050505050505050505050505050565b602080825282518282018190525f918401906040840190835b8181101561594f57835180516001600160a01b031684526020808201518186015260408083015190860152606080830151908601526080918201511515918501919091529093019260a0909201916001016158f9565b509095945050505050565b5f5f5f6060848603121561596c575f5ffd5b833561597781615492565b925060208401359150604084013561598e81615492565b809150509250925092565b60208082526025908201527f57616c6c6574206f722077686974656c697374656420636f6e7472616374206e604082015264195959195960da1b606082015260800190565b5f5f604083850312156159ef575f5ffd5b82516159fa81615492565b6020939093015192949293505050565b5f60033d1115615a205760045f5f3e505f5160e01c5b90565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715615a5c57615a5c615a23565b6040525050565b5f60443d1015615a705790565b6040513d600319016004823e80513d60248201116001600160401b0382111715615a9957505090565b80820180516001600160401b03811115615ab4575050505090565b3d8401600319018282016020011115615ace575050505090565b615add60208285010185615a37565b509392505050565b7f5069636b6572204572726f722028726561736f6e293a2000000000000000000081525f82518060208501601785015e5f920160170191825250919050565b602081525f6155626020830184615569565b5f5f60233d1115615b4f57602060045f3e50505f516001905b9091565b600181811c90821680615b6757607f821691505b602082108103615b8557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156147ac576147ac615b9f565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215615bea575f5ffd5b815161556281615492565b808201808211156147ac576147ac615b9f565b80820281158282048414176147ac576147ac615b9f565b5f60208284031215615c2f575f5ffd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215615c6a575f5ffd5b8151615562816154a6565b6001600160401b038181168382160290811690818114615c9757615c97615b9f565b5092915050565b6001600160401b0381811683821601908111156147ac576147ac615b9f565b601f8211156118f957805f5260205f20601f840160051c81016020851015615ce25750805b601f840160051c820191505b81811015615d01575f8155600101615cee565b5050505050565b81516001600160401b03811115615d2157615d21615a23565b615d3581615d2f8454615b53565b84615cbd565b6020601f821160018114615d67575f8315615d505750848201515b5f19600385901b1c1916600184901b178455615d01565b5f84815260208120601f198516915b82811015615d965787850151825560209485019460019092019101615d76565b5084821015615db357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215615dd2575f5ffd5b813560028110615562575f5ffd5b5f60208284031215615df0575f5ffd5b8135615562816154a6565b5f60208284031215615e0b575f5ffd5b813560ff81168114615562575f5ffd5b6020808252600c908201526b0666565436f6c6c6563743d360a41b604082015260600190565b5f60018201615e5257615e52615b9f565b5060010190565b60e08101615e67828a6157b0565b6001600160a01b0397881660208301526040820196909652939095166060840152608083019190915260a082015260c00191909152919050565b5f82615ebb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215615ed0575f5ffd5b81516001600160401b03811115615ee5575f5ffd5b8201601f81018413615ef5575f5ffd5b80516001600160401b03811115615f0e57615f0e615a23565b8060051b604051615f226020830182615a37565b918252602081840181019290810187841115615f3c575f5ffd5b6020850194505b83851015615f5f57845180825260209586019590935001615f43565b50969550505050505056fea26469706673582212205e9e1fe1c8800002af85ecc9de4a570c6d4ef7a55c260a1f8eb2a83057ad3db564736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000efce3cf5ff0198f9303b4270d7d117ea74f083f8
-----Decoded View---------------
Arg [0] : _feeCollector (address): 0xEfcE3cF5ff0198F9303b4270d7d117Ea74F083f8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000efce3cf5ff0198f9303b4270d7d117ea74f083f8
Deployed Bytecode Sourcemap
27246:30924:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31450:50;;;;;;;;;;-1:-1:-1;31450:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;410:14:1;;403:22;385:41;;373:2;358:18;31450:50:0;;;;;;;;30679:45;;;;;;;;;;;;;;;;;;;583:25:1;;;571:2;556:18;30679:45:0;437:177:1;37774:126:0;;;;;;;;;;-1:-1:-1;37774:126:0;;;;;:::i;:::-;;:::i;:::-;;37458:180;;;;;;;;;;-1:-1:-1;37458:180:0;;;;;:::i;:::-;;:::i;33939:94::-;;;;;;;;;;-1:-1:-1;33939:94:0;;;;;:::i;:::-;;:::i;42993:194::-;;;;;;:::i;:::-;;:::i;31375:68::-;;;;;;;;;;-1:-1:-1;31375:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;27525:33;;;;;;;;;;-1:-1:-1;27525:33:0;;;;-1:-1:-1;;;;;27525:33:0;;;;;;-1:-1:-1;;;;;2912:32:1;;;2894:51;;2882:2;2867:18;27525:33:0;2748:203:1;37646:120:0;;;;;;;;;;-1:-1:-1;37646:120:0;;;;;:::i;:::-;;:::i;30442:32::-;;;;;;;;;;;;;;;;31850:29;;;;;;;;;;-1:-1:-1;31850:29:0;;;;;:::i;:::-;;:::i;31942:::-;;;;;;;;;;-1:-1:-1;31942:29:0;;;;;:::i;:::-;;:::i;32901:31::-;;;;;;;;;;;;;;;;31161:41;;;;;;;;;;-1:-1:-1;31161:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53248:1637;;;;;;;;;;-1:-1:-1;53248:1637:0;;;;;:::i;:::-;;:::i;33652:67::-;;;;;;;;;;;;;:::i;33004:60::-;;;;;;;;;;-1:-1:-1;33004:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;31649:53;;;;;;;;;;-1:-1:-1;31649:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31649:53:0;;;;;;;;;;-1:-1:-1;;;;;3400:32:1;;;3382:51;;3464:2;3449:18;;3442:34;;;;3355:18;31649:53:0;3208:274:1;30191:59:0;;;;;;;;;;-1:-1:-1;30191:59:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;31886:47::-;;;;;;;;;;-1:-1:-1;31886:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30731:49;;;;;;;;;;;;;;;;31259:53;;;;;;;;;;-1:-1:-1;31259:53:0;;;;;:::i;:::-;;:::i;29863:49::-;;;;;;;;;;-1:-1:-1;29863:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30149:35;;;;;;;;;;-1:-1:-1;30149:35:0;;;;;:::i;:::-;;:::i;27364:75::-;;;;;;;;;;-1:-1:-1;27364:75:0;;;;;;;-1:-1:-1;;;;;27364:75:0;;;35807:585;;;;;;;;;;-1:-1:-1;35807:585:0;;;;;:::i;:::-;;:::i;33727:92::-;;;;;;;;;;-1:-1:-1;33727:92:0;;;;;:::i;:::-;;:::i;57911:141::-;;;;;;;;;;-1:-1:-1;57911:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;58011:26:0;57984:7;58011:26;;;:20;:26;;;;;:33;;57911:141;9110:86;;;;;;;;;;-1:-1:-1;9181:7:0;;;;9110:86;;30259:30;;;;;;;;;;-1:-1:-1;30259:30:0;;;;;:::i;:::-;;:::i;32939:58::-;;;;;;;;;;-1:-1:-1;32939:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;31773:68;;;;;;;;;;-1:-1:-1;31773:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;31709:57;;;;;;;;;;-1:-1:-1;31709:57:0;;;;;:::i;:::-;;:::i;30296:56::-;;;;;;;;;;-1:-1:-1;30296:56:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;30399:36::-;;;;;;;;;;;;;;;;30922:50;;;;;;;;;;;;;;;;3361:103;;;;;;;;;;;;;:::i;33356:67::-;;;;;;;;;;-1:-1:-1;33356:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;31585:57;;;;;;;;;;-1:-1:-1;31585:57:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6354:32:1;;;6336:51;;6418:2;6403:18;;6396:34;;;;6446:18;;;6439:34;;;;6504:2;6489:18;;6482:34;6560:14;6553:22;6547:3;6532:19;;6525:51;6323:3;6308:19;31585:57:0;6083:499:1;31319:49:0;;;;;;;;;;-1:-1:-1;31319:49:0;;;;;:::i;:::-;;:::i;30979:47::-;;;;;;;;;;;;31020:6;30979:47;;48647:3973;;;;;;:::i;:::-;;:::i;33581:63::-;;;;;;;;;;;;;:::i;56732:1034::-;;;;;;:::i;:::-;;:::i;34330:197::-;;;;;;;;;;;;;:::i;35157:190::-;;;;;;;;;;-1:-1:-1;35157:190:0;;;;;:::i;:::-;;:::i;2686:87::-;;;;;;;;;;-1:-1:-1;2732:7:0;2759:6;-1:-1:-1;;;;;2759:6:0;2686:87;;36779:549;;;;;;;;;;-1:-1:-1;36779:549:0;;;;;:::i;:::-;;:::i;35355:444::-;;;;;;;;;;-1:-1:-1;35355:444:0;;;;;:::i;:::-;;:::i;38250:127::-;;;;;;;;;;-1:-1:-1;38250:127:0;;;;;:::i;:::-;;:::i;37336:114::-;;;;;;;;;;-1:-1:-1;37336:114:0;;;;;:::i;:::-;;:::i;27565:27::-;;;;;;;;;;-1:-1:-1;27565:27:0;;;;-1:-1:-1;;;;;27565:27:0;;;30361:31;;;;;;;;;;;;;;;;32859:35;;;;;;;;;;;;;;;;34041:108;;;;;;;;;;-1:-1:-1;34041:108:0;;;;;:::i;:::-;;:::i;31033:41::-;;;;;;;;;;;;;;;;54893:1831;;;;;;:::i;:::-;;:::i;36400:371::-;;;;;;;;;;-1:-1:-1;36400:371:0;;;;;:::i;:::-;;:::i;33196:51::-;;;;;;;;;;-1:-1:-1;33196:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;27446:72;;;;;;;;;;-1:-1:-1;27446:72:0;;;;-1:-1:-1;;;;;27446:72:0;;;33073:55;;;;;;;;;;-1:-1:-1;33073:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;30500:27;;;;;;;;;;-1:-1:-1;30500:27:0;;;;-1:-1:-1;;;;;30500:27:0;;;31507:69;;;;;;;;;;-1:-1:-1;31507:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;33827:104;;;;;;;;;;-1:-1:-1;33827:104:0;;;;;:::i;:::-;;:::i;33135:54::-;;;;;;;;;;-1:-1:-1;33135:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;33280:69;;;;;;;;;;-1:-1:-1;33280:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;34157:165;;;;;;;;;;-1:-1:-1;34157:165:0;;;;;:::i;:::-;;:::i;30787:44::-;;;;;;;;;;;;;;;;31211:41;;;;;;;;;;-1:-1:-1;31211:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31211:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31211:41:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31211:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31211:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31211:41:0;-1:-1:-1;;;;;31211:41:0;-1:-1:-1;;;;;31211:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31211:41:0;-1:-1:-1;;;;;31211:41:0;-1:-1:-1;;;;;31211:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34970:179::-;;;;;;;;;;-1:-1:-1;34970:179:0;;;;;:::i;:::-;;:::i;57774:129::-;;;;;;;;;;-1:-1:-1;57774:129:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37910:114::-;;;;;;;;;;-1:-1:-1;37910:114:0;;;;;:::i;:::-;;:::i;30534:44::-;;;;;;;;;;;;30576:2;30534:44;;34535:160;;;;;;;;;;-1:-1:-1;34535:160:0;;;;;:::i;:::-;;:::i;38032:98::-;;;;;;;;;;-1:-1:-1;38032:98:0;;;;;:::i;:::-;;:::i;3619:220::-;;;;;;;;;;-1:-1:-1;3619:220:0;;;;;:::i;:::-;;:::i;30838:52::-;;;;;;;;;;;;;;;;58060:107;;;;;;;;;;-1:-1:-1;58140:12:0;:19;58060:107;;38138:104;;;;;;;;;;-1:-1:-1;38138:104:0;;;;;:::i;:::-;;:::i;34707:255::-;;;;;;;;;;-1:-1:-1;34707:255:0;;;;;:::i;:::-;;:::i;37774:126::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;37864:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:28;;-1:-1:-1;;37864:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37774:126::o;37458:180::-;2572:13;:11;:13::i;:::-;37554:19:::1;:31:::0;;;;37596:23:::1;:34:::0;37458:180::o;33939:94::-;2572:13;:11;:13::i;:::-;34007:11:::1;:18:::0;33939:94::o;42993:194::-;43136:7;8715:19;:17;:19::i;:::-;6542:21:::1;:19;:21::i;:::-;43163:16:::2;43177:1;43163:13;:16::i;:::-;43156:23;;6586:20:::1;5980:1:::0;7106:22;;6923:213;6586:20:::1;42993:194:::0;;;:::o;37646:120::-;2572:13;:11;:13::i;:::-;37727:22:::1;:31:::0;37646:120::o;31850:29::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31850:29:0;:::o;31942:::-;;;;;;;;;;;;53248:1637;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;29996:10:::2;30010:9;29996:23;::::0;:56:::2;;-1:-1:-1::0;30041:10:0::2;30023:29;::::0;;;:17:::2;:29;::::0;;;;;::::2;;29996:56;29974:143;;;;-1:-1:-1::0;;;29974:143:0::2;;;;;;;:::i;:::-;;;;;;;;;53356:16:::3;53375:17:::0;;;:7:::3;:17;::::0;;;;53455:18:::3;::::0;53427:7:::3;::::0;::::3;::::0;-1:-1:-1;;;;;53455:18:0::3;53447:66;;;::::0;-1:-1:-1;;;53447:66:0;;13607:2:1;53447:66:0::3;::::0;::::3;13589:21:1::0;13646:2;13626:18;;;13619:30;-1:-1:-1;;;13665:18:1;;;13658:51;13726:18;;53447:66:0::3;13405:345:1::0;53447:66:0::3;53544:21;53532:8;::::0;::::3;::::0;::::3;;:33;::::0;::::3;;;;;;:::i;:::-;;;:71;;;;-1:-1:-1::0;53581:22:0::3;53569:8;::::0;::::3;::::0;::::3;;:34;::::0;::::3;;;;;;:::i;:::-;;;53532:71;53524:98;;;::::0;-1:-1:-1;;;53524:98:0;;13957:2:1;53524:98:0::3;::::0;::::3;13939:21:1::0;13996:2;13976:18;;;13969:30;-1:-1:-1;;;14015:18:1;;;14008:44;14069:18;;53524:98:0::3;13755:338:1::0;53524:98:0::3;53642:28;::::0;;;:18:::3;:28;::::0;;;;;::::3;;53641:29;53633:63;;;::::0;-1:-1:-1;;;53633:63:0;;14300:2:1;53633:63:0::3;::::0;::::3;14282:21:1::0;14339:2;14319:18;;;14312:30;-1:-1:-1;;;14358:18:1;;;14351:51;14419:18;;53633:63:0::3;14098:345:1::0;53633:63:0::3;53715:13:::0;;53707:45:::3;;;::::0;-1:-1:-1;;;53707:45:0;;14650:2:1;53707:45:0::3;::::0;::::3;14632:21:1::0;14689:2;14669:18;;;14662:30;-1:-1:-1;;;14708:18:1;;;14701:45;14763:18;;53707:45:0::3;14448:339:1::0;53707:45:0::3;53770:27;53783:10;53795:1;53770:12;:27::i;:::-;53765:63;;53806:22;;-1:-1:-1::0;;;53806:22:0::3;;;;;;;;;;;53765:63;53945:18;::::0;;53925:60:::3;::::0;-1:-1:-1;;;53925:60:0;;;;::::3;583:25:1::0;;;53841:14:0::3;::::0;;;-1:-1:-1;;;;;53945:18:0::3;::::0;53925:50:::3;::::0;556:18:1;;53925:60:0::3;::::0;::::3;;;;;;;;;;;;;;;;-1:-1:-1::0;53925:60:0::3;::::0;;::::3;;::::0;;::::3;-1:-1:-1::0;;53925:60:0::3;::::0;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;:::i;:::-;;;53921:518;;;;:::i;:::-;;;::::0;::::3;;;;;:::i;:::-;;;;;;;;54258:6;54214:51;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;54214:51:0;;::::3;::::0;;;;;;;-1:-1:-1;;;54200:67:0;;::::3;::::0;::::3;;;:::i;53921:518::-;;::::0;::::3;;;;:::i;:::-;;;;;;;;54332:22;::::0;-1:-1:-1;;;54332:22:0;;::::3;::::0;::::3;583:25:1::0;;;556:18;;54332:22:0::3;437:177:1::0;53921:518:0::3;54388:39;::::0;-1:-1:-1;;;54388:39:0;;17482:2:1;54388:39:0::3;::::0;::::3;17464:21:1::0;17521:2;17501:18;;;17494:30;17560:31;17540:18;;;17533:59;17609:18;;54388:39:0::3;17280:353:1::0;53921:518:0::3;-1:-1:-1::0;;;;;54041:15:0;::::3;54033:50;;;::::0;-1:-1:-1;;;54033:50:0;;17840:2:1;54033:50:0::3;::::0;::::3;17822:21:1::0;17879:2;17859:18;;;17852:30;-1:-1:-1;;;17898:18:1;;;17891:52;17960:18;;54033:50:0::3;17638:346:1::0;54033:50:0::3;54451:28;::::0;;;:18:::3;:28;::::0;;;;;;;:35;;-1:-1:-1;;54451:35:0;;::::3;54482:4;54451:35:::0;;::::3;::::0;;;54523:93;;;;::::3;::::0;;-1:-1:-1;;;;;54523:93:0;;::::3;::::0;;;;;::::3;::::0;;;54497:23;;;:13:::3;:23:::0;;;;;;:119;;;;;::::3;-1:-1:-1::0;;;;;;54497:119:0;;::::3;;::::0;;;;;;;::::3;::::0;54629:8:::3;::::0;::::3;:32:::0;;;;::::3;54640:21;54629:32;::::0;;54672:14;;;:23;;;;::::3;::::0;::::3;::::0;;54706:20;;;:33;;;54757:42;583:25:1;;;54523:93:0;;-1:-1:-1;54523:93:0;;-1:-1:-1;54523:93:0;54451:28;;54757:42:::3;::::0;556:18:1;54757:42:0::3;;;;;;;54842:35;54865:8;54875:1;54842:22;:35::i;:::-;53345:1540;;;;6586:20:::0;5980:1;7106:22;;6923:213;6586:20;53248:1637;:::o;33652:67::-;2572:13;:11;:13::i;:::-;33701:10:::1;:8;:10::i;:::-;33652:67::o:0;30191:59::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30191:59:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;30191:59:0;;;;;;;;;;;;-1:-1:-1;;;;;30191:59:0;;-1:-1:-1;30191:59:0;:::o;31259:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30149:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30149:35:0;;-1:-1:-1;30149:35:0;:::o;35807:585::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;35886:19:0;::::1;35878:47;;;::::0;-1:-1:-1;;;35878:47:0;;18576:2:1;35878:47:0::1;::::0;::::1;18558:21:1::0;18615:2;18595:18;;;18588:30;-1:-1:-1;;;18634:18:1;;;18627:45;18689:18;;35878:47:0::1;18374:339:1::0;35878:47:0::1;-1:-1:-1::0;;;;;35944:28:0;;::::1;35993:1;35944:28:::0;;;:21:::1;:28;::::0;;;;:37;::::1;35936:89;;;::::0;-1:-1:-1;;;35936:89:0;;18920:2:1;35936:89:0::1;::::0;::::1;18902:21:1::0;18959:2;18939:18;;;18932:30;18998:27;18978:18;;;18971:55;19043:18;;35936:89:0::1;18718:349:1::0;35936:89:0::1;-1:-1:-1::0;;;;;36045:28:0;::::1;;::::0;;;:21:::1;:28;::::0;;;;36038:35;;-1:-1:-1;;;;;;36038:35:0::1;::::0;;36045:28;36038:35:::1;::::0;;::::1;36045:28:::0;36038:35:::1;:::i;:::-;-1:-1:-1::0;36038:35:0::1;;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;36038:35:0::1;::::0;;36100:18:::1;:25:::0;;36136:249:::1;36160:3;36156:1;:7;36136:249;;;36214:5;-1:-1:-1::0;;;;;36189:30:0::1;:18;36208:1;36189:21;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36189:21:0::1;:30:::0;36185:189:::1;;36264:18;36283:7;36289:1;36283:3:::0;:7:::1;:::i;:::-;36264:27;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;36240:18:::1;:21:::0;;-1:-1:-1;;;;;36264:27:0;;::::1;::::0;36259:1;;36240:21;::::1;;;;;:::i;:::-;;;;;;;;;:51;;;;;-1:-1:-1::0;;;;;36240:51:0::1;;;;;-1:-1:-1::0;;;;;36240:51:0::1;;;;;;36310:18;:24;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;36310:24:0;;;;;-1:-1:-1;;;;;;36310:24:0::1;::::0;;;;;36136:249:::1;35867:525;35807:585:::0;:::o;36185:189::-:1;36165:3;;36136:249;;;;35867:525;35807:585:::0;:::o;33727:92::-;2572:13;:11;:13::i;:::-;33794:10:::1;:17:::0;33727:92::o;30259:30::-;;;;;;;;;;;;31709:57;;;;;;;;;;;;;;;;;;;;30296:56;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30296:56:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;31585:57::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31585:57:0;;;;-1:-1:-1;31585:57:0;;-1:-1:-1;31585:57:0;;;;;:::o;31319:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31319:49:0;;-1:-1:-1;31319:49:0;;-1:-1:-1;31319:49:0:o;48647:3973::-;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;29996:10:::2;30010:9;29996:23;::::0;:56:::2;;-1:-1:-1::0;30041:10:0::2;30023:29;::::0;;;:17:::2;:29;::::0;;;;;::::2;;29996:56;29974:143;;;;-1:-1:-1::0;;;29974:143:0::2;;;;;;;:::i;:::-;48880:1:::3;48871:6;:10;48863:37;;;::::0;-1:-1:-1;;;48863:37:0;;19803:2:1;48863:37:0::3;::::0;::::3;19785:21:1::0;19842:2;19822:18;;;19815:30;-1:-1:-1;;;19861:18:1;;;19854:44;19915:18;;48863:37:0::3;19601:338:1::0;48863:37:0::3;48913:16;48932:17:::0;;;:7:::3;:17;::::0;;;;;48968:8:::3;::::0;::::3;::::0;::::3;;:32;::::0;::::3;;;;;;:::i;:::-;;48960:58;;;::::0;-1:-1:-1;;;48960:58:0;;20146:2:1;48960:58:0::3;::::0;::::3;20128:21:1::0;20185:2;20165:18;;;20158:30;-1:-1:-1;;;20204:18:1;;;20197:43;20257:18;;48960:58:0::3;19944:337:1::0;48960:58:0::3;49055:1;:14;;;49037:15;:32;49029:57;;;::::0;-1:-1:-1;;;49029:57:0;;20488:2:1;49029:57:0::3;::::0;::::3;20470:21:1::0;20527:2;20507:18;;;20500:30;-1:-1:-1;;;20546:18:1;;;20539:42;20598:18;;49029:57:0::3;20286:336:1::0;49029:57:0::3;49119:9;::::0;::::3;::::0;-1:-1:-1;;;;;49119:9:0::3;49105:10;:23:::0;49097:55:::3;;;::::0;-1:-1:-1;;;49097:55:0;;20829:2:1;49097:55:0::3;::::0;::::3;20811:21:1::0;20868:2;20848:18;;;20841:30;-1:-1:-1;;;20887:18:1;;;20880:49;20946:18;;49097:55:0::3;20627:343:1::0;49097:55:0::3;49169:11;::::0;::::3;::::0;::::3;::::0;::::3;-1:-1:-1::0;;;;;49169:11:0::3;:25:::0;49165:803:::3;;49247:15;::::0;49232:11:::3;::::0;::::3;::::0;49247:15:::3;::::0;;;::::3;-1:-1:-1::0;;;;;49247:15:0;;::::3;49232:11:::0;;;::::3;;:30;49211:17;49308:16:::0;;;49300:49:::3;;;::::0;-1:-1:-1;;;49300:49:0;;21177:2:1;49300:49:0::3;::::0;::::3;21159:21:1::0;21216:2;21196:18;;;21189:30;-1:-1:-1;;;21235:18:1;;;21228:50;21295:18;;49300:49:0::3;20975:344:1::0;49300:49:0::3;49370:12;49366:358;;;49430:11;::::0;::::3;::::0;49422:41:::3;::::0;-1:-1:-1;;;49422:41:0;;49403:15:::3;::::0;49467:10:::3;::::0;49430:11:::3;::::0;;::::3;-1:-1:-1::0;;;;;49430:11:0::3;::::0;49422:28:::3;::::0;:41:::3;::::0;49451:11;;49422:41:::3;;583:25:1::0;;;571:2;556:18;;437:177;49422:41:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49422:55:0::3;;49403:75;;49497:15;49515:40;49531:10;49543:11;49515:15;:40::i;:::-;49497:58;;49580:10;:24;;;;49594:10;49580:24;49574:31;;49384:237;;49366:358;;;49660:11;::::0;::::3;::::0;49652:41:::3;::::0;-1:-1:-1;;;49652:41:0;;::::3;::::0;::::3;583:25:1::0;;;49697:10:0::3;::::0;49660:11:::3;::::0;::::3;-1:-1:-1::0;;;;;49660:11:0::3;::::0;49652:28:::3;::::0;556:18:1;;49652:41:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49652:55:0::3;;49646:62;;49366:358;49748:2;49740:38;;;::::0;-1:-1:-1;;;49740:38:0;;21782:2:1;49740:38:0::3;::::0;::::3;21764:21:1::0;21821:2;21801:18;;;21794:30;21860:25;21840:18;;;21833:53;21903:18;;49740:38:0::3;21580:347:1::0;49740:38:0::3;49802:27;::::0;;;:17:::3;:27;::::0;;;;;;;:40;;;;;;;;;::::3;;49801:41;49793:77;;;::::0;-1:-1:-1;;;49793:77:0;;22134:2:1;49793:77:0::3;::::0;::::3;22116:21:1::0;22173:2;22153:18;;;22146:30;22212:25;22192:18;;;22185:53;22255:18;;49793:77:0::3;21932:347:1::0;49793:77:0::3;49196:686;;49165:803;;;49911:16:::0;;49903:53:::3;;;::::0;-1:-1:-1;;;49903:53:0;;22486:2:1;49903:53:0::3;::::0;::::3;22468:21:1::0;22525:2;22505:18;;;22498:30;22564:26;22544:18;;;22537:54;22608:18;;49903:53:0::3;22284:348:1::0;49903:53:0::3;50014:7;::::0;::::3;:19:::0;50000:11:::3;::::0;::::3;::::0;49980:17:::3;::::0;50000:33:::3;::::0;::::3;:::i;:::-;49980:53;;50062:9;50052:6;:19;;50044:55;;;::::0;-1:-1:-1;;;50044:55:0;;22839:2:1;50044:55:0::3;::::0;::::3;22821:21:1::0;22878:2;22858:18;;;22851:30;22917:25;22897:18;;;22890:53;22960:18;;50044:55:0::3;22637:347:1::0;50044:55:0::3;50112:21;50136:23:::0;;;:13:::3;:23;::::0;;;;;;;50160:10:::3;50136:35:::0;;;;;;;;50216:12:::3;::::0;::::3;::::0;50190:22:::3;50206:6:::0;50136:35;50190:22:::3;:::i;:::-;:38;;50182:64;;;::::0;-1:-1:-1;;;50182:64:0;;23321:2:1;50182:64:0::3;::::0;::::3;23303:21:1::0;23360:2;23340:18;;;23333:30;-1:-1:-1;;;23379:18:1;;;23372:43;23432:18;;50182:64:0::3;23119:337:1::0;50182:64:0::3;50259:13;50291:6;50275:1;:13;;;:22;;;;:::i;:::-;50259:38;;50314:9;50310:1200;;;-1:-1:-1::0;50402:24:0;;;;50348:1:::3;::::0;50402:29;;50398:60:::3;;50440:18;;-1:-1:-1::0;;;50440:18:0::3;;;;;;;;;;;50398:60;50477:12;::::0;-1:-1:-1;;;;;50477:12:0::3;50473:62;;50512:23;;-1:-1:-1::0;;;50512:23:0::3;;;;;;;;;;;50473:62;50558:9;:14:::0;50550:43:::3;;;::::0;-1:-1:-1;;;50550:43:0;;23836:2:1;50550:43:0::3;::::0;::::3;23818:21:1::0;23875:2;23855:18;;;23848:30;-1:-1:-1;;;23894:18:1;;;23887:46;23950:18;;50550:43:0::3;23634:340:1::0;50550:43:0::3;50633:24:::0;;;;50610:20:::3;::::0;50633:33:::3;::::0;50660:6;;50633:33:::3;:::i;:::-;50714:12;::::0;50701:48:::3;::::0;-1:-1:-1;;;50701:48:0;;50738:10:::3;50701:48;::::0;::::3;2894:51:1::0;50610:56:0;;-1:-1:-1;50681:17:0::3;::::0;-1:-1:-1;;;;;50714:12:0;;::::3;::::0;50701:36:::3;::::0;2867:18:1;;50701:48:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50681:68;;50782:12;50770:9;:24;50766:57;;;50803:20;;-1:-1:-1::0;;;50803:20:0::3;;;;;;;;;;;50766:57;50857:12;::::0;50844:74:::3;::::0;-1:-1:-1;;;50844:74:0;;50883:10:::3;50844:74;::::0;::::3;24416:51:1::0;24483:18;;;24476:34;;;24526:18;;;24519:34;;;-1:-1:-1;;;;;50857:12:0;;::::3;::::0;50844:38:::3;::::0;24389:18:1;;50844:74:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50840:378;;;::::0;;;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;51016:19:0;;:23;51012:134:::3;;51111:12;51105:19;51100:2;51086:12;51082:21;51075:50;51012:134;51189:12;51171:31;;-1:-1:-1::0;;;51171:31:0::3;;;;;;;;:::i;50840:378::-;50325:904;;50310:1200;;;51254:13;::::0;::::3;::::0;-1:-1:-1;;;;;51254:13:0::3;51250:249;;51323:5;51310:9;:18;51302:47;;;::::0;-1:-1:-1;;;51302:47:0;;23836:2:1;51302:47:0::3;::::0;::::3;23818:21:1::0;23875:2;23855:18;;;23848:30;-1:-1:-1;;;23894:18:1;;;23887:46;23950:18;;51302:47:0::3;23634:340:1::0;51302:47:0::3;51250:249;;;51405:13;::::0;;::::3;::::0;51398:68:::3;::::0;-1:-1:-1;;;51398:68:0;;-1:-1:-1;;;;;51405:13:0;;::::3;::::0;51398:34:::3;::::0;:68:::3;::::0;51433:10:::3;::::0;51453:4:::3;::::0;51460:5;;51398:68:::3;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51390:93;;;::::0;-1:-1:-1;;;51390:93:0;;25615:2:1;51390:93:0::3;::::0;::::3;25597:21:1::0;25654:2;25634:18;;;25627:30;-1:-1:-1;;;25673:18:1;;;25666:42;25725:18;;51390:93:0::3;25413:336:1::0;51390:93:0::3;51526:13;51543:1;51526:18:::0;51522:90:::3;;51561:22;::::0;;;:12:::3;:22;::::0;;;;;;:39;;::::3;::::0;::::3;::::0;;;;;;;::::3;::::0;;-1:-1:-1;;;;;;51561:39:0::3;51589:10;51561:39;::::0;;51522:90:::3;51624:23;::::0;;;:13:::3;:23;::::0;;;;;;;51648:10:::3;51624:35:::0;;;;;;;:45;;51663:6;;51624:23;:45:::3;::::0;51663:6;;51624:45:::3;:::i;:::-;::::0;;;-1:-1:-1;;51680:7:0::3;::::0;::::3;:29:::0;;51703:6;;51680:7;:19:::3;::::0;:29:::3;::::0;51703:6;;51680:29:::3;:::i;:::-;::::0;;;-1:-1:-1;;51720:18:0;;;:27;;51742:5;;51720:18;::::3;::::0;:27:::3;::::0;51742:5;;51720:27:::3;:::i;:::-;::::0;;;-1:-1:-1;;51760:23:0::3;::::0;;;:13:::3;:23;::::0;;;;;;;51789:204;;::::3;::::0;::::3;::::0;;51826:10:::3;51789:204:::0;;;;;::::3;::::0;;;51891:15:::3;51789:204:::0;;;;;;;;;;;;;::::3;;::::0;;;;;;51760:234;;::::3;::::0;;::::3;::::0;;;;;;;;;;::::3;::::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;;;;;;51760:234:0::3;-1:-1:-1::0;;;;;51760:234:0;;::::3;::::0;;;::::3;::::0;;;;;;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;::::3;::::0;;::::3;::::0;;-1:-1:-1;;51760:234:0::3;::::0;::::3;;::::0;;;::::3;::::0;;52007:31;;:19:::3;:31:::0;;;;;:41;;51789:204;;51760:23;52007:41:::3;::::0;51789:204;;52007:41:::3;:::i;:::-;;;;;;;;52079:6;52059:16;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;52102:11:0::3;::::0;::::3;::::0;::::3;::::0;::::3;-1:-1:-1::0;;;;;52102:11:0::3;:25:::0;52098:105:::3;;52144:27;::::0;;;:17:::3;:27;::::0;;;;;;;:40;;;;;;;;:47;;-1:-1:-1;;52144:47:0::3;52187:4;52144:47;::::0;;52098:105:::3;52215:40;52234:10;52246:8;52215:18;:40::i;:::-;52273:12;::::0;-1:-1:-1;;;;;52273:12:0::3;:26:::0;;::::3;::::0;52272:42:::3;;;52305:9;52304:10;52272:42;52268:151;;;52344:12;::::0;52331:76:::3;::::0;-1:-1:-1;;;52331:76:0;;::::3;::::0;::::3;25985:25:1::0;;;52381:10:0::3;26026:18:1::0;;;26019:60;27791:22:0::3;26095:18:1::0;;;26088:34;26138:18;;;26131:34;;;-1:-1:-1;;;;;52344:12:0;;::::3;::::0;52331:39:::3;::::0;25957:19:1;;52331:76:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52268:151;52434:69;::::0;;26372:25:1;;;26428:2;26413:18;;26406:34;;;26483:14;;26476:22;26456:18;;;26449:50;52434:69:0;;52460:10:::3;::::0;52450:8;;52434:69:::3;::::0;;;;26360:2:1;52434:69:0;;::::3;52543:11;::::0;::::3;::::0;52520:7:::3;::::0;::::3;:19:::0;:34;52516:97:::3;;52571:8;::::0;::::3;:30:::0;;-1:-1:-1;;52571:30:0::3;52582:19;52571:30;::::0;;52516:97:::3;48852:3768;;;;6586:20:::0;5980:1;7106:22;;6923:213;6586:20;48647:3973;;;;:::o;33581:63::-;2572:13;:11;:13::i;:::-;33628:8:::1;:6;:8::i;56732:1034::-:0;6542:21;:19;:21::i;:::-;56849:1:::1;56839:7;:11;56831:33;;;::::0;-1:-1:-1;;;56831:33:0;;26712:2:1;56831:33:0::1;::::0;::::1;26694:21:1::0;26751:1;26731:18;;;26724:29;-1:-1:-1;;;26769:18:1;;;26762:39;26818:18;;56831:33:0::1;26510:332:1::0;56831:33:0::1;56875:16;56894:17:::0;;;:7:::1;:17;::::0;;;;;56930:8:::1;::::0;::::1;::::0;::::1;;:32;::::0;::::1;;;;;;:::i;:::-;;56922:58;;;::::0;-1:-1:-1;;;56922:58:0;;20146:2:1;56922:58:0::1;::::0;::::1;20128:21:1::0;20185:2;20165:18;;;20158:30;-1:-1:-1;;;20204:18:1;;;20197:43;20257:18;;56922:58:0::1;19944:337:1::0;56922:58:0::1;56993:16;57034:7;57012:19;;:29;;;;:::i;:::-;56993:48;;57073:8;57060:9;:21;57052:47;;;::::0;-1:-1:-1;;;57052:47:0;;27049:2:1;57052:47:0::1;::::0;::::1;27031:21:1::0;27088:2;27068:18;;;27061:30;-1:-1:-1;;;27107:18:1;;;27100:43;27160:18;;57052:47:0::1;26847:337:1::0;57052:47:0::1;57126:24:::0;;;;-1:-1:-1;;;;;57126:24:0::1;57112:11;57182:15;57175:22:::0;::::1;:55;;57214:15;57175:55;;;57200:4;57175:55;57161:69:::0;-1:-1:-1;57241:11:0::1;57262:40;31020:6;57269:7:::0;57262:40:::1;:::i;:::-;57255:47;::::0;:4;:47:::1;:::i;:::-;57313:24:::0;;;:31;;-1:-1:-1;;57313:31:0::1;-1:-1:-1::0;;;;;57313:31:0;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;57389:15:0::1;-1:-1:-1::0;57357:103:0::1;;57421:27;57439:8;57421:17;:27::i;:::-;57504:12;::::0;-1:-1:-1;;;;;57504:12:0::1;57496:53;;;::::0;-1:-1:-1;;;57496:53:0;;27860:2:1;57496:53:0::1;::::0;::::1;27842:21:1::0;27899:2;27879:18;;;27872:30;-1:-1:-1;;;27918:18:1;;;27911:44;27972:18;;57496:53:0::1;27658:338:1::0;57496:53:0::1;57582:12;::::0;57574:48:::1;::::0;57561:7:::1;::::0;-1:-1:-1;;;;;57582:12:0::1;::::0;57608:9:::1;::::0;57561:7;57574:48;57561:7;57574:48;57608:9;57582:12;57574:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57560:62;;;57641:2;57633:37;;;::::0;-1:-1:-1;;;57633:37:0;;28413:2:1;57633:37:0::1;::::0;::::1;28395:21:1::0;28452:2;28432:18;;;28425:30;-1:-1:-1;;;28471:18:1;;;28464:52;28533:18;;57633:37:0::1;28211:346:1::0;57633:37:0::1;57688:70;::::0;;28789:25:1;;;57736:9:0::1;28845:2:1::0;28830:18;;28823:34;-1:-1:-1;;;;;28893:31:1;;;28873:18;;;28866:59;28961:31;;28956:2;28941:18;;28934:59;57688:70:0;;57715:10:::1;::::0;57705:8;;57688:70:::1;::::0;;;;28776:3:1;57688:70:0;;::::1;56820:946;;;;;;6586:20:::0;5980:1;7106:22;;6923:213;6586:20;56732:1034;;:::o;34330:197::-;2572:13;:11;:13::i;:::-;34401:21:::1;34441:11:::0;34433:31:::1;;;::::0;-1:-1:-1;;;34433:31:0;;29206:2:1;34433:31:0::1;::::0;::::1;29188:21:1::0;29245:1;29225:18;;;29218:29;-1:-1:-1;;;29263:18:1;;;29256:37;29310:18;;34433:31:0::1;29004:330:1::0;34433:31:0::1;34475:44;34501:7;2732::::0;2759:6;-1:-1:-1;;;;;2759:6:0;;2686:87;34501:7:::1;34511;34475:17;:44::i;35157:190::-:0;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;35243:28:0;::::1;;::::0;;;:17:::1;:28;::::0;;;;;::::1;;35235:57;;;::::0;-1:-1:-1;;;35235:57:0;;29541:2:1;35235:57:0::1;::::0;::::1;29523:21:1::0;29580:2;29560:18;;;29553:30;-1:-1:-1;;;29599:18:1;;;29592:46;29655:18;;35235:57:0::1;29339:340:1::0;35235:57:0::1;-1:-1:-1::0;;;;;35303:28:0::1;35334:5;35303:28:::0;;;:17:::1;:28;::::0;;;;:36;;-1:-1:-1;;35303:36:0::1;::::0;;35157:190::o;36779:549::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;36860:19:0;::::1;36852:45;;;::::0;-1:-1:-1;;;36852:45:0;;29886:2:1;36852:45:0::1;::::0;::::1;29868:21:1::0;29925:2;29905:18;;;29898:30;-1:-1:-1;;;29944:18:1;;;29937:43;29997:18;;36852:45:0::1;29684:337:1::0;36852:45:0::1;-1:-1:-1::0;;;;;36916:23:0;;::::1;36964:1;36916:23:::0;;;:16:::1;:23;::::0;;;;:36;::::1;36908:83;;;::::0;-1:-1:-1;;;36908:83:0;;30228:2:1;36908:83:0::1;::::0;::::1;30210:21:1::0;30267:2;30247:18;;;30240:30;-1:-1:-1;;;30286:18:1;;;30279:50;30346:18;;36908:83:0::1;30026:344:1::0;36908:83:0::1;-1:-1:-1::0;;;;;37011:23:0;::::1;;::::0;;;:16:::1;:23;::::0;;;;37004:30;;-1:-1:-1;;;;;;37004:30:0::1;::::0;;37011:23;37004:30:::1;::::0;;::::1;37011:23:::0;37004:30:::1;:::i;:::-;-1:-1:-1::0;;37061:13:0::1;:20:::0;37047:11:::1;37092:229;37116:3;37112:1;:7;37092:229;;;37165:5;-1:-1:-1::0;;;;;37145:25:0::1;:13;37159:1;37145:16;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37145:16:0::1;:25:::0;37141:169:::1;;37210:13;37224:7;37230:1;37224:3:::0;:7:::1;:::i;:::-;37210:22;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37191:13:::1;:16:::0;;-1:-1:-1;;;;;37210:22:0;;::::1;::::0;37205:1;;37191:16;::::1;;;;;:::i;:::-;;;;;;;;;:41;;;;;-1:-1:-1::0;;;;;37191:41:0::1;;;;;-1:-1:-1::0;;;;;37191:41:0::1;;;;;;37251:13;:19;;;;;;;:::i;37141:169::-;37121:3;;37092:229;;35355:444:::0;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;35502:19:0;::::1;35494:47;;;::::0;-1:-1:-1;;;35494:47:0;;18576:2:1;35494:47:0::1;::::0;::::1;18558:21:1::0;18615:2;18595:18;;;18588:30;-1:-1:-1;;;18634:18:1;;;18627:45;18689:18;;35494:47:0::1;18374:339:1::0;35494:47:0::1;35575:4;35560:11;:19;;35552:48;;;::::0;-1:-1:-1;;;35552:48:0;;30577:2:1;35552:48:0::1;::::0;::::1;30559:21:1::0;30616:2;30596:18;;;30589:30;-1:-1:-1;;;30635:18:1;;;30628:46;30691:18;;35552:48:0::1;30375:340:1::0;35552:48:0::1;-1:-1:-1::0;;;;;35615:28:0;;::::1;35664:1;35615:28:::0;;;:21:::1;:28;::::0;;;;:37;::::1;35611:87;;35668:18;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;35668:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;35668:30:0::1;-1:-1:-1::0;;;;;35668:30:0;::::1;;::::0;;35611:87:::1;35740:51;;;;;;;;35751:5;-1:-1:-1::0;;;;;35740:51:0::1;;;;;35758:5;;35740:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;35740:51:0;;;-1:-1:-1;;;35740:51:0::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;35740:51:0;;::::1;::::0;;;;;35709:28;;::::1;::::0;;:21:::1;:28:::0;;;;;;:82;;;;-1:-1:-1;;;;;;35709:82:0::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;35709:82:0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;35709:82:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;35709:82:0::1;-1:-1:-1::0;;;;;35709:82:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;35355:444:0:o;38250:127::-;2572:13;:11;:13::i;:::-;38323:12:::1;:21:::0;;-1:-1:-1;;;;;;38323:21:0::1;-1:-1:-1::0;;;;;38323:21:0;;;::::1;::::0;;;::::1;::::0;;38250:127::o;37336:114::-;2572:13;:11;:13::i;:::-;37414:18:::1;:28:::0;;-1:-1:-1;;;;;;37414:28:0::1;-1:-1:-1::0;;;;;37414:28:0;;;::::1;::::0;;;::::1;::::0;;37336:114::o;34041:108::-;2572:13;:11;:13::i;:::-;34116:12:::1;:25:::0;;-1:-1:-1;;;;;;34116:25:0::1;-1:-1:-1::0;;;;;34116:25:0;;;::::1;::::0;;;::::1;::::0;;34041:108::o;54893:1831::-;6542:21;:19;:21::i;:::-;8715:19:::1;:17;:19::i;:::-;54997:16:::2;55016:17:::0;;;:7:::2;:17;::::0;;;;55066:9:::2;::::0;::::2;::::0;-1:-1:-1;;;;;55066:9:0::2;55052:10;:23;::::0;:48:::2;;-1:-1:-1::0;2732:7:0;2759:6;-1:-1:-1;;;;;2759:6:0;55079:10:::2;:21;55052:48;55044:75;;;::::0;-1:-1:-1;;;55044:75:0;;33046:2:1;55044:75:0::2;::::0;::::2;33028:21:1::0;33085:2;33065:18;;;33058:30;-1:-1:-1;;;33104:18:1;;;33097:44;33158:18;;55044:75:0::2;32844:338:1::0;55044:75:0::2;55150:20;55138:8;::::0;::::2;::::0;::::2;;:32;::::0;::::2;;;;;;:::i;:::-;;55130:59;;;::::0;-1:-1:-1;;;55130:59:0;;33389:2:1;55130:59:0::2;::::0;::::2;33371:21:1::0;33428:2;33408:18;;;33401:30;-1:-1:-1;;;33447:18:1;;;33440:44;33501:18;;55130:59:0::2;33187:338:1::0;55130:59:0::2;55214:7;::::0;::::2;:19:::0;:23;55210:121:::2;;55281:1;:14;;;55262:15;:33;;55254:65;;;::::0;-1:-1:-1;;;55254:65:0;;33732:2:1;55254:65:0::2;::::0;::::2;33714:21:1::0;33771:2;33751:18;;;33744:30;-1:-1:-1;;;33790:18:1;;;33783:49;33849:18;;55254:65:0::2;33530:343:1::0;55254:65:0::2;55362:11;;55349:9;:24;55341:60;;;::::0;-1:-1:-1;;;55341:60:0;;34080:2:1;55341:60:0::2;::::0;::::2;34062:21:1::0;34119:2;34099:18;;;34092:30;34158:25;34138:18;;;34131:53;34201:18;;55341:60:0::2;33878:347:1::0;55341:60:0::2;55414:8;::::0;::::2;:33:::0;;-1:-1:-1;;55414:33:0::2;55425:22;55414:33;::::0;;55464:7:::2;::::0;::::2;:19:::0;:23;55460:635:::2;;55504:23;55530:22:::0;;;:12:::2;:22;::::0;;;;;;;55504:48;;;;;;::::2;::::0;;;;;;;;;;;;55530:22;;55504:48;;::::2;55530:22:::0;55504:48;;::::2;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;55504:48:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;-1:-1:-1::0;55504:48:0;;-1:-1:-1;55572:9:0::2;::::0;-1:-1:-1;;;;55567:517:0::2;55591:6;:13;55587:1;:17;55567:517;;;55630:13;55646:6;55653:1;55646:9;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;55674:11:::2;55688:23:::0;;;:13:::2;:23:::0;;;;;;-1:-1:-1;;;;;55688:30:0;::::2;::::0;;;;;;;;;;55646:9;;-1:-1:-1;55741:7:0;;55737:332:::2;;55773:14;55796:1;:13;;;55790:3;:19;;;;:::i;:::-;55836:13;::::0;::::2;::::0;55773:36;;-1:-1:-1;;;;;;55836:13:0::2;55832:218;;55892:32;-1:-1:-1::0;;;;;55892:24:0;::::2;55917:6:::0;55892:24:::2;:32::i;:::-;55832:218;;;55988:13;::::0;;::::2;::::0;55981:45:::2;::::0;-1:-1:-1;;;55981:45:0;;-1:-1:-1;;;;;3400:32:1;;;55981:45:0;;::::2;3382:51:1::0;;;;3449:18;;;3442:34;;;55988:13:0;::::2;::::0;55981:30:::2;::::0;3355:18:1;;55981:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55832:218;55750:319;55737:332;-1:-1:-1::0;;55606:3:0::2;;55567:517;;;;55489:606;55460:635;56122:16;56111:7;::::0;;::::2;::::0;-1:-1:-1;;;56111:7:0;::::2;;;::::0;:27;::::2;;;;;;:::i;:::-;::::0;56107:422:::2;;56159:14;::::0;::::2;::::0;-1:-1:-1;;;;;56159:14:0::2;56155:218;;56237:17;::::0;::::2;::::0;56216:9:::2;::::0;::::2;::::0;56208:47:::2;::::0;-1:-1:-1;;;;;56216:9:0;;::::2;::::0;56208:28:::2;:47::i;:::-;56107:422;;56155:218;56303:14;::::0;::::2;::::0;;56328:9;::::2;::::0;56339:17:::2;::::0;::::2;::::0;56296:61:::2;::::0;-1:-1:-1;;;56296:61:0;;-1:-1:-1;;;;;56328:9:0;;::::2;56296:61;::::0;::::2;3382:51:1::0;3449:18;;;3442:34;;;;56303:14:0;::::2;::::0;56296:31:::2;::::0;3355:18:1;;56296:61:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56107:422;;;56405:14;56394:7:::0;;;::::2;::::0;-1:-1:-1;;;56394:7:0;::::2;;;::::0;:25;::::2;;;;;;:::i;:::-;::::0;56390:139:::2;;56444:14;::::0;::::2;::::0;;56488:9;::::2;::::0;56499:17:::2;::::0;::::2;::::0;56436:81:::2;::::0;-1:-1:-1;;;56436:81:0;;-1:-1:-1;;;;;56444:14:0;;::::2;::::0;56436:36:::2;::::0;:81:::2;::::0;56481:4:::2;::::0;56488:9;;;::::2;::::0;56436:81:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56390:139;56545:12;::::0;-1:-1:-1;;;;;56545:12:0::2;:26:::0;56541:133:::2;;56601:12;::::0;56588:74:::2;::::0;-1:-1:-1;;;56588:74:0;;::::2;::::0;::::2;25985:25:1::0;;;56638:10:0::2;26026:18:1::0;;;26019:60;27928:25:0::2;26095:18:1::0;;;26088:34;56601:12:0::2;26138:18:1::0;;;26131:34;-1:-1:-1;;;;;56601:12:0;;::::2;::::0;56588:39:::2;::::0;25957:19:1;;56588:74:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56541:133;56691:25;::::0;56707:8;;56691:25:::2;::::0;;;::::2;54986:1738;6586:20:::0;5980:1;7106:22;;6923:213;36400:371;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;36508:19:0;::::1;36500:45;;;::::0;-1:-1:-1;;;36500:45:0;;29886:2:1;36500:45:0::1;::::0;::::1;29868:21:1::0;29925:2;29905:18;;;29898:30;-1:-1:-1;;;29944:18:1;;;29937:43;29997:18;;36500:45:0::1;29684:337:1::0;36500:45:0::1;36564:25:::0;36556:50:::1;;;::::0;-1:-1:-1;;;36556:50:0;;34862:2:1;36556:50:0::1;::::0;::::1;34844:21:1::0;34901:2;34881:18;;;34874:30;-1:-1:-1;;;34920:18:1;;;34913:42;34972:18;;36556:50:0::1;34660:336:1::0;36556:50:0::1;-1:-1:-1::0;;;;;36621:23:0;;::::1;36669:1;36621:23:::0;;;:16:::1;:23;::::0;;;;:36;::::1;36617:81;;36673:13;:25:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;36673:25:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;36673:25:0::1;-1:-1:-1::0;;;;;36673:25:0;::::1;;::::0;;36617:81:::1;36735:28;;;;;;;;36748:5;-1:-1:-1::0;;;;;36735:28:0::1;;;;;36755:7;;36735:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;36735:28:0;;;;-1:-1:-1;;;;;;;36709:23:0;;::::1;::::0;;:16:::1;:23;::::0;;;;;;;:54;;;;-1:-1:-1;;;;;;36709:54:0::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;:23;;-1:-1:-1;;36709:54:0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;;36400:371:0:o;33827:104::-;2572:13;:11;:13::i;:::-;33900:11:::1;:23:::0;33827:104::o;34157:165::-;2572:13;:11;:13::i;:::-;34228:12:::1;:22:::0;;-1:-1:-1;;;;;;34228:22:0::1;-1:-1:-1::0;;;;;34228:22:0;::::1;::::0;;::::1;::::0;;;34279:35:::1;::::0;;-1:-1:-1;;;34279:35:0;;;;:33:::1;::::0;:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;34228:22;34279:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34261:15;;:53;;;;;-1:-1:-1::0;;;;;34261:53:0::1;;;;;-1:-1:-1::0;;;;;34261:53:0::1;;;;;;34157:165:::0;:::o;34970:179::-;2572:13;:11;:13::i;:::-;35075:1:::1;35051:9;-1:-1:-1::0;;;;;35051:21:0::1;;:25;35043:52;;;::::0;-1:-1:-1;;;35043:52:0;;35203:2:1;35043:52:0::1;::::0;::::1;35185:21:1::0;35242:2;35222:18;;;35215:30;-1:-1:-1;;;35261:18:1;;;35254:44;35315:18;;35043:52:0::1;35001:338:1::0;35043:52:0::1;-1:-1:-1::0;;;;;35106:28:0::1;;::::0;;;:17:::1;:28;::::0;;;;:35;;-1:-1:-1;;35106:35:0::1;35137:4;35106:35;::::0;;34970:179::o;57774:129::-;57835:23;57878:13;:17;57892:2;57878:17;;;;;;;;;;;57871:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;57871:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57774:129;;;:::o;37910:114::-;2572:13;:11;:13::i;:::-;37988:19:::1;:28:::0;37910:114::o;34535:160::-;2572:13;:11;:13::i;:::-;34632:55:::1;::::0;-1:-1:-1;;;34632:55:0;;-1:-1:-1;;;;;34632:27:0;::::1;::::0;::::1;::::0;:55:::1;::::0;34668:4:::1;::::0;34675:2;;34679:7;;34632:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34535:160:::0;;;:::o;38032:98::-;2572:13;:11;:13::i;:::-;38102:11:::1;:20:::0;38032:98::o;3619:220::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;3704:22:0;::::1;3700:93;;3750:31;::::0;-1:-1:-1;;;3750:31:0;;3778:1:::1;3750:31;::::0;::::1;2894:51:1::0;2867:18;;3750:31:0::1;2748:203:1::0;3700:93:0::1;3803:28;3822:8;3803:18;:28::i;38138:104::-:0;2572:13;:11;:13::i;:::-;38211:14:::1;:23:::0;38138:104::o;34707:255::-;2572:13;:11;:13::i;:::-;-1:-1:-1;;;;;34796:20:0;::::1;34788:58;;;::::0;-1:-1:-1;;;34788:58:0;;35546:2:1;34788:58:0::1;::::0;::::1;35528:21:1::0;35585:2;35565:18;;;35558:30;35624:27;35604:18;;;35597:55;35669:18;;34788:58:0::1;35344:349:1::0;34788:58:0::1;34871:39;::::0;-1:-1:-1;;;34871:39:0;;34904:4:::1;34871:39;::::0;::::1;2894:51:1::0;34857:11:0::1;::::0;-1:-1:-1;;;;;34871:24:0;::::1;::::0;::::1;::::0;2867:18:1;;34871:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34921:33;::::0;-1:-1:-1;;;34921:33:0;;-1:-1:-1;;;;;3400:32:1;;;34921:33:0::1;::::0;::::1;3382:51:1::0;3449:18;;;3442:34;;;34857:53:0;;-1:-1:-1;34921:23:0;;::::1;::::0;::::1;::::0;3355:18:1;;34921:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2851:166::-:0;2732:7;2759:6;-1:-1:-1;;;;;2759:6:0;775:10;2911:23;2907:103;;2958:40;;-1:-1:-1;;;2958:40:0;;775:10;2958:40;;;2894:51:1;2867:18;;2958:40:0;2748:203:1;9269:108:0;9181:7;;;;9339:9;9331:38;;;;-1:-1:-1;;;9331:38:0;;35900:2:1;9331:38:0;;;35882:21:1;35939:2;35919:18;;;35912:30;-1:-1:-1;;;35958:18:1;;;35951:46;36014:18;;9331:38:0;35698:340:1;6622:293:0;6024:1;6756:7;;:19;6748:63;;;;-1:-1:-1;;;6748:63:0;;36245:2:1;6748:63:0;;;36227:21:1;36284:2;36264:18;;;36257:30;36323:33;36303:18;;;36296:61;36374:18;;6748:63:0;36043:355:1;6748:63:0;6024:1;6889:7;:18;6622:293::o;43195:5444::-;43259:10;;43286:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43286:27:0;;43282:148;;43394:1;43338:16;43394:1;43355:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43338:31:0;;;;;;;;;;;;;;-1:-1:-1;43338:31:0;:44;;:58;43330:88;;;;-1:-1:-1;;;43330:88:0;;36605:2:1;43330:88:0;;;36587:21:1;36644:2;36624:18;;;36617:30;-1:-1:-1;;;36663:18:1;;;36656:47;36720:18;;43330:88:0;36403:341:1;43330:88:0;43462:1;43448;:11;;;:15;:44;;;;;43482:10;;43467:1;:11;;;:25;;43448:44;43440:74;;;;-1:-1:-1;;;43440:74:0;;36951:2:1;43440:74:0;;;36933:21:1;36990:2;36970:18;;;36963:30;-1:-1:-1;;;37009:18:1;;;37002:47;37066:18;;43440:74:0;36749:341:1;43440:74:0;43549:1;43533;:13;;;:17;43525:51;;;;-1:-1:-1;;;43525:51:0;;37297:2:1;43525:51:0;;;37279:21:1;37336:2;37316:18;;;37309:30;-1:-1:-1;;;37355:18:1;;;37348:51;37416:18;;43525:51:0;37095:345:1;43525:51:0;43608:1;43595;:10;;;:14;:43;;;;;43627:11;;43613:1;:10;;;:25;;43595:43;43587:72;;;;-1:-1:-1;;;43587:72:0;;37647:2:1;43587:72:0;;;37629:21:1;37686:2;37666:18;;;37659:30;-1:-1:-1;;;37705:18:1;;;37698:46;37761:18;;43587:72:0;37445:340:1;43587:72:0;43693:1;43678;:12;;;:16;:47;;;;;43714:1;:11;;;43698:1;:12;;;:27;;43678:47;43670:78;;;;-1:-1:-1;;;43670:78:0;;37992:2:1;43670:78:0;;;37974:21:1;38031:2;38011:18;;;38004:30;-1:-1:-1;;;38050:18:1;;;38043:48;38108:18;;43670:78:0;37790:342:1;43670:78:0;43765:24;;;;:28;43761:135;;43846:1;:11;;;43818:1;:24;;;:39;;43810:74;;;;-1:-1:-1;;;43810:74:0;;38339:2:1;43810:74:0;;;38321:21:1;38378:2;38358:18;;;38351:30;-1:-1:-1;;;38397:18:1;;;38390:52;38459:18;;43810:74:0;38137:346:1;43810:74:0;43912:15;;;;:19;43908:292;;43951:12;;-1:-1:-1;;;;;43951:12:0;43948:240;;44005:18;;-1:-1:-1;;;44005:18:0;;;;;;;;;;;43948:240;44106:1;44081:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44081:27:0;;;44080:62;;;;44130:11;;44114:1;:13;;;:27;44080:62;44077:95;;;44151:21;;-1:-1:-1;;;44151:21:0;;;;;;;;;;;44077:95;44227:21;;44273:7;;;;:1;:7;:::i;:::-;:27;;;;;;;;:::i;:::-;;44269:715;;44351:1;44325:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44325:28:0;;44321:425;;44443:1;44423;:17;;;:21;44415:54;;;;-1:-1:-1;;;44415:54:0;;38965:2:1;44415:54:0;;;38947:21:1;39004:2;38984:18;;;38977:30;-1:-1:-1;;;39023:18:1;;;39016:50;39083:18;;44415:54:0;38763:344:1;44415:54:0;44492:34;44509:17;;;;44492:34;;:::i;:::-;;;44269:715;;44321:425;44696:1;44639:16;44696:1;44656:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44639:32:0;;;;;;;;;;;;;;-1:-1:-1;44639:32:0;:45;;:59;44631:95;;;;-1:-1:-1;;;44631:95:0;;39314:2:1;44631:95:0;;;39296:21:1;39353:2;39333:18;;;39326:30;39392:25;39372:18;;;39365:53;39435:18;;44631:95:0;39112:347:1;44631:95:0;44269:715;;;44782:14;44771:7;;;;:1;:7;:::i;:::-;:25;;;;;;;;:::i;:::-;;44767:217;;44883:1;44825:21;44883:1;44847:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44825:37:0;;;;;;;;;;;;;;-1:-1:-1;44825:37:0;:46;;:60;44817:88;;;;-1:-1:-1;;;44817:88:0;;39666:2:1;44817:88:0;;;39648:21:1;39705:2;39685:18;;;39678:30;-1:-1:-1;;;39724:18:1;;;39717:45;39779:18;;44817:88:0;39464:339:1;44767:217:0;44946:22;;-1:-1:-1;;;44946:22:0;;40010:2:1;44946:22:0;;;39992:21:1;40049:2;40029:18;;;40022:30;-1:-1:-1;;;40068:18:1;;;40061:42;40120:18;;44946:22:0;39808:336:1;44767:217:0;45041:20;;;;;;;;:::i;:::-;45037:92;;;45099:14;;45082:31;;;;:::i;:::-;;;45037:92;45192:24;;;;:28;45188:108;;45258:22;;45241:39;;;;:::i;:::-;;;45188:108;45373:1;45354:16;;;;;;;;:::i;:::-;:20;;;45350:116;;;45434:16;;;;;;;;:::i;:::-;45412:38;;:19;;:38;;;;:::i;:::-;45395:55;;;;:::i;:::-;;;45350:116;45503:13;45490:9;:26;45482:52;;;;-1:-1:-1;;;45482:52:0;;40871:2:1;45482:52:0;;;40853:21:1;40910:2;40890:18;;;40883:30;-1:-1:-1;;;40929:18:1;;;40922:43;40982:18;;45482:52:0;40669:337:1;45482:52:0;-1:-1:-1;45573:16:0;45562:7;;;;:1;:7;:::i;:::-;:27;;;;;;;;:::i;:::-;;:59;;;;-1:-1:-1;45619:1:0;45593:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45593:28:0;;;45562:59;45558:464;;;45699:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45692:35:0;;45728:10;45748:4;45755:1;:17;;;45692:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45666:172;;;;-1:-1:-1;;;45666:172:0;;41213:2:1;45666:172:0;;;41195:21:1;41252:2;41232:18;;;41225:30;41291:31;41271:18;;;41264:59;41340:18;;45666:172:0;41011:353:1;45666:172:0;45558:464;;;45871:14;45860:7;;;;:1;:7;:::i;:::-;:25;;;;;;;;:::i;:::-;;45856:166;;45936:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45928:36:0;;45965:10;45985:4;45992:1;:17;;;45928:82;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45856:166;46038:20;;;;;;;;:::i;:::-;46034:237;;;46083:12;;-1:-1:-1;;;;;46083:12:0;46075:51;;;;-1:-1:-1;;;46075:51:0;;;;;;;:::i;:::-;46164:12;;46190:14;;46156:53;;46142:8;;-1:-1:-1;;;;;46164:12:0;;46190:14;46142:8;46156:53;46142:8;46156:53;46190:14;46164:12;46156:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46141:68;;;46232:3;46224:35;;;;-1:-1:-1;;;46224:35:0;;41912:2:1;46224:35:0;;;41894:21:1;41951:2;41931:18;;;41924:30;-1:-1:-1;;;41970:18:1;;;41963:49;42029:18;;46224:35:0;41710:343:1;46224:35:0;46060:211;46034:237;46285:24;;;;:28;46281:260;;46338:12;;-1:-1:-1;;;;;46338:12:0;46330:51;;;;-1:-1:-1;;;46330:51:0;;;;;;;:::i;:::-;46419:12;;46445:22;;46411:61;;46397:8;;-1:-1:-1;;;;;46419:12:0;;46445:22;46397:8;46411:61;46397:8;46411:61;46445:22;46419:12;46411:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46396:76;;;46495:3;46487:42;;;;-1:-1:-1;;;46487:42:0;;42260:2:1;46487:42:0;;;42242:21:1;42299:2;42279:18;;;42272:30;42338:28;42318:18;;;42311:56;42384:18;;46487:42:0;42058:350:1;46487:42:0;46315:226;46281:260;46574:1;46555:16;;;;;;;;:::i;:::-;:20;;;46551:300;;;46592:13;46630:16;;;;;;;;:::i;:::-;46608:38;;:19;;:38;;;;:::i;:::-;46669:12;;46592:54;;-1:-1:-1;;;;;;46669:12:0;46661:51;;;;-1:-1:-1;;;46661:51:0;;;;;;;:::i;:::-;46750:12;;46742:44;;46728:8;;-1:-1:-1;;;;;46750:12:0;;46776:5;;46728:8;46742:44;46728:8;46742:44;46776:5;46750:12;46742:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46727:59;;;46809:3;46801:38;;;;-1:-1:-1;;;46801:38:0;;28413:2:1;46801:38:0;;;28395:21:1;28452:2;28432:18;;;28425:30;-1:-1:-1;;;28471:18:1;;;28464:52;28533:18;;46801:38:0;28211:346:1;46801:38:0;46577:274;;46551:300;46868:143;46900:10;46925:14;;;;;;;;:::i;:::-;46988:12;46954:31;46974:11;;;;46954:17;;;;:31;:::i;:::-;:46;;;;:::i;:::-;38526:63;;;38543:15;38526:63;;;;47383:19:1;;;;-1:-1:-1;;47440:2:1;47436:15;;;47432:53;;47418:12;;;47411:75;47520:15;;;;47516:53;;;47502:12;;;47495:75;47586:12;;;;47579:28;;;;38526:63:0;;;;;;;;;;47623:13:1;;;;38526:63:0;;;38516:74;;;;;;38385:213;46868:143;47024:16;47043:11;;;:7;:11;;;;;;;;47065:9;;;47085;;;:22;;-1:-1:-1;;;;;;47085:22:0;47097:10;47085:22;;;46863:148;;-1:-1:-1;47128:7:0;;;;:1;:7;:::i;:::-;47118:1;:7;;;:17;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;47163:14:0;;;;;;;;:::i;:::-;47146;;;:31;;-1:-1:-1;;;;;;47146:31:0;-1:-1:-1;;;;;47146:31:0;;;;;;;;;;47208:17;;;;47188;;;:37;47252:13;;;;;;;;:::i;:::-;47236;;;:29;;-1:-1:-1;;;;;;47236:29:0;-1:-1:-1;;;;;47236:29:0;;;;;;;;;;47292:13;;;;47276;;;:29;47330:11;;;;47316;;;:25;47369:28;47387:10;;;;47369:15;:28;:::i;:::-;47352:14;;;:45;47408:8;;;:31;;-1:-1:-1;;47408:31:0;;;47464:11;;;;;;;;:::i;:::-;47450;;;:25;;-1:-1:-1;;;;;47450:25:0;;;;;;-1:-1:-1;;;;;;47450:25:0;;;;;;;;;47501:12;;;;47486;;;:27;47539:376;;;;;;;;;;47586:17;;;;;;;;:::i;:::-;47539:376;;;;;;47635:20;;;;;;;;:::i;:::-;47539:376;;;;47694:24;;;;47539:376;;;;;;-1:-1:-1;47748:16:0;;;;;;;;:::i;:::-;:20;;;:110;;47856:1;47748:110;;;31020:6;47803:16;;;;;;;;:::i;:::-;47796:24;;:49;;;;:::i;:::-;47778:67;;-1:-1:-1;;;;;47778:67:0;:15;:67;:::i;:::-;-1:-1:-1;;;;;47539:376:0;;;;;47888:15;;;;47539:376;;;;;47526:389;;:10;;;:389;;;;;;;;;;-1:-1:-1;;47526:389:0;;;;;;;-1:-1:-1;;47526:389:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;47526:389:0;;;;;;;;;;;;;;;;;47960:15;-1:-1:-1;47928:97:0;;47992:21;48010:2;47992:17;:21::i;:::-;48055:171;;;;;;;;-1:-1:-1;48055:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48045:7;;;:181;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;48045:181:0;;;;;;;;;48256:10;48239:28;;;:16;:28;;;;;:37;;48045:181;48239:37;;;;;;;;;;;;;;;48287:12;:21;;;;;;;;;;;;48319:32;;:20;:32;;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;48416:10:0;;-1:-1:-1;48399:2:0;48371:260;48441:7;;;;:1;:7;:::i;:::-;48463:14;;;;;;;;:::i;:::-;48492:17;;;;48524:13;;;;;;;;:::i;:::-;48552:1;:13;;;48580:1;:11;;;48606:1;:14;;;48371:260;;;;;;;;;;;;:::i;:::-;;;;;;;;43271:5368;43195:5444;;;:::o;52628:612::-;52707:4;52740:19;52728:8;;;;;;:31;;;;;;;;:::i;:::-;;52724:48;;-1:-1:-1;52768:4:0;52761:11;;52724:48;52797:9;;;;-1:-1:-1;;;;;52797:9:0;;;52787:19;;;;52783:36;;-1:-1:-1;52815:4:0;52808:11;;52783:36;52885:14;;;;52866:15;:33;;;52910:26;;52931:5;52924:12;;;;;52910:26;-1:-1:-1;;;;;52954:17:0;;;;;;:9;:17;;;;;;;;52949:36;;52980:5;52973:12;;;;;52949:36;53032:33;;;;52998:16;;53032:38;;:111;;-1:-1:-1;53110:33:0;;;;53087:7;;;:19;:56;;53032:111;52998:156;;53169:11;53165:28;;;53189:4;53182:11;;;;;;53165:28;53213:19;53230:1;53213:16;:19::i;:::-;53206:26;;;;52628:612;;;;;:::o;39661:3077::-;39844:8;;;;39773:7;;;;-1:-1:-1;;;;;39844:8:0;;39863:47;;;;-1:-1:-1;;;39863:47:0;;43451:2:1;39863:47:0;;;43433:21:1;43490:2;43470:18;;;43463:30;-1:-1:-1;;;43509:18:1;;;43502:44;43563:18;;39863:47:0;43249:338:1;39863:47:0;39929:12;;-1:-1:-1;;;;;39929:12:0;39921:51;;;;-1:-1:-1;;;39921:51:0;;;;;;;:::i;:::-;40075:12;;;40105:9;;;40062:53;;-1:-1:-1;;;40062:53:0;;-1:-1:-1;;;;;40105:9:0;;;40062:53;;;2894:51:1;40045:14:0;;40075:12;;;;;40062:42;;2867:18:1;;40062:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40045:70;-1:-1:-1;40126:19:0;30576:2;40149:11;30576:2;40045:70;40149:11;:::i;:::-;40148:31;;;;:::i;:::-;40126:53;;40239:20;40276:11;40262;;:25;:57;;40318:1;40262:57;;;40304:11;40290;;:25;;;;:::i;:::-;40239:80;;40332:11;40378:6;40362:12;40347:1;:12;;;:27;;;;:::i;:::-;40346:38;;;;:::i;:::-;40332:52;;40395:20;40433:3;40418:1;:12;;;:18;;;;:::i;:::-;40504:11;;;:17;;;40596:10;;;:26;40395:41;;-1:-1:-1;40570:23:0;;40596:26;;:50;;40637:9;;;;-1:-1:-1;;;;;40637:9:0;40596:50;;;27639:42;40596:50;40749:13;;;;40570:76;;-1:-1:-1;;;;;;40749:13:0;40745:537;;40820:12;;40812:42;;40794:12;;-1:-1:-1;;;;;40820:12:0;;40846:3;;40794:12;40812:42;40794:12;40812:42;40846:3;40820:12;40812:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40793:61;;;40877:7;40869:38;;;;-1:-1:-1;;;40869:38:0;;44016:2:1;40869:38:0;;;43998:21:1;44055:2;44035:18;;;44028:30;-1:-1:-1;;;44074:18:1;;;44067:48;44132:18;;40869:38:0;43814:342:1;40869:38:0;40925:16;40955:15;-1:-1:-1;;;;;40947:29:0;40984:12;40947:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40924:77;;;41024:11;41016:39;;;;-1:-1:-1;;;41016:39:0;;44363:2:1;41016:39:0;;;44345:21:1;44402:2;44382:18;;;44375:30;-1:-1:-1;;;44421:18:1;;;44414:45;44476:18;;41016:39:0;44161:339:1;41016:39:0;40778:289;;40745:537;;;41103:13;;;;;41127:12;;41096:49;;-1:-1:-1;;;41096:49:0;;-1:-1:-1;;;;;41127:12:0;;;41096:49;;;3382:51:1;;;;3449:18;;;3442:34;;;41103:13:0;;41096:30;;3355:18:1;;41096:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41088:79;;;;-1:-1:-1;;;41088:79:0;;44707:2:1;41088:79:0;;;44689:21:1;44746:2;44726:18;;;44719:30;-1:-1:-1;;;44765:18:1;;;44758:47;44822:18;;41088:79:0;44505:341:1;41088:79:0;41197:13;;;;;41190:61;;-1:-1:-1;;;41190:61:0;;-1:-1:-1;;;;;3400:32:1;;;41190:61:0;;;3382:51:1;;;;3449:18;;;3442:34;;;41197:13:0;;;41190:30;;3355:18:1;;41190:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41182:88;;;;-1:-1:-1;;;41182:88:0;;45053:2:1;41182:88:0;;;45035:21:1;45092:2;45072:18;;;45065:30;-1:-1:-1;;;45111:18:1;;;45104:44;45165:18;;41182:88:0;44851:338:1;41182:88:0;41353:16;41342:7;;;;;-1:-1:-1;;;41342:7:0;;;;;:27;;;;;;;:::i;:::-;;41338:709;;41390:14;;;;-1:-1:-1;;;;;41390:14:0;41386:318;;41481:17;;;;41453:50;;41440:7;;-1:-1:-1;;;;;41453:20:0;;;41440:7;41453:50;41440:7;41453:50;41481:17;41453:20;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41439:64;;;41530:2;41522:35;;;;-1:-1:-1;;;41522:35:0;;45396:2:1;41522:35:0;;;45378:21:1;45435:2;45415:18;;;45408:30;-1:-1:-1;;;45454:18:1;;;45447:50;45514:18;;41522:35:0;45194:344:1;41522:35:0;41420:153;41386:318;;;41613:14;;;;41646:17;;;;41606:58;;-1:-1:-1;;;41606:58:0;;-1:-1:-1;;;;;3400:32:1;;;41606:58:0;;;3382:51:1;3449:18;;;3442:34;;;;41613:14:0;;;41606:31;;3355:18:1;;41606:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41598:90;;;;-1:-1:-1;;;41598:90:0;;45745:2:1;41598:90:0;;;45727:21:1;45784:2;45764:18;;;45757:30;-1:-1:-1;;;45803:18:1;;;45796:49;45862:18;;41598:90:0;45543:343:1;41598:90:0;41831:17;;;;-1:-1:-1;;;;;41791:20:0;;;;;;;:12;:20;;;;;;;;41812:14;;;;;;;41791:36;;;;;;;;:57;;:36;;:20;:57;;41831:17;;41791:57;:::i;:::-;;;;-1:-1:-1;41338:709:0;;-1:-1:-1;41338:709:0;;41909:14;;;;41961:17;;;;41901:78;;-1:-1:-1;;;41901:78:0;;-1:-1:-1;;;;;41909:14:0;;;;41901:36;;:78;;41946:4;;41953:6;;41901:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;41994:20:0;;;;;;;:12;:20;;;;;;;;42015:14;;;;;;;41994:36;;;;;;;;:41;;42034:1;;41994:20;:41;;42034:1;;41994:41;:::i;:::-;;;;-1:-1:-1;;41338:709:0;42110:13;;;;42234;;-1:-1:-1;;;;;42110:13:0;;;42098:9;42204:26;;;:23;:26;;;;;;;;:43;;;;;;;;42262:20;:22;;42110:13;42262:22;;;;;;42299:24;;;;;:16;:24;;;;;:26;;;;;;;;42404:28;;;:25;:28;;;;;;:35;;42110:13;;42436:3;;42404:35;;42436:3;;42404:35;:::i;:::-;;;;-1:-1:-1;;;;;;;42450:31:0;;;;;;;:14;:31;;;;;;;;:34;;;;;;;;;;;:50;;42488:12;;42450:31;:50;;42488:12;;42450:50;:::i;:::-;;;;-1:-1:-1;;42517:12:0;;-1:-1:-1;;;;;42517:12:0;:26;42513:133;;42573:12;;42560:74;;-1:-1:-1;;;42560:74:0;;;;;25985:25:1;;;42610:10:0;26026:18:1;;;26019:60;27858:25:0;26095:18:1;;;26088:34;42573:12:0;26138:18:1;;;26131:34;-1:-1:-1;;;;;42573:12:0;;;;42560:39;;25957:19:1;;42560:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42513:133;42698:32;;-1:-1:-1;;;;;2912:32:1;;2894:51;;42713:8:0;;42698:32;;2882:2:1;2867:18;42698:32:0;;;;;;;39738:3000;;;;;;;;;39661:3077;;:::o;9965:120::-;8974:16;:14;:16::i;:::-;10024:7:::1;:15:::0;;-1:-1:-1;;10024:15:0::1;::::0;;10055:22:::1;775:10:::0;10064:12:::1;10055:22;::::0;-1:-1:-1;;;;;2912:32:1;;;2894:51;;2882:2;2867:18;10055:22:0::1;;;;;;;9965:120::o:0;3999:191::-;4073:16;4092:6;;-1:-1:-1;;;;;4109:17:0;;;-1:-1:-1;;;;;;4109:17:0;;;;;;4142:40;;4092:6;;;;;;;4142:40;;4073:16;4142:40;4062:128;3999:191;:::o;38606:401::-;38719:12;;38706:48;;-1:-1:-1;;;38706:48:0;;-1:-1:-1;;;;;2912:32:1;;;38706:48:0;;;2894:51:1;38685:4:0;;38719:12;;38706:42;;2867:18:1;;38706:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38758:1;38706:53;38702:71;;-1:-1:-1;38768:5:0;38761:12;;38702:71;38823:12;;38810:48;;-1:-1:-1;;;38810:48:0;;-1:-1:-1;;;;;2912:32:1;;;38810:48:0;;;2894:51:1;38784:23:0;;38823:12;;38810:42;;2867:18:1;;38810:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38810:48:0;;;;;;;;;;;;:::i;:::-;38784:74;-1:-1:-1;38874:9:0;38869:108;38893:6;:13;38889:1;:17;38869:108;;;38945:7;38932:6;38939:1;38932:9;;;;;;;;:::i;:::-;;;;;;;:20;38928:37;;38961:4;38954:11;;;;;;38928:37;38908:3;;38869:108;;;-1:-1:-1;38994:5:0;;38606:401;-1:-1:-1;;;;38606:401:0:o;39318:248::-;-1:-1:-1;;;;;39403:22:0;;;;;;:16;:22;;;;;;;;:32;;;;;;;;;;;39398:161;;-1:-1:-1;;;;;39452:22:0;;;;;;;;:16;:22;;;;;;;;:32;;;;;;;;:39;;-1:-1:-1;;39452:39:0;39487:4;39452:39;;;;;;39506:26;;;:20;:26;;;;:41;;;;;;;;;;;;;39318:248::o;9706:118::-;8715:19;:17;:19::i;:::-;9766:7:::1;:14:::0;;-1:-1:-1;;9766:14:0::1;9776:4;9766:14;::::0;;9796:20:::1;9803:12;775:10:::0;;695:98;39015:205;39085:25;;;;:15;:25;;;;;;;;39080:133;;39127:25;;;;:15;:25;;;;;;;:32;;-1:-1:-1;;39127:32:0;39155:4;39127:32;;;;;;39174:27;;;;;;;;;;;;39015:205::o;12353:374::-;12463:6;12439:21;:30;12435:127;;;12493:57;;-1:-1:-1;;;12493:57:0;;12520:21;12493:57;;;47091:25:1;47132:18;;;47125:34;;;47064:18;;12493:57:0;46917:248:1;12435:127:0;12575:12;12589:23;12616:9;-1:-1:-1;;;;;12616:14:0;12638:6;12616:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12574:75;;;;12665:7;12660:60;;12689:19;12697:10;12689:7;:19::i;42746:239::-;42845:10;;;:26;42813:4;;;;42845:26;;;;;:74;;42900:19;;42845:74;;;42874:23;;42845:74;42830:89;;42973:4;42956:1;:14;;;:21;;;;:::i;:::-;42937:15;:40;;;42746:239;-1:-1:-1;;;42746:239:0:o;9454:108::-;9181:7;;;;9513:41;;;;-1:-1:-1;;;9513:41:0;;47849:2:1;9513:41:0;;;47831:21:1;47888:2;47868:18;;;47861:30;-1:-1:-1;;;47907:18:1;;;47900:50;47967:18;;9513:41:0;47647:344:1;16727:498:0;16860:17;;:21;16856:362;;17060:10;17054:17;17117:15;17104:10;17100:2;17096:19;17089:44;16856:362;17187:19;;-1:-1:-1;;;17187:19:0;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:226:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:1;;14:226;-1:-1:-1;14:226:1:o;619:131::-;-1:-1:-1;;;;;694:31:1;;684:42;;674:70;;740:1;737;730:12;755:118;841:5;834:13;827:21;820:5;817:32;807:60;;863:1;860;853:12;878:382;943:6;951;1004:2;992:9;983:7;979:23;975:32;972:52;;;1020:1;1017;1010:12;972:52;1059:9;1046:23;1078:31;1103:5;1078:31;:::i;:::-;1128:5;-1:-1:-1;1185:2:1;1170:18;;1157:32;1198:30;1157:32;1198:30;:::i;:::-;1247:7;1237:17;;;878:382;;;;;:::o;1265:346::-;1333:6;1341;1394:2;1382:9;1373:7;1369:23;1365:32;1362:52;;;1410:1;1407;1400:12;1362:52;-1:-1:-1;;1455:23:1;;;1575:2;1560:18;;;1547:32;;-1:-1:-1;1265:346:1:o;1847:233::-;1935:6;1995:3;1983:9;1974:7;1970:23;1966:33;2011:2;2008:22;;;2026:1;2023;2016:12;2008:22;-1:-1:-1;2065:9:1;;1847:233;-1:-1:-1;;1847:233:1:o;2267:367::-;2335:6;2343;2396:2;2384:9;2375:7;2371:23;2367:32;2364:52;;;2412:1;2409;2402:12;2364:52;2457:23;;;-1:-1:-1;2556:2:1;2541:18;;2528:32;2569:33;2528:32;2569:33;:::i;2956:247::-;3015:6;3068:2;3056:9;3047:7;3043:23;3039:32;3036:52;;;3084:1;3081;3074:12;3036:52;3123:9;3110:23;3142:31;3167:5;3142:31;:::i;:::-;3192:5;2956:247;-1:-1:-1;;;2956:247:1:o;3487:289::-;3529:3;3567:5;3561:12;3594:6;3589:3;3582:19;3650:6;3643:4;3636:5;3632:16;3625:4;3620:3;3616:14;3610:47;3702:1;3695:4;3686:6;3681:3;3677:16;3673:27;3666:38;3765:4;3758:2;3754:7;3749:2;3741:6;3737:15;3733:29;3728:3;3724:39;3720:50;3713:57;;;3487:289;;;;:::o;3781:487::-;-1:-1:-1;;;;;4014:32:1;;3996:51;;4083:3;4078:2;4063:18;;4056:31;;;-1:-1:-1;;4104:46:1;;4130:19;;4122:6;4104:46;:::i;:::-;4181:2;4166:18;;4159:34;;;;-1:-1:-1;;;;;;4229:32:1;;;;4224:2;4209:18;;;4202:60;4096:54;3781:487;-1:-1:-1;;3781:487:1:o;4273:367::-;4341:6;4349;4402:2;4390:9;4381:7;4377:23;4373:32;4370:52;;;4418:1;4415;4408:12;4370:52;4457:9;4444:23;4476:31;4501:5;4476:31;:::i;:::-;4526:5;4604:2;4589:18;;;;4576:32;;-1:-1:-1;;;4273:367:1:o;5017:317::-;-1:-1:-1;;;;;5194:32:1;;5176:51;;5263:2;5258;5243:18;;5236:30;;;-1:-1:-1;;5283:45:1;;5309:18;;5301:6;5283:45;:::i;:::-;5275:53;5017:317;-1:-1:-1;;;;5017:317:1:o;5339:388::-;5407:6;5415;5468:2;5456:9;5447:7;5443:23;5439:32;5436:52;;;5484:1;5481;5474:12;5436:52;5523:9;5510:23;5542:31;5567:5;5542:31;:::i;:::-;5592:5;-1:-1:-1;5649:2:1;5634:18;;5621:32;5662:33;5621:32;5662:33;:::i;6587:602::-;6670:6;6678;6686;6694;6747:3;6735:9;6726:7;6722:23;6718:33;6715:53;;;6764:1;6761;6754:12;6715:53;6809:23;;;-1:-1:-1;6929:2:1;6914:18;;6901:32;;-1:-1:-1;7032:2:1;7017:18;;7004:32;;-1:-1:-1;7114:2:1;7099:18;;7086:32;7127:30;7086:32;7127:30;:::i;:::-;6587:602;;;;-1:-1:-1;6587:602:1;;-1:-1:-1;;6587:602:1:o;7194:348::-;7246:8;7256:6;7310:3;7303:4;7295:6;7291:17;7287:27;7277:55;;7328:1;7325;7318:12;7277:55;-1:-1:-1;7351:20:1;;-1:-1:-1;;;;;7383:30:1;;7380:50;;;7426:1;7423;7416:12;7380:50;7463:4;7455:6;7451:17;7439:29;;7515:3;7508:4;7499:6;7491;7487:19;7483:30;7480:39;7477:59;;;7532:1;7529;7522:12;7477:59;7194:348;;;;;:::o;7547:808::-;7645:6;7653;7661;7669;7677;7730:3;7718:9;7709:7;7705:23;7701:33;7698:53;;;7747:1;7744;7737:12;7698:53;7786:9;7773:23;7805:31;7830:5;7805:31;:::i;:::-;7855:5;-1:-1:-1;7911:2:1;7896:18;;7883:32;-1:-1:-1;;;;;7927:30:1;;7924:50;;;7970:1;7967;7960:12;7924:50;8009:59;8060:7;8051:6;8040:9;8036:22;8009:59;:::i;:::-;8087:8;;-1:-1:-1;7983:85:1;-1:-1:-1;;8195:2:1;8180:18;;8167:32;;-1:-1:-1;8277:2:1;8262:18;;8249:32;8290:33;8249:32;8290:33;:::i;:::-;8342:7;8332:17;;;7547:808;;;;;;;;:::o;8360:546::-;8440:6;8448;8456;8509:2;8497:9;8488:7;8484:23;8480:32;8477:52;;;8525:1;8522;8515:12;8477:52;8564:9;8551:23;8583:31;8608:5;8583:31;:::i;:::-;8633:5;-1:-1:-1;8689:2:1;8674:18;;8661:32;-1:-1:-1;;;;;8705:30:1;;8702:50;;;8748:1;8745;8738:12;8702:50;8787:59;8838:7;8829:6;8818:9;8814:22;8787:59;:::i;:::-;8360:546;;8865:8;;-1:-1:-1;8761:85:1;;-1:-1:-1;;;;8360:546:1:o;8911:127::-;8972:10;8967:3;8963:20;8960:1;8953:31;9003:4;9000:1;8993:15;9027:4;9024:1;9017:15;9043:141;9125:1;9118:5;9115:12;9105:46;;9131:18;;:::i;:::-;9160;;9043:141::o;9189:143::-;9273:1;9266:5;9263:12;9253:46;;9279:18;;:::i;10073:1432::-;10734:25;;;-1:-1:-1;;;;;10795:32:1;;10790:2;10775:18;;10768:60;10721:3;10706:19;;10837:54;10887:2;10872:18;;10864:6;10837:54;:::i;:::-;-1:-1:-1;;;;;10927:32:1;;;10922:2;10907:18;;10900:60;10991:3;10976:19;;10969:35;;;2705:31;;10947:3;11040:19;;2693:44;11097:6;11091:3;11080:9;11076:19;11069:35;11141:6;11135:3;11124:9;11120:19;11113:35;11185:6;11179:3;11168:9;11164:19;11157:35;11201:57;11253:3;11242:9;11238:19;11230:6;11201:57;:::i;:::-;-1:-1:-1;;;;;2705:31:1;;11310:3;11295:19;;2693:44;11346:3;11331:19;;11324:36;;;9414:12;;11423:3;11408:19;;9402:25;9476:4;9465:16;;9459:23;9443:14;;;9436:47;9532:4;9521:16;;9515:23;9499:14;;;9492:47;9592:4;9581:16;;9575:23;-1:-1:-1;;;;;9571:49:1;9555:14;;;9548:73;9670:4;9659:16;;9653:23;9637:14;;;9630:47;9782:12;;9775:20;9768:28;11494:3;11479:19;;9756:41;9860:4;9849:16;;9843:23;9836:31;9829:39;9813:14;;;9806:63;9918:4;9907:16;;9901:23;9885:14;;;9878:47;9978:4;9967:16;;9961:23;-1:-1:-1;;;;;9957:48:1;9941:14;;;9934:72;10055:4;10044:16;;10038:23;10022:14;;;10015:47;10073:1432;;;;;;;;;;;;;;;;;:::o;11510:971::-;11764:2;11776:21;;;11846:13;;11749:18;;;11868:22;;;11716:4;;11947:15;;;11921:2;11906:18;;;11716:4;11990:465;12004:6;12001:1;11998:13;11990:465;;;12063:13;;12105:9;;-1:-1:-1;;;;;12101:35:1;12089:48;;12185:2;12177:11;;;12171:18;12157:12;;;12150:40;12238:2;12230:11;;;12224:18;12210:12;;;12203:40;12293:4;12285:13;;;12279:20;12263:14;;;12256:44;12364:4;12356:13;;;12350:20;12343:28;12336:36;12320:14;;;12313:60;;;;12430:15;;;;12124:3;12393:14;;;;12133:1;12019:9;11990:465;;;-1:-1:-1;12472:3:1;;11510:971;-1:-1:-1;;;;;11510:971:1:o;12486:508::-;12563:6;12571;12579;12632:2;12620:9;12611:7;12607:23;12603:32;12600:52;;;12648:1;12645;12638:12;12600:52;12687:9;12674:23;12706:31;12731:5;12706:31;:::i;:::-;12756:5;-1:-1:-1;12834:2:1;12819:18;;12806:32;;-1:-1:-1;12916:2:1;12901:18;;12888:32;12929:33;12888:32;12929:33;:::i;:::-;12981:7;12971:17;;;12486:508;;;;;:::o;12999:401::-;13201:2;13183:21;;;13240:2;13220:18;;;13213:30;13279:34;13274:2;13259:18;;13252:62;-1:-1:-1;;;13345:2:1;13330:18;;13323:35;13390:3;13375:19;;12999:401::o;14792:364::-;14871:6;14879;14932:2;14920:9;14911:7;14907:23;14903:32;14900:52;;;14948:1;14945;14938:12;14900:52;14980:9;14974:16;14999:31;15024:5;14999:31;:::i;:::-;15120:2;15105:18;;;;15099:25;15049:5;;15099:25;;-1:-1:-1;;;14792:364:1:o;15161:179::-;15196:3;15238:1;15220:16;15217:23;15214:120;;;15284:1;15281;15278;15263:23;-1:-1:-1;15321:1:1;15315:8;15310:3;15306:18;15214:120;15161:179;:::o;15345:127::-;15406:10;15401:3;15397:20;15394:1;15387:31;15437:4;15434:1;15427:15;15461:4;15458:1;15451:15;15477:249;15587:2;15568:13;;-1:-1:-1;;15564:27:1;15552:40;;-1:-1:-1;;;;;15607:34:1;;15643:22;;;15604:62;15601:88;;;15669:18;;:::i;:::-;15705:2;15698:22;-1:-1:-1;;15477:249:1:o;15731:628::-;15770:3;15812:4;15794:16;15791:26;15788:39;;;15731:628;:::o;15788:39::-;15854:2;15848:9;15894:16;-1:-1:-1;;15890:29:1;15887:1;15848:9;15866:54;15949:4;15943:11;16023:16;16016:4;16008:6;16004:17;16001:39;-1:-1:-1;;;;;15972:6:1;15969:30;15966:75;15963:88;;;16044:5;;15731:628;:::o;15963:88::-;16081:6;16075:4;16071:17;16117:3;16111:10;-1:-1:-1;;;;;16136:6:1;16133:30;16130:43;;;16166:5;;;;15731:628;:::o;16130:43::-;16231:16;16221:27;;-1:-1:-1;;16217:40:1;16192:16;;;16210:4;16188:27;16185:73;16182:86;;;16261:5;;;;15731:628;:::o;16182:86::-;16277:57;16328:4;16319:6;16311;16307:19;16303:30;16297:4;16277:57;:::i;:::-;-1:-1:-1;16350:3:1;15731:628;-1:-1:-1;;;15731:628:1:o;16364:469::-;16626:25;16621:3;16614:38;16596:3;16681:6;16675:13;16736:6;16729:4;16721:6;16717:17;16712:2;16707:3;16703:12;16697:46;16807:1;16766:16;;16784:2;16762:25;16796:13;;;-1:-1:-1;16762:25:1;16364:469;-1:-1:-1;16364:469:1:o;16838:220::-;16987:2;16976:9;16969:21;16950:4;17007:45;17048:2;17037:9;17033:18;17025:6;17007:45;:::i;17063:212::-;17099:7;17108:4;17151;17133:16;17130:26;17127:142;;;17200:4;17197:1;17194;17179:26;-1:-1:-1;;17257:1:1;17251:8;17229:1;;17127:142;17063:212;;:::o;17989:380::-;18068:1;18064:12;;;;18111;;;18132:61;;18186:4;18178:6;18174:17;18164:27;;18132:61;18239:2;18231:6;18228:14;18208:18;18205:38;18202:161;;18285:10;18280:3;18276:20;18273:1;18266:31;18320:4;18317:1;18310:15;18348:4;18345:1;18338:15;18202:161;;17989:380;;;:::o;19072:127::-;19133:10;19128:3;19124:20;19121:1;19114:31;19164:4;19161:1;19154:15;19188:4;19185:1;19178:15;19204:127;19265:10;19260:3;19256:20;19253:1;19246:31;19296:4;19293:1;19286:15;19320:4;19317:1;19310:15;19336:128;19403:9;;;19424:11;;;19421:37;;;19438:18;;:::i;19469:127::-;19530:10;19525:3;19521:20;19518:1;19511:31;19561:4;19558:1;19551:15;19585:4;19582:1;19575:15;21324:251;21394:6;21447:2;21435:9;21426:7;21422:23;21418:32;21415:52;;;21463:1;21460;21453:12;21415:52;21495:9;21489:16;21514:31;21539:5;21514:31;:::i;22989:125::-;23054:9;;;23075:10;;;23072:36;;;23088:18;;:::i;23461:168::-;23534:9;;;23565;;23582:15;;;23576:22;;23562:37;23552:71;;23603:18;;:::i;23979:230::-;24049:6;24102:2;24090:9;24081:7;24077:23;24073:32;24070:52;;;24118:1;24115;24108:12;24070:52;-1:-1:-1;24163:16:1;;23979:230;-1:-1:-1;23979:230:1:o;24787:371::-;-1:-1:-1;;;;;25007:32:1;;;24989:51;;25076:32;;;;25071:2;25056:18;;25049:60;25140:2;25125:18;;25118:34;;;;24977:2;24962:18;;24787:371::o;25163:245::-;25230:6;25283:2;25271:9;25262:7;25258:23;25254:32;25251:52;;;25299:1;25296;25289:12;25251:52;25331:9;25325:16;25350:28;25372:5;25350:28;:::i;27189:268::-;-1:-1:-1;;;;;27273:26:1;;;27301;;;27269:59;27348:36;;;;27403:24;;;27393:58;;27431:18;;:::i;:::-;27393:58;27189:268;;;;:::o;27462:191::-;-1:-1:-1;;;;;27530:26:1;;;27558;;;27526:59;;27597:27;;27594:53;;;27627:18;;:::i;30846:518::-;30948:2;30943:3;30940:11;30937:421;;;30984:5;30981:1;30974:16;31028:4;31025:1;31015:18;31098:2;31086:10;31082:19;31079:1;31075:27;31069:4;31065:38;31134:4;31122:10;31119:20;31116:47;;;-1:-1:-1;31157:4:1;31116:47;31212:2;31207:3;31203:12;31200:1;31196:20;31190:4;31186:31;31176:41;;31267:81;31285:2;31278:5;31275:13;31267:81;;;31344:1;31330:16;;31311:1;31300:13;31267:81;;;31271:3;;30846:518;;;:::o;31540:1299::-;31666:3;31660:10;-1:-1:-1;;;;;31685:6:1;31682:30;31679:56;;;31715:18;;:::i;:::-;31744:97;31834:6;31794:38;31826:4;31820:11;31794:38;:::i;:::-;31788:4;31744:97;:::i;:::-;31890:4;31921:2;31910:14;;31938:1;31933:649;;;;32626:1;32643:6;32640:89;;;-1:-1:-1;32695:19:1;;;32689:26;32640:89;-1:-1:-1;;31497:1:1;31493:11;;;31489:24;31485:29;31475:40;31521:1;31517:11;;;31472:57;32742:81;;31903:930;;31933:649;30793:1;30786:14;;;30830:4;30817:18;;-1:-1:-1;;31969:20:1;;;32087:222;32101:7;32098:1;32095:14;32087:222;;;32183:19;;;32177:26;32162:42;;32290:4;32275:20;;;;32243:1;32231:14;;;;32117:12;32087:222;;;32091:3;32337:6;32328:7;32325:19;32322:201;;;32398:19;;;32392:26;-1:-1:-1;;32481:1:1;32477:14;;;32493:3;32473:24;32469:37;32465:42;32450:58;32435:74;;32322:201;-1:-1:-1;;;;32569:1:1;32553:14;;;32549:22;32536:36;;-1:-1:-1;31540:1299:1:o;38488:270::-;38561:6;38614:2;38602:9;38593:7;38589:23;38585:32;38582:52;;;38630:1;38627;38620:12;38582:52;38669:9;38656:23;38708:1;38701:5;38698:12;38688:40;;38724:1;38721;38714:12;40149:241;40205:6;40258:2;40246:9;40237:7;40233:23;40229:32;40226:52;;;40274:1;40271;40264:12;40226:52;40313:9;40300:23;40332:28;40354:5;40332:28;:::i;40395:269::-;40452:6;40505:2;40493:9;40484:7;40480:23;40476:32;40473:52;;;40521:1;40518;40511:12;40473:52;40560:9;40547:23;40610:4;40603:5;40599:16;40592:5;40589:27;40579:55;;40630:1;40627;40620:12;41369:336;41571:2;41553:21;;;41610:2;41590:18;;;41583:30;-1:-1:-1;;;41644:2:1;41629:18;;41622:42;41696:2;41681:18;;41369:336::o;42413:135::-;42452:3;42473:17;;;42470:43;;42493:18;;:::i;:::-;-1:-1:-1;42540:1:1;42529:13;;42413:135::o;42553:691::-;42867:3;42852:19;;42880:45;42856:9;42907:6;42880:45;:::i;:::-;-1:-1:-1;;;;;42961:32:1;;;42956:2;42941:18;;42934:60;43025:2;43010:18;;43003:34;;;;43073:32;;;;43068:2;43053:18;;43046:60;43137:3;43122:19;;43115:35;;;;42981:3;43166:19;;43159:35;43225:3;43210:19;43203:35;;;;42553:691;;-1:-1:-1;42553:691:1:o;43592:217::-;43632:1;43658;43648:132;;43702:10;43697:3;43693:20;43690:1;43683:31;43737:4;43734:1;43727:15;43765:4;43762:1;43755:15;43648:132;-1:-1:-1;43794:9:1;;43592:217::o;45891:1021::-;45986:6;46039:2;46027:9;46018:7;46014:23;46010:32;46007:52;;;46055:1;46052;46045:12;46007:52;46088:9;46082:16;-1:-1:-1;;;;;46113:6:1;46110:30;46107:50;;;46153:1;46150;46143:12;46107:50;46176:22;;46229:4;46221:13;;46217:27;-1:-1:-1;46207:55:1;;46258:1;46255;46248:12;46207:55;46291:2;46285:9;-1:-1:-1;;;;;46309:6:1;46306:30;46303:56;;;46339:18;;:::i;:::-;46385:6;46382:1;46378:14;46421:2;46415:9;46433:40;46469:2;46465;46461:11;46453:6;46433:40;:::i;:::-;46508:22;;;46558:2;46588:11;;;46584:20;;;46508:22;46546:15;;46616:19;;;46613:39;;;46648:1;46645;46638:12;46613:39;46680:2;46676;46672:11;46661:22;;46692:189;46708:6;46703:3;46700:15;46692:189;;;46798:10;;46821:18;;;46868:2;46725:12;;;;46798:10;;-1:-1:-1;46859:12:1;46692:189;;;-1:-1:-1;46900:6:1;45891:1021;-1:-1:-1;;;;;;45891:1021:1:o
Swarm Source
ipfs://5e9e1fe1c8800002af85ecc9de4a570c6d4ef7a55c260a1f8eb2a83057ad3db5
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$20.91
Net Worth in HYPE
Token Allocations
HYPE
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| HYPEREVM | 100.00% | $23.23 | 0.9001 | $20.91 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.