Source Code
Multichain Info
N/A
Latest 25 from a total of 513 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Native | 32837066 | 4 hrs ago | IN | 0 APE | 0.00320361 | ||||
| Spin | 32669026 | 4 days ago | IN | 0.25 APE | 0.01942933 | ||||
| Spin | 32668990 | 4 days ago | IN | 0.25 APE | 0.01997537 | ||||
| Spin | 32668977 | 4 days ago | IN | 0.25 APE | 0.01942933 | ||||
| Spin | 32612017 | 5 days ago | IN | 0.25 APE | 0.03645093 | ||||
| Spin | 32612009 | 5 days ago | IN | 0.25 APE | 0.01942933 | ||||
| Spin | 32612005 | 5 days ago | IN | 0.25 APE | 0.02290688 | ||||
| Spin | 32513782 | 8 days ago | IN | 0.25 APE | 0.03471215 | ||||
| Spin | 32513755 | 8 days ago | IN | 0.25 APE | 0.03822234 | ||||
| Spin | 32496198 | 8 days ago | IN | 0.25 APE | 0.01999011 | ||||
| Spin | 32495148 | 8 days ago | IN | 0.25 APE | 0.03297338 | ||||
| Spin | 32495141 | 8 days ago | IN | 0.25 APE | 0.01942933 | ||||
| Spin | 32495129 | 8 days ago | IN | 0.25 APE | 0.02042369 | ||||
| Spin | 32495007 | 8 days ago | IN | 0.25 APE | 0.02290688 | ||||
| Spin | 32393391 | 11 days ago | IN | 0.25 APE | 0.03979151 | ||||
| Spin | 32393381 | 11 days ago | IN | 0.25 APE | 0.02881831 | ||||
| Spin | 32393371 | 11 days ago | IN | 0.25 APE | 0.01942933 | ||||
| Spin | 32393362 | 11 days ago | IN | 0.25 APE | 0.03297338 | ||||
| Spin | 32393351 | 11 days ago | IN | 0.25 APE | 0.01999011 | ||||
| Spin | 32393343 | 11 days ago | IN | 0.25 APE | 0.02889854 | ||||
| Spin | 32393327 | 11 days ago | IN | 0.25 APE | 0.03353426 | ||||
| Spin | 32393287 | 11 days ago | IN | 0.25 APE | 0.02730375 | ||||
| Spin | 32393265 | 11 days ago | IN | 0.25 APE | 0.02881831 | ||||
| Spin | 32393250 | 11 days ago | IN | 0.25 APE | 0.03353426 | ||||
| Spin | 32393241 | 11 days ago | IN | 0.25 APE | 0.01942933 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 32837066 | 4 hrs ago | 70 APE | ||||
| 32393391 | 11 days ago | 1.2 APE | ||||
| 32393287 | 11 days ago | 1.8 APE | ||||
| 32358550 | 11 days ago | 0.6 APE | ||||
| 32341752 | 12 days ago | 0.9 APE | ||||
| 32341456 | 12 days ago | 3 APE | ||||
| 31788760 | 26 days ago | 0.6 APE | ||||
| 31672578 | 29 days ago | 0.6 APE | ||||
| 31672486 | 29 days ago | 0.6 APE | ||||
| 31568293 | 31 days ago | 0.6 APE | ||||
| 31530861 | 32 days ago | 1.8 APE | ||||
| 31516548 | 32 days ago | 0.6 APE | ||||
| 31490427 | 33 days ago | 1.8 APE | ||||
| 31305518 | 36 days ago | 30 APE | ||||
| 31244909 | 36 days ago | 0.6 APE | ||||
| 31241718 | 37 days ago | 0.6 APE | ||||
| 31233221 | 37 days ago | 0.6 APE | ||||
| 31232520 | 37 days ago | 6 APE | ||||
| 31232499 | 37 days ago | 1.8 APE | ||||
| 31232428 | 37 days ago | 0.6 APE | ||||
| 31228626 | 37 days ago | 3 APE | ||||
| 31228567 | 37 days ago | 0.6 APE | ||||
| 31225165 | 37 days ago | 1.8 APE | ||||
| 31225028 | 37 days ago | 0.9 APE | ||||
| 31223284 | 37 days ago | 0.9 APE |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SatoSlotMachine
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at apescan.io on 2025-12-17
*/
/// @author OutlawDevs
// .----------------. .----------------. .----------------. .----------------.
// | .--------------. || .--------------. || .--------------. || .--------------. |
// | | _______ | || | __ | || | _________ | || | ____ | |
// | | / ___ | | || | / \ | || | | _ _ | | || | .' `. | |
// | | | (__ \_| | || | / /\ \ | || | |_/ | | \_| | || | / .--. \ | |
// | | '.___`-. | || | / ____ \ | || | | | | || | | | | | | |
// | | |`\____) | | || | _/ / \ \_ | || | _| |_ | || | \ `--' / | |
// | | |_______.' | || ||____| |____|| || | |_____| | || | `.____.' | |
// | | | || | | || | | || | | |
// | '--------------' || '--------------' || '--------------' || '--------------' |
// '----------------' '----------------' '----------------' '----------------'
// 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/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @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.4.0) (utils/introspection/IERC165.sol)
pragma solidity >=0.4.16;
/**
* @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.4.0) (token/ERC721/IERC721.sol)
pragma solidity >=0.6.2;
/**
* @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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity >=0.5.0;
/**
* @title ERC-721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC-721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be
* reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: GSAWheel.sol
pragma solidity ^0.8.19;
contract SatoSlotMachine is Ownable, ReentrancyGuard, IERC721Receiver {
uint256 public spinCost = 0.25 ether;
uint256 public totalSpins;
uint256 public totalPayouts;
uint256 public totalNativePayouts;
uint256 public totalERCPayouts;
uint256 public totalNFTPayouts;
mapping(address => uint256) public playerSpins;
mapping(address => uint256) public playerWinnings;
uint256 public constant EVERY_3_SPINS_REWARD = 1000 * (10**18);
uint256 public constant SPINS_INTERVAL_FOR_REWARD = 3;
IERC20 public erc20Token;
IERC721 public nftCollection;
uint256[] public availableNFTIds;
struct PlayerSpin {
uint256 timestamp;
string prizeType;
uint256 prizeAmount;
bool freeSpinUsed;
}
mapping(address => PlayerSpin[]) public playerSpinHistory;
struct SpinResult {
address player;
string prizeType;
uint256 prizeAmount;
uint256 random;
uint256 timestamp;
bool wasFreeSpin;
}
mapping(uint256 => SpinResult) public spins;
event Every3SpinsReward(address indexed player, uint256 amount, uint256 spinCount);
event AutomaticRewardRecorded(address indexed player, uint256 amount, uint256 spinCount);
event SpinExecuted(
address indexed player,
uint256 indexed spinId,
string prizeType,
uint256 prizeAmount,
uint256 random,
bool wasFreeSpin
);
event NativePrizeSent(address indexed to, uint256 amount);
event ERC20PrizeSent(address indexed to, uint256 amount);
event NFTPrizeSent(address indexed to, uint256 tokenId);
event EmergencyNativeWithdrawn(address indexed to, uint256 amount);
event EmergencyERC20Withdrawn(address indexed to, uint256 amount);
event EmergencyNFTsWithdrawn(address indexed to, uint256 count);
event NFTsDeposited(address indexed from, uint256 count);
constructor(address _erc20, address _nft) Ownable(msg.sender) {
erc20Token = IERC20(_erc20);
nftCollection = IERC721(_nft);
}
function setSpinCost(uint256 _newCost) external onlyOwner {
require(_newCost > 0, "Invalid cost");
spinCost = _newCost;
}
function setERC20Token(address _token) external onlyOwner {
erc20Token = IERC20(_token);
}
function setNFTCollection(address _nft) external onlyOwner {
nftCollection = IERC721(_nft);
}
function depositNFTs(uint256 amount) external onlyOwner {
require(amount > 0, "Amount must be greater than 0");
require(address(nftCollection) != address(0), "NFT collection not set");
uint256 depositedCount = 0;
for (uint256 i = 0; i < amount; i++) {
try nftCollection.transferFrom(msg.sender, address(this), i) {
availableNFTIds.push(i);
depositedCount++;
} catch {
continue;
}
}
require(depositedCount > 0, "No NFTs were deposited");
emit NFTsDeposited(msg.sender, depositedCount);
}
function depositSpecificNFTs(uint256[] calldata tokenIds) external onlyOwner {
require(tokenIds.length > 0, "No token IDs provided");
require(address(nftCollection) != address(0), "NFT collection not set");
for (uint256 i = 0; i < tokenIds.length; i++) {
nftCollection.transferFrom(msg.sender, address(this), tokenIds[i]);
availableNFTIds.push(tokenIds[i]);
}
emit NFTsDeposited(msg.sender, tokenIds.length);
}
function _getAndRemoveNFTPrize() internal returns (uint256 tokenId) {
require(availableNFTIds.length > 0, "No NFTs available");
tokenId = availableNFTIds[0];
availableNFTIds[0] = availableNFTIds[availableNFTIds.length - 1];
availableNFTIds.pop();
}
function _checkAndAwardEvery3Spins(address player) internal {
uint256 playerSpinCount = playerSpins[player];
if (playerSpinCount % SPINS_INTERVAL_FOR_REWARD == 0 && playerSpinCount > 0) {
if (address(erc20Token) != address(0) &&
erc20Token.balanceOf(address(this)) >= EVERY_3_SPINS_REWARD) {
bool success = erc20Token.transfer(player, EVERY_3_SPINS_REWARD);
if (success) {
totalERCPayouts += EVERY_3_SPINS_REWARD;
totalPayouts += EVERY_3_SPINS_REWARD;
playerWinnings[player] += EVERY_3_SPINS_REWARD;
playerSpinHistory[player].push(
PlayerSpin({
timestamp: block.timestamp,
prizeType: "ERC20",
prizeAmount: EVERY_3_SPINS_REWARD,
freeSpinUsed: false
})
);
spins[totalSpins] = SpinResult({
player: player,
prizeType: "ERC20",
prizeAmount: EVERY_3_SPINS_REWARD,
random: uint256(keccak256(abi.encodePacked(block.timestamp, player, "AUTO_REWARD"))),
timestamp: block.timestamp,
wasFreeSpin: false
});
emit ERC20PrizeSent(player, EVERY_3_SPINS_REWARD);
emit Every3SpinsReward(player, EVERY_3_SPINS_REWARD, playerSpinCount);
emit AutomaticRewardRecorded(player, EVERY_3_SPINS_REWARD, playerSpinCount);
emit SpinExecuted(
player,
totalSpins,
"ERC20",
EVERY_3_SPINS_REWARD,
uint256(keccak256(abi.encodePacked(block.timestamp, player, "AUTO_REWARD"))),
false
);
}
}
}
}
uint256[] private nativeAmounts = [
0,
0.6 ether,
0.9 ether,
1.2 ether,
1.8 ether,
3 ether,
6 ether,
12 ether,
30 ether,
120 ether,
600 ether
];
uint32[] private nativePpm = [
470000,
170000,
120000,
80000,
60000,
40000,
30000,
13000,
7000,
5000,
5000
];
uint256[] private erc20Amounts = [
0,
6000 * (10**18),
9000 * (10**18),
12000 * (10**18),
18000 * (10**18),
30000 * (10**18),
60000 * (10**18),
120000 * (10**18),
300000 * (10**18),
1200000 * (10**18),
6000000 * (10**18)
];
uint32[] private erc20Ppm = [
440000,
200000,
120000,
80000,
60000,
40000,
30000,
13000,
7000,
5000,
5000
];
uint32[] private nftPpm = [600000, 400000];
function spin() external payable nonReentrant returns (string memory prizeType, uint256 prizeAmount) {
require(msg.value == spinCost, "Incorrect spin cost");
uint256 entropy = uint256(
keccak256(abi.encodePacked(block.timestamp, msg.sender, block.prevrandao, totalSpins))
);
uint256 primary = entropy % 10000;
totalSpins++;
playerSpins[msg.sender]++;
_checkAndAwardEvery3Spins(msg.sender);
// 🔥 DISTRIBUCIÓN ACTUALIZADA CON NFT REDUCIDO 15% TOTAL
if (primary < 5650) { // 56.5% - NONE (aumentado de 56%)
prizeType = "NONE";
prizeAmount = 0;
_recordAndEmit(msg.sender, prizeType, prizeAmount, entropy, false);
return (prizeType, prizeAmount);
}
if (primary <= 6982) { // 13.32% - NATIVE (6982 - 5650 = 1332)
(prizeType, prizeAmount) = _selectNative(entropy);
} else if (primary <= 8315) { // 13.33% - ERC20 (8315 - 6982 = 1333)
(prizeType, prizeAmount) = _selectERC20(entropy);
} else { // 🔥 16.85% - NFT (10000 - 8315 = 1685) - REDUCIDO 15% TOTAL
(prizeType, prizeAmount) = _selectNFT(entropy);
}
_recordAndEmit(msg.sender, prizeType, prizeAmount, entropy, false);
return (prizeType, prizeAmount);
}
function _selectNative(uint256 entropy) internal returns (string memory prizeType, uint256 prizeAmount) {
uint256 r = uint256(keccak256(abi.encodePacked(entropy, "NATIVE"))) % 1_000_000;
uint256 cum = 0;
for (uint256 i = 0; i < nativePpm.length; i++) {
cum += nativePpm[i];
if (r < cum) {
if (nativeAmounts[i] == 0) {
return ("NONE", 0);
}
uint256 amount = nativeAmounts[i];
if (address(this).balance >= amount) {
(bool sent, ) = payable(msg.sender).call{value: amount}("");
if (sent) {
totalPayouts += amount;
totalNativePayouts += amount;
playerWinnings[msg.sender] += amount;
emit NativePrizeSent(msg.sender, amount);
return ("NATIVE", amount);
} else {
return ("NONE", 0);
}
} else {
return ("NONE", 0);
}
}
}
return ("NONE", 0);
}
function _selectERC20(uint256 entropy) internal returns (string memory prizeType, uint256 prizeAmount) {
uint256 r = uint256(keccak256(abi.encodePacked(entropy, "ERC20"))) % 1_000_000;
uint256 cum = 0;
for (uint256 i = 0; i < erc20Ppm.length; i++) {
cum += erc20Ppm[i];
if (r < cum) {
if (erc20Amounts[i] == 0) {
return ("NONE", 0);
}
uint256 amount = erc20Amounts[i];
if (address(erc20Token) == address(0)) return ("NONE", 0);
if (erc20Token.balanceOf(address(this)) >= amount) {
bool ok = erc20Token.transfer(msg.sender, amount);
if (ok) {
totalERCPayouts += amount;
emit ERC20PrizeSent(msg.sender, amount);
return ("ERC20", amount);
} else {
return ("NONE", 0);
}
} else {
return ("NONE", 0);
}
}
}
return ("NONE", 0);
}
function _selectNFT(uint256 entropy) internal returns (string memory prizeType, uint256 prizeAmount) {
uint256 r = uint256(keccak256(abi.encodePacked(entropy, "NFT"))) % 1_000_000;
uint256 cum = 0;
for (uint256 i = 0; i < nftPpm.length; i++) {
cum += nftPpm[i];
if (r < cum) {
if (i == 0) {
return ("NONE", 0);
} else {
if (availableNFTIds.length == 0) return ("NONE", 0);
uint256 tokenId = _getAndRemoveNFTPrize();
require(
nftCollection.ownerOf(tokenId) == address(this),
"Contract doesn't own this NFT"
);
nftCollection.safeTransferFrom(address(this), msg.sender, tokenId);
totalNFTPayouts += 1;
emit NFTPrizeSent(msg.sender, tokenId);
return ("NFT", tokenId);
}
}
}
return ("NONE", 0);
}
function _recordAndEmit(address player, string memory prizeType, uint256 prizeAmount, uint256 entropy, bool freeSpin) internal {
playerSpinHistory[player].push(
PlayerSpin({
timestamp: block.timestamp,
prizeType: prizeType,
prizeAmount: prizeAmount,
freeSpinUsed: freeSpin
})
);
spins[totalSpins] = SpinResult({
player: player,
prizeType: prizeType,
prizeAmount: prizeAmount,
random: entropy,
timestamp: block.timestamp,
wasFreeSpin: freeSpin
});
emit SpinExecuted(player, totalSpins, prizeType, prizeAmount, entropy, freeSpin);
}
function emergencyWithdrawNative(address payable to) external onlyOwner nonReentrant {
require(to != address(0), "Invalid address");
uint256 balance = address(this).balance;
require(balance > 0, "No native balance to withdraw");
to.transfer(balance);
emit EmergencyNativeWithdrawn(to, balance);
}
function emergencyWithdrawERC20(address to) external onlyOwner nonReentrant {
require(to != address(0), "Invalid address");
require(address(erc20Token) != address(0), "ERC20 not set");
uint256 balance = erc20Token.balanceOf(address(this));
require(balance > 0, "No ERC20 balance to withdraw");
erc20Token.transfer(to, balance);
emit EmergencyERC20Withdrawn(to, balance);
}
function emergencyWithdrawNFT(address to) external onlyOwner nonReentrant {
require(to != address(0), "Invalid address");
require(address(nftCollection) != address(0), "NFT collection not set");
require(availableNFTIds.length > 0, "No NFTs to withdraw");
uint256 nftCount = availableNFTIds.length;
for (uint256 i = 0; i < nftCount; i++) {
uint256 tokenId = availableNFTIds[i];
if (nftCollection.ownerOf(tokenId) == address(this)) {
nftCollection.safeTransferFrom(address(this), to, tokenId);
emit NFTPrizeSent(to, tokenId);
}
}
delete availableNFTIds;
emit EmergencyNFTsWithdrawn(to, nftCount);
}
function withdrawNative(address payable to, uint256 amount) external onlyOwner {
require(address(this).balance >= amount, "Insufficient balance");
to.transfer(amount);
}
function withdrawERC20(address to, uint256 amount) external onlyOwner {
require(address(erc20Token) != address(0), "ERC20 not set");
require(erc20Token.balanceOf(address(this)) >= amount, "Insufficient ERC20");
erc20Token.transfer(to, amount);
}
function withdrawNFT(address to, uint256 tokenId) external onlyOwner nonReentrant {
require(to != address(0), "Invalid address");
require(address(nftCollection) != address(0), "NFT collection not set");
bool found = false;
for (uint256 i = 0; i < availableNFTIds.length; i++) {
if (availableNFTIds[i] == tokenId) {
found = true;
availableNFTIds[i] = availableNFTIds[availableNFTIds.length - 1];
availableNFTIds.pop();
break;
}
}
require(nftCollection.ownerOf(tokenId) == address(this), "Contract does not own this NFT");
nftCollection.safeTransferFrom(address(this), to, tokenId);
emit NFTPrizeSent(to, tokenId);
}
function getCompletePlayerHistory(address player) external view returns (PlayerSpin[] memory) {
return playerSpinHistory[player];
}
function getNext3SpinsReward(address player) external view returns (uint256 spinsUntilReward, uint256 nextRewardAmount) {
uint256 playerSpinCount = playerSpins[player];
uint256 nextRewardSpin = ((playerSpinCount / SPINS_INTERVAL_FOR_REWARD) + 1) * SPINS_INTERVAL_FOR_REWARD;
spinsUntilReward = nextRewardSpin - playerSpinCount;
nextRewardAmount = EVERY_3_SPINS_REWARD;
}
function getPlayerSpinHistory(address player) external view returns (PlayerSpin[] memory) {
return playerSpinHistory[player];
}
function getContractBalances()
external
view
returns (uint256 nativeBalance, uint256 erc20Balance, uint256 nftCount)
{
nativeBalance = address(this).balance;
erc20Balance = address(erc20Token) == address(0) ? 0 : erc20Token.balanceOf(address(this));
nftCount = availableNFTIds.length;
}
function getTotalPayoutsByType()
external
view
returns (uint256 nativePayouts, uint256 erc20Payouts, uint256 nftPayouts)
{
nativePayouts = totalNativePayouts;
erc20Payouts = totalERCPayouts;
nftPayouts = totalNFTPayouts;
}
function onERC721Received(
address /*operator*/,
address /*from*/,
uint256 /*tokenId*/,
bytes calldata /*data*/
) external override pure returns (bytes4) {
return this.onERC721Received.selector;
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_erc20","type":"address"},{"internalType":"address","name":"_nft","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spinCount","type":"uint256"}],"name":"AutomaticRewardRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PrizeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyERC20Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"EmergencyNFTsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyNativeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"spinCount","type":"uint256"}],"name":"Every3SpinsReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTPrizeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"NFTsDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativePrizeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"spinId","type":"uint256"},{"indexed":false,"internalType":"string","name":"prizeType","type":"string"},{"indexed":false,"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"random","type":"uint256"},{"indexed":false,"internalType":"bool","name":"wasFreeSpin","type":"bool"}],"name":"SpinExecuted","type":"event"},{"inputs":[],"name":"EVERY_3_SPINS_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPINS_INTERVAL_FOR_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableNFTIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"depositSpecificNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"emergencyWithdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"erc20Token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getCompletePlayerHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"bool","name":"freeSpinUsed","type":"bool"}],"internalType":"struct SatoSlotMachine.PlayerSpin[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalances","outputs":[{"internalType":"uint256","name":"nativeBalance","type":"uint256"},{"internalType":"uint256","name":"erc20Balance","type":"uint256"},{"internalType":"uint256","name":"nftCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getNext3SpinsReward","outputs":[{"internalType":"uint256","name":"spinsUntilReward","type":"uint256"},{"internalType":"uint256","name":"nextRewardAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerSpinHistory","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"bool","name":"freeSpinUsed","type":"bool"}],"internalType":"struct SatoSlotMachine.PlayerSpin[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPayoutsByType","outputs":[{"internalType":"uint256","name":"nativePayouts","type":"uint256"},{"internalType":"uint256","name":"erc20Payouts","type":"uint256"},{"internalType":"uint256","name":"nftPayouts","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftCollection","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerSpinHistory","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"bool","name":"freeSpinUsed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerSpins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"}],"name":"setNFTCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setSpinCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spin","outputs":[{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"spinCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"spins","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"string","name":"prizeType","type":"string"},{"internalType":"uint256","name":"prizeAmount","type":"uint256"},{"internalType":"uint256","name":"random","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"wasFreeSpin","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalERCPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNativePayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSpins","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526703782dace9d900006002556040518061016001604052805f68ffffffffffffffffff168152602001670853a0d2313c000068ffffffffffffffffff168152602001670c7d713b49da000068ffffffffffffffffff1681526020016710a741a46278000068ffffffffffffffffff1681526020016718fae27693b4000068ffffffffffffffffff1681526020016729a2241af62c000068ffffffffffffffffff1681526020016753444835ec58000068ffffffffffffffffff16815260200167a688906bd8b0000068ffffffffffffffffff1681526020016801a055690d9db8000068ffffffffffffffffff16815260200168068155a43676e0000068ffffffffffffffffff168152602001682086ac35105260000068ffffffffffffffffff16815250600f90600b610138929190610619565b5060405180610160016040528062072bf062ffffff1681526020016202981062ffffff1681526020016201d4c062ffffff1681526020016201388062ffffff16815260200161ea6062ffffff168152602001619c4062ffffff16815260200161753062ffffff1681526020016132c862ffffff168152602001611b5862ffffff16815260200161138862ffffff16815260200161138862ffffff16815250601090600b6101e6929190610671565b506040518061016001604052805f6affffffffffffffffffffff16815260200169014542ba12a337c000006affffffffffffffffffffff1681526020016901e7e4171bf4d3a000006affffffffffffffffffffff16815260200169028a857425466f8000006affffffffffffffffffffff1681526020016903cfc82e37e9a74000006affffffffffffffffffffff16815260200169065a4da25d3016c000006affffffffffffffffffffff168152602001690cb49b44ba602d8000006affffffffffffffffffffff168152602001691969368974c05b0000006affffffffffffffffffffff168152602001693f870857a3e0e38000006affffffffffffffffffffff16815260200169fe1c215e8f838e0000006affffffffffffffffffffff1681526020016a04f68ca6d8cd91c60000006affffffffffffffffffffff16815250601190600b61033792919061071d565b506040518061016001604052806206b6c062ffffff16815260200162030d4062ffffff1681526020016201d4c062ffffff1681526020016201388062ffffff16815260200161ea6062ffffff168152602001619c4062ffffff16815260200161753062ffffff1681526020016132c862ffffff168152602001611b5862ffffff16815260200161138862ffffff16815260200161138862ffffff16815250601290600b6103e5929190610671565b506040518060400160405280620927c062ffffff16815260200162061a8062ffffff16815250601390600261041b929190610777565b50348015610427575f5ffd5b50604051615f13380380615f138339818101604052810190610449919061089c565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104ba575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104b191906108e9565b60405180910390fd5b6104c98161055860201b60201c565b506001808190555081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610902565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255905f5260205f20908101928215610660579160200282015b8281111561065f578251829068ffffffffffffffffff16905591602001919060010190610637565b5b50905061066d9190610823565b5090565b828054828255905f5260205f209060070160089004810192821561070c579160200282015f5b838211156106da57835183826101000a81548163ffffffff021916908362ffffff1602179055509260200192600401602081600301049283019260010302610697565b801561070a5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026106da565b505b5090506107199190610823565b5090565b828054828255905f5260205f20908101928215610766579160200282015b8281111561076557825182906affffffffffffffffffffff1690559160200191906001019061073b565b5b5090506107739190610823565b5090565b828054828255905f5260205f2090600701600890048101928215610812579160200282015f5b838211156107e057835183826101000a81548163ffffffff021916908362ffffff160217905550926020019260040160208160030104928301926001030261079d565b80156108105782816101000a81549063ffffffff02191690556004016020816003010492830192600103026107e0565b505b50905061081f9190610823565b5090565b5b8082111561083a575f815f905550600101610824565b5090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61086b82610842565b9050919050565b61087b81610861565b8114610885575f5ffd5b50565b5f8151905061089681610872565b92915050565b5f5f604083850312156108b2576108b161083e565b5b5f6108bf85828601610888565b92505060206108d085828601610888565b9150509250929050565b6108e381610861565b82525050565b5f6020820190506108fc5f8301846108da565b92915050565b6156048061090f5f395ff3fe608060405260043610610212575f3560e01c806386593a9d11610117578063c10bba9e1161009f578063f0b31f0e1161006e578063f0b31f0e14610787578063f2fde38b146107c3578063fa3e24cf146107eb578063fd3c55f414610827578063ffd2a7d31461085157610219565b8063c10bba9e146106d8578063de56248714610714578063ee0610181461073c578063f0acd7d51461076857610219565b8063969a9b05116100e6578063969a9b051461060c578063a1db978214610636578063afa1c0191461065e578063b160ec8314610686578063b90f7cbb146106b057610219565b806386593a9d146105645780638a13eea71461058e5780638da5cb5b146105b8578063901b2036146105e257610219565b80634089b1701161019a5780636088e93a116101695780636088e93a146104915780636588103b146104b957806370d2d3d7146104e3578063715018a61461050d5780638315c2641461052357610219565b80634089b170146103d857806340c442de1461040257806342e998811461042a578063518a88e71461045257610219565b8063252f4d81116101e1578063252f4d81146102e55780632b4fd779146103215780632c928e1e146103495780632f765eb114610386578063384763cc146103b057610219565b806307b18bde1461021d578063150b7a02146102455780631f161ab4146102815780631fc9cee8146102a957610219565b3661021957005b5f5ffd5b348015610228575f5ffd5b50610243600480360381019061023e9190613dd5565b61087d565b005b348015610250575f5ffd5b5061026b60048036038101906102669190613eaf565b610910565b6040516102789190613f6d565b60405180910390f35b34801561028c575f5ffd5b506102a760048036038101906102a29190613f86565b610924565b005b3480156102b4575f5ffd5b506102cf60048036038101906102ca9190613f86565b610cc9565b6040516102dc9190613fc0565b60405180910390f35b3480156102f0575f5ffd5b5061030b60048036038101906103069190613f86565b610cde565b6040516103189190613fc0565b60405180910390f35b34801561032c575f5ffd5b5061034760048036038101906103429190613f86565b610cf3565b005b348015610354575f5ffd5b5061036f600480360381019061036a9190613f86565b610d3e565b60405161037d929190613fd9565b60405180910390f35b348015610391575f5ffd5b5061039a610dca565b6040516103a79190613fc0565b60405180910390f35b3480156103bb575f5ffd5b506103d660048036038101906103d19190614055565b610dd0565b005b3480156103e3575f5ffd5b506103ec611002565b6040516103f99190613fc0565b60405180910390f35b34801561040d575f5ffd5b5061042860048036038101906104239190613f86565b611008565b005b348015610435575f5ffd5b50610450600480360381019061044b91906140a0565b6112ea565b005b34801561045d575f5ffd5b50610478600480360381019061047391906140cb565b61144c565b6040516104889493929190614193565b60405180910390f35b34801561049c575f5ffd5b506104b760048036038101906104b291906140cb565b611524565b005b3480156104c4575f5ffd5b506104cd6118e0565b6040516104da9190614238565b60405180910390f35b3480156104ee575f5ffd5b506104f7611905565b6040516105049190613fc0565b60405180910390f35b348015610518575f5ffd5b5061052161190a565b005b34801561052e575f5ffd5b5061054960048036038101906105449190614251565b61191d565b60405161055b9695949392919061428b565b60405180910390f35b34801561056f575f5ffd5b50610578611a06565b6040516105859190613fc0565b60405180910390f35b348015610599575f5ffd5b506105a2611a0c565b6040516105af9190614311565b60405180910390f35b3480156105c3575f5ffd5b506105cc611a31565b6040516105d9919061432a565b60405180910390f35b3480156105ed575f5ffd5b506105f6611a58565b6040516106039190613fc0565b60405180910390f35b348015610617575f5ffd5b50610620611a5e565b60405161062d9190613fc0565b60405180910390f35b348015610641575f5ffd5b5061065c600480360381019061065791906140cb565b611a64565b005b348015610669575f5ffd5b50610684600480360381019061067f9190614251565b611c77565b005b348015610691575f5ffd5b5061069a611ccb565b6040516106a79190613fc0565b60405180910390f35b3480156106bb575f5ffd5b506106d660048036038101906106d19190614251565b611cd1565b005b3480156106e3575f5ffd5b506106fe60048036038101906106f99190614251565b611f1d565b60405161070b9190613fc0565b60405180910390f35b34801561071f575f5ffd5b5061073a60048036038101906107359190613f86565b611f3d565b005b348015610747575f5ffd5b50610750611f88565b60405161075f93929190614343565b60405180910390f35b610770611f9f565b60405161077e929190614378565b60405180910390f35b348015610792575f5ffd5b506107ad60048036038101906107a89190613f86565b61216b565b6040516107ba9190614527565b60405180910390f35b3480156107ce575f5ffd5b506107e960048036038101906107e49190613f86565b6122c1565b005b3480156107f6575f5ffd5b50610811600480360381019061080c9190613f86565b612345565b60405161081e9190614527565b60405180910390f35b348015610832575f5ffd5b5061083b61249b565b6040516108489190613fc0565b60405180910390f35b34801561085c575f5ffd5b506108656124a8565b60405161087493929190614343565b60405180910390f35b6108856125b1565b804710156108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90614591565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561090b573d5f5f3e3d5ffd5b505050565b5f63150b7a0260e01b905095945050505050565b61092c6125b1565b610934612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610999906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2890614661565b60405180910390fd5b5f600c8054905011610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f906146c9565b60405180910390fd5b5f600c8054905090505f5f90505b81811015610c61575f600c8281548110610aa357610aa26146e7565b5b905f5260205f20015490503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b1f9190613fc0565b602060405180830381865afa158015610b3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5e9190614728565b73ffffffffffffffffffffffffffffffffffffffff1603610c5357600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3086846040518463ffffffff1660e01b8152600401610bd793929190614753565b5f604051808303815f87803b158015610bee575f5ffd5b505af1158015610c00573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051610c4a9190613fc0565b60405180910390a25b508080600101915050610a86565b50600c5f610c6f9190613d07565b8173ffffffffffffffffffffffffffffffffffffffff167f33791e8b42f2588755f7a687e5c7b194580157f8f23db8602b278c4ebecf2a7a82604051610cb59190613fc0565b60405180910390a250610cc6612687565b50565b6008602052805f5260405f205f915090505481565b6009602052805f5260405f205f915090505481565b610cfb6125b1565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60036001600384610d9391906147e2565b610d9d9190614812565b610da79190614845565b90508181610db59190614886565b9350683635c9adc5dea0000092505050915091565b60055481565b610dd86125b1565b5f8282905011610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614903565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614661565b60405180910390fd5b5f5f90505b82829050811015610fac57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330868686818110610f0e57610f0d6146e7565b5b905060200201356040518463ffffffff1660e01b8152600401610f3393929190614753565b5f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050600c838383818110610f7557610f746146e7565b5b90506020020135908060018154018082558091505060019003905f5260205f20015f90919091909150558080600101915050610eb1565b503373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f83839050604051610ff69190613fc0565b60405180910390a25050565b60045481565b6110106125b1565b611018612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061496b565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611170919061432a565b602060405180830381865afa15801561118b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111af919061499d565b90505f81116111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90614a12565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161124f929190614a30565b6020604051808303815f875af115801561126b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128f9190614a81565b508173ffffffffffffffffffffffffffffffffffffffff167f92e39f7df2c623ce2e69bbf1af49ba0fb2749b5855aab707652065d349118ccf826040516112d69190613fc0565b60405180910390a2506112e7612687565b50565b6112f26125b1565b6112fa612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906145f9565b60405180910390fd5b5f4790505f81116113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614af6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156113f1573d5f5f3e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff167f667063edc301be4bbbe0123ca445e0ded1511a46a4cba624ae39dfcda8eddbc1826040516114389190613fc0565b60405180910390a250611449612687565b50565b600d602052815f5260405f208181548110611465575f80fd5b905f5260205f2090600402015f9150915050805f01549080600101805461148b90614b41565b80601f01602080910402602001604051908101604052809291908181526020018280546114b790614b41565b80156115025780601f106114d957610100808354040283529160200191611502565b820191905f5260205f20905b8154815290600101906020018083116114e557829003601f168201915b505050505090806002015490806003015f9054906101000a900460ff16905084565b61152c6125b1565b611534612638565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890614661565b60405180910390fd5b5f5f90505f5f90505b600c805490508110156116f35782600c828154811061165c5761165b6146e7565b5b905f5260205f200154036116e65760019150600c6001600c805490506116829190614886565b81548110611693576116926146e7565b5b905f5260205f200154600c82815481106116b0576116af6146e7565b5b905f5260205f200181905550600c8054806116ce576116cd614b71565b5b600190038181905f5260205f20015f905590556116f3565b808060010191505061163a565b503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016117659190613fc0565b602060405180830381865afa158015611780573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a49190614728565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614be8565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3085856040518463ffffffff1660e01b815260040161185893929190614753565b5f604051808303815f87803b15801561186f575f5ffd5b505af1158015611881573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b836040516118cb9190613fc0565b60405180910390a2506118dc612687565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600381565b6119126125b1565b61191b5f612690565b565b600e602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461196190614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461198d90614b41565b80156119d85780601f106119af576101008083540402835291602001916119d8565b820191905f5260205f20905b8154815290600101906020018083116119bb57829003601f168201915b505050505090806002015490806003015490806004015490806005015f9054906101000a900460ff16905086565b60065481565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60025481565b611a6c6125b1565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061496b565b60405180910390fd5b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b56919061432a565b602060405180830381865afa158015611b71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b95919061499d565b1015611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90614c50565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c32929190614a30565b6020604051808303815f875af1158015611c4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c729190614a81565b505050565b611c7f6125b1565b5f8111611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890614cb8565b60405180910390fd5b8060028190555050565b60075481565b611cd96125b1565b5f8111611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290614d20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614661565b60405180910390fd5b5f5f90505f5f90505b82811015611e8857600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611e1993929190614753565b5f604051808303815f87803b158015611e30575f5ffd5b505af1925050508015611e41575060015b15611e7b57600c81908060018154018082558091505060019003905f5260205f20015f90919091909150558180611e7790614d3e565b9250505b8080600101915050611db3565b505f8111611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614dcf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f82604051611f119190613fc0565b60405180910390a25050565b600c8181548110611f2c575f80fd5b905f5260205f20015f915090505481565b611f456125b1565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f600554925060065491506007549050909192565b60605f611faa612638565b6002543414611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614e37565b60405180910390fd5b5f4233446003546040516020016120089493929190614eba565b604051602081830303815290604052805190602001205f1c90505f612710826120319190614f07565b905060035f81548092919061204590614d3e565b919050555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061209790614d3e565b91905055506120a533612751565b6116128110156120fe576040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525093505f92506120f7338585855f612e00565b505061215f565b611b46811161211d576121108261301f565b809450819550505061214f565b61207b811161213c5761212f826133b5565b809450819550505061214e565b61214582613848565b80945081955050505b5b61215c338585855f612e00565b50505b612167612687565b9091565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156122b6578382905f5260205f2090600402016040518060800160405290815f820154815260200160018201805461220390614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461222f90614b41565b801561227a5780601f106122515761010080835404028352916020019161227a565b820191905f5260205f20905b81548152906001019060200180831161225d57829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906121c9565b505050509050919050565b6122c96125b1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612339575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612330919061432a565b60405180910390fd5b61234281612690565b50565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612490578382905f5260205f2090600402016040518060800160405290815f82015481526020016001820180546123dd90614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461240990614b41565b80156124545780601f1061242b57610100808354040283529160200191612454565b820191905f5260205f20905b81548152906001019060200180831161243757829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906123a3565b505050509050919050565b683635c9adc5dea0000081565b5f5f5f4792505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a057600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161255c919061432a565b602060405180830381865afa158015612577573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259b919061499d565b6125a2565b5f5b9150600c805490509050909192565b6125b9613c23565b73ffffffffffffffffffffffffffffffffffffffff166125d7611a31565b73ffffffffffffffffffffffffffffffffffffffff1614612636576125fa613c23565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161262d919061432a565b60405180910390fd5b565b60026001540361267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490614f81565b60405180910390fd5b6002600181905550565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6003826127a09190614f07565b1480156127ac57505f81115b15612dfc575f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156128af5750683635c9adc5dea00000600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286d919061432a565b602060405180830381865afa158015612888573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ac919061499d565b10155b15612dfb575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84683635c9adc5dea000006040518363ffffffff1660e01b815260040161291a929190614a30565b6020604051808303815f875af1158015612936573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295a9190614a81565b90508015612df957683635c9adc5dea0000060065f82825461297c9190614812565b92505081905550683635c9adc5dea0000060045f82825461299d9190614812565b92505081905550683635c9adc5dea0000060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129f99190614812565b92505081905550600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180608001604052804281526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020015f1515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ae19190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020014285604051602001612b91929190615286565b604051602081830303815290604052805190602001205f1c81526020014281526020015f1515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612c269190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b4683635c9adc5dea00000604051612cb69190613fc0565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167fb41e1687f8cee7f3272379325c6cdd7343cad8bb7c4d437184660a7512411c61683635c9adc5dea0000084604051612d0f929190613fd9565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167f142b19bc5c09690e61e7772c7972afe162e35d0432fc85b31dc6827fe1915bab683635c9adc5dea0000084604051612d68929190613fd9565b60405180910390a26003548373ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f6997683635c9adc5dea000004287604051602001612dc8929190615286565b604051602081830303815290604052805190602001205f1c5f604051612df093929190615306565b60405180910390a35b505b5b5050565b600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405280428152602001868152602001858152602001831515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ea39190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001428152602001821515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612f809190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050506003548573ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f699786868686604051613010949392919061534e565b60405180910390a35050505050565b60605f5f620f42408460405160200161303891906153e2565b604051602081830303815290604052805190602001205f1c61305a9190614f07565b90505f5f90505f5f90505b6010805490508110156133705760108181548110613086576130856146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826130bb9190614812565b915081831015613363575f600f82815481106130da576130d96146e7565b5b905f5260205f2001540361312c575f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090945094505050506133b0565b5f600f8281548110613141576131406146e7565b5b905f5260205f200154905080471061331e575f3373ffffffffffffffffffffffffffffffffffffffff168260405161317890615434565b5f6040518083038185875af1925050503d805f81146131b2576040519150601f19603f3d011682016040523d82523d5f602084013e6131b7565b606091505b5050905080156132d8578160045f8282546131d29190614812565b925050819055508160055f8282546131ea9190614812565b925050819055508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323d9190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f22638f6df852ff9ebbf1ed678c817164d21ece093e03d1395be093bede06959a8360405161328a9190613fc0565b60405180910390a2816040518060400160405280600681526020017f4e41544956450000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509095509550505050506133b0565b8080600101915050613065565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f4240846040516020016133ce919061546a565b604051602081830303815290604052805190602001205f1c6133f09190614f07565b90505f5f90505f5f90505b601280549050811015613803576012818154811061341c5761341b6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826134519190614812565b9150818310156137f6575f601182815481106134705761346f6146e7565b5b905f5260205f200154036134c2575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613843565b5f601182815481106134d7576134d66146e7565b5b905f5260205f20015490505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361357b575f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d6919061432a565b602060405180830381865afa1580156135f1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613615919061499d565b106137b1575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613677929190614a30565b6020604051808303815f875af1158015613693573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b79190614a81565b9050801561376b578160065f8282546136d09190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b48360405161371d9190613fc0565b60405180910390a2816040518060400160405280600581526020017f455243323000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80806001019150506133fb565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f42408460405160200161386191906154d9565b604051602081830303815290604052805190602001205f1c6138839190614f07565b90505f5f90505f5f90505b601380549050811015613bde57601381815481106138af576138ae6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826138e49190614812565b915081831015613bd1575f8103613939575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f600c8054905003613989575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f613992613c2a565b90503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401613a059190613fc0565b602060405180830381865afa158015613a20573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a449190614728565b73ffffffffffffffffffffffffffffffffffffffff1614613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190615548565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401613af893929190614753565b5f604051808303815f87803b158015613b0f575f5ffd5b505af1158015613b21573d5f5f3e3d5ffd5b50505050600160075f828254613b379190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051613b849190613fc0565b60405180910390a2806040518060400160405280600381526020017f4e46540000000000000000000000000000000000000000000000000000000000815250909550955050505050613c1e565b808060010191505061388e565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b5f33905090565b5f5f600c8054905011613c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c69906155b0565b60405180910390fd5b600c5f81548110613c8657613c856146e7565b5b905f5260205f2001549050600c6001600c80549050613ca59190614886565b81548110613cb657613cb56146e7565b5b905f5260205f200154600c5f81548110613cd357613cd26146e7565b5b905f5260205f200181905550600c805480613cf157613cf0614b71565b5b600190038181905f5260205f20015f9055905590565b5080545f8255905f5260205f2090810190613d229190613d25565b50565b5b80821115613d3c575f815f905550600101613d26565b5090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d7182613d48565b9050919050565b613d8181613d67565b8114613d8b575f5ffd5b50565b5f81359050613d9c81613d78565b92915050565b5f819050919050565b613db481613da2565b8114613dbe575f5ffd5b50565b5f81359050613dcf81613dab565b92915050565b5f5f60408385031215613deb57613dea613d40565b5b5f613df885828601613d8e565b9250506020613e0985828601613dc1565b9150509250929050565b5f613e1d82613d48565b9050919050565b613e2d81613e13565b8114613e37575f5ffd5b50565b5f81359050613e4881613e24565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613e6f57613e6e613e4e565b5b8235905067ffffffffffffffff811115613e8c57613e8b613e52565b5b602083019150836001820283011115613ea857613ea7613e56565b5b9250929050565b5f5f5f5f5f60808688031215613ec857613ec7613d40565b5b5f613ed588828901613e3a565b9550506020613ee688828901613e3a565b9450506040613ef788828901613dc1565b935050606086013567ffffffffffffffff811115613f1857613f17613d44565b5b613f2488828901613e5a565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f6781613f33565b82525050565b5f602082019050613f805f830184613f5e565b92915050565b5f60208284031215613f9b57613f9a613d40565b5b5f613fa884828501613e3a565b91505092915050565b613fba81613da2565b82525050565b5f602082019050613fd35f830184613fb1565b92915050565b5f604082019050613fec5f830185613fb1565b613ff96020830184613fb1565b9392505050565b5f5f83601f84011261401557614014613e4e565b5b8235905067ffffffffffffffff81111561403257614031613e52565b5b60208301915083602082028301111561404e5761404d613e56565b5b9250929050565b5f5f6020838503121561406b5761406a613d40565b5b5f83013567ffffffffffffffff81111561408857614087613d44565b5b61409485828601614000565b92509250509250929050565b5f602082840312156140b5576140b4613d40565b5b5f6140c284828501613d8e565b91505092915050565b5f5f604083850312156140e1576140e0613d40565b5b5f6140ee85828601613e3a565b92505060206140ff85828601613dc1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61414b82614109565b6141558185614113565b9350614165818560208601614123565b61416e81614131565b840191505092915050565b5f8115159050919050565b61418d81614179565b82525050565b5f6080820190506141a65f830187613fb1565b81810360208301526141b88186614141565b90506141c76040830185613fb1565b6141d46060830184614184565b95945050505050565b5f819050919050565b5f6142006141fb6141f684613d48565b6141dd565b613d48565b9050919050565b5f614211826141e6565b9050919050565b5f61422282614207565b9050919050565b61423281614218565b82525050565b5f60208201905061424b5f830184614229565b92915050565b5f6020828403121561426657614265613d40565b5b5f61427384828501613dc1565b91505092915050565b61428581613e13565b82525050565b5f60c08201905061429e5f83018961427c565b81810360208301526142b08188614141565b90506142bf6040830187613fb1565b6142cc6060830186613fb1565b6142d96080830185613fb1565b6142e660a0830184614184565b979650505050505050565b5f6142fb82614207565b9050919050565b61430b816142f1565b82525050565b5f6020820190506143245f830184614302565b92915050565b5f60208201905061433d5f83018461427c565b92915050565b5f6060820190506143565f830186613fb1565b6143636020830185613fb1565b6143706040830184613fb1565b949350505050565b5f6040820190508181035f8301526143908185614141565b905061439f6020830184613fb1565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143d881613da2565b82525050565b5f82825260208201905092915050565b5f6143f882614109565b61440281856143de565b9350614412818560208601614123565b61441b81614131565b840191505092915050565b61442f81614179565b82525050565b5f608083015f83015161444a5f8601826143cf565b506020830151848203602086015261446282826143ee565b915050604083015161447760408601826143cf565b50606083015161448a6060860182614426565b508091505092915050565b5f6144a08383614435565b905092915050565b5f602082019050919050565b5f6144be826143a6565b6144c881856143b0565b9350836020820285016144da856143c0565b805f5b8581101561451557848403895281516144f68582614495565b9450614501836144a8565b925060208a019950506001810190506144dd565b50829750879550505050505092915050565b5f6020820190508181035f83015261453f81846144b4565b905092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61457b601483614113565b915061458682614547565b602082019050919050565b5f6020820190508181035f8301526145a88161456f565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6145e3600f83614113565b91506145ee826145af565b602082019050919050565b5f6020820190508181035f830152614610816145d7565b9050919050565b7f4e465420636f6c6c656374696f6e206e6f7420736574000000000000000000005f82015250565b5f61464b601683614113565b915061465682614617565b602082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b7f4e6f204e46547320746f207769746864726177000000000000000000000000005f82015250565b5f6146b3601383614113565b91506146be8261467f565b602082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061472281613e24565b92915050565b5f6020828403121561473d5761473c613d40565b5b5f61474a84828501614714565b91505092915050565b5f6060820190506147665f83018661427c565b614773602083018561427c565b6147806040830184613fb1565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147ec82613da2565b91506147f783613da2565b92508261480757614806614788565b5b828204905092915050565b5f61481c82613da2565b915061482783613da2565b925082820190508082111561483f5761483e6147b5565b5b92915050565b5f61484f82613da2565b915061485a83613da2565b925082820261486881613da2565b9150828204841483151761487f5761487e6147b5565b5b5092915050565b5f61489082613da2565b915061489b83613da2565b92508282039050818111156148b3576148b26147b5565b5b92915050565b7f4e6f20746f6b656e204944732070726f766964656400000000000000000000005f82015250565b5f6148ed601583614113565b91506148f8826148b9565b602082019050919050565b5f6020820190508181035f83015261491a816148e1565b9050919050565b7f4552433230206e6f7420736574000000000000000000000000000000000000005f82015250565b5f614955600d83614113565b915061496082614921565b602082019050919050565b5f6020820190508181035f83015261498281614949565b9050919050565b5f8151905061499781613dab565b92915050565b5f602082840312156149b2576149b1613d40565b5b5f6149bf84828501614989565b91505092915050565b7f4e6f2045524332302062616c616e636520746f207769746864726177000000005f82015250565b5f6149fc601c83614113565b9150614a07826149c8565b602082019050919050565b5f6020820190508181035f830152614a29816149f0565b9050919050565b5f604082019050614a435f83018561427c565b614a506020830184613fb1565b9392505050565b614a6081614179565b8114614a6a575f5ffd5b50565b5f81519050614a7b81614a57565b92915050565b5f60208284031215614a9657614a95613d40565b5b5f614aa384828501614a6d565b91505092915050565b7f4e6f206e61746976652062616c616e636520746f2077697468647261770000005f82015250565b5f614ae0601d83614113565b9150614aeb82614aac565b602082019050919050565b5f6020820190508181035f830152614b0d81614ad4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614b5857607f821691505b602082108103614b6b57614b6a614b14565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f436f6e747261637420646f6573206e6f74206f776e2074686973204e465400005f82015250565b5f614bd2601e83614113565b9150614bdd82614b9e565b602082019050919050565b5f6020820190508181035f830152614bff81614bc6565b9050919050565b7f496e73756666696369656e7420455243323000000000000000000000000000005f82015250565b5f614c3a601283614113565b9150614c4582614c06565b602082019050919050565b5f6020820190508181035f830152614c6781614c2e565b9050919050565b7f496e76616c696420636f737400000000000000000000000000000000000000005f82015250565b5f614ca2600c83614113565b9150614cad82614c6e565b602082019050919050565b5f6020820190508181035f830152614ccf81614c96565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614d0a601d83614113565b9150614d1582614cd6565b602082019050919050565b5f6020820190508181035f830152614d3781614cfe565b9050919050565b5f614d4882613da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d7a57614d796147b5565b5b600182019050919050565b7f4e6f204e4654732077657265206465706f7369746564000000000000000000005f82015250565b5f614db9601683614113565b9150614dc482614d85565b602082019050919050565b5f6020820190508181035f830152614de681614dad565b9050919050565b7f496e636f7272656374207370696e20636f7374000000000000000000000000005f82015250565b5f614e21601383614113565b9150614e2c82614ded565b602082019050919050565b5f6020820190508181035f830152614e4e81614e15565b9050919050565b5f819050919050565b614e6f614e6a82613da2565b614e55565b82525050565b5f8160601b9050919050565b5f614e8b82614e75565b9050919050565b5f614e9c82614e81565b9050919050565b614eb4614eaf82613e13565b614e92565b82525050565b5f614ec58287614e5e565b602082019150614ed58286614ea3565b601482019150614ee58285614e5e565b602082019150614ef58284614e5e565b60208201915081905095945050505050565b5f614f1182613da2565b9150614f1c83613da2565b925082614f2c57614f2b614788565b5b828206905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614f6b601f83614113565b9150614f7682614f37565b602082019050919050565b5f6020820190508181035f830152614f9881614f5f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026150287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614fed565b6150328683614fed565b95508019841693508086168417925050509392505050565b5f61506461505f61505a84613da2565b6141dd565b613da2565b9050919050565b5f819050919050565b61507d8361504a565b6150916150898261506b565b848454614ff9565b825550505050565b5f5f905090565b6150a8615099565b6150b3818484615074565b505050565b5b818110156150d6576150cb5f826150a0565b6001810190506150b9565b5050565b601f82111561511b576150ec81614fcc565b6150f584614fde565b81016020851015615104578190505b61511861511085614fde565b8301826150b8565b50505b505050565b5f82821c905092915050565b5f61513b5f1984600802615120565b1980831691505092915050565b5f615153838361512c565b9150826002028217905092915050565b61516c82614109565b67ffffffffffffffff81111561518557615184614f9f565b5b61518f8254614b41565b61519a8282856150da565b5f60209050601f8311600181146151cb575f84156151b9578287015190505b6151c38582615148565b86555061522a565b601f1984166151d986614fcc565b5f5b82811015615200578489015182556001820191506020850194506020810190506151db565b8683101561521d5784890151615219601f89168261512c565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b7f4155544f5f5245574152440000000000000000000000000000000000000000005f82015250565b5f615270600b83615232565b915061527b8261523c565b600b82019050919050565b5f6152918285614e5e565b6020820191506152a18284614ea3565b6014820191506152b082615264565b91508190509392505050565b7f45524332300000000000000000000000000000000000000000000000000000005f82015250565b5f6152f0600583614113565b91506152fb826152bc565b602082019050919050565b5f6080820190508181035f83015261531d816152e4565b905061532c6020830186613fb1565b6153396040830185613fb1565b6153466060830184614184565b949350505050565b5f6080820190508181035f8301526153668187614141565b90506153756020830186613fb1565b6153826040830185613fb1565b61538f6060830184614184565b95945050505050565b7f4e415449564500000000000000000000000000000000000000000000000000005f82015250565b5f6153cc600683615232565b91506153d782615398565b600682019050919050565b5f6153ed8284614e5e565b6020820191506153fc826153c0565b915081905092915050565b5f81905092915050565b50565b5f61541f5f83615407565b915061542a82615411565b5f82019050919050565b5f61543e82615414565b9150819050919050565b5f615454600583615232565b915061545f826152bc565b600582019050919050565b5f6154758284614e5e565b60208201915061548482615448565b915081905092915050565b7f4e465400000000000000000000000000000000000000000000000000000000005f82015250565b5f6154c3600383615232565b91506154ce8261548f565b600382019050919050565b5f6154e48284614e5e565b6020820191506154f3826154b7565b915081905092915050565b7f436f6e747261637420646f65736e2774206f776e2074686973204e46540000005f82015250565b5f615532601d83614113565b915061553d826154fe565b602082019050919050565b5f6020820190508181035f83015261555f81615526565b9050919050565b7f4e6f204e46547320617661696c61626c650000000000000000000000000000005f82015250565b5f61559a601183614113565b91506155a582615566565b602082019050919050565b5f6020820190508181035f8301526155c78161558e565b905091905056fea26469706673582212205ec08efc6d4016e44868447e6dc31ab159fdb7f6586c02246e678c415bc17a5c64736f6c634300081e0033000000000000000000000000bbbe30b1259a27e016a957e46fe182089330bf990000000000000000000000002d04e5ca7f73debb68b21b3ebe79e644e2479b29
Deployed Bytecode
0x608060405260043610610212575f3560e01c806386593a9d11610117578063c10bba9e1161009f578063f0b31f0e1161006e578063f0b31f0e14610787578063f2fde38b146107c3578063fa3e24cf146107eb578063fd3c55f414610827578063ffd2a7d31461085157610219565b8063c10bba9e146106d8578063de56248714610714578063ee0610181461073c578063f0acd7d51461076857610219565b8063969a9b05116100e6578063969a9b051461060c578063a1db978214610636578063afa1c0191461065e578063b160ec8314610686578063b90f7cbb146106b057610219565b806386593a9d146105645780638a13eea71461058e5780638da5cb5b146105b8578063901b2036146105e257610219565b80634089b1701161019a5780636088e93a116101695780636088e93a146104915780636588103b146104b957806370d2d3d7146104e3578063715018a61461050d5780638315c2641461052357610219565b80634089b170146103d857806340c442de1461040257806342e998811461042a578063518a88e71461045257610219565b8063252f4d81116101e1578063252f4d81146102e55780632b4fd779146103215780632c928e1e146103495780632f765eb114610386578063384763cc146103b057610219565b806307b18bde1461021d578063150b7a02146102455780631f161ab4146102815780631fc9cee8146102a957610219565b3661021957005b5f5ffd5b348015610228575f5ffd5b50610243600480360381019061023e9190613dd5565b61087d565b005b348015610250575f5ffd5b5061026b60048036038101906102669190613eaf565b610910565b6040516102789190613f6d565b60405180910390f35b34801561028c575f5ffd5b506102a760048036038101906102a29190613f86565b610924565b005b3480156102b4575f5ffd5b506102cf60048036038101906102ca9190613f86565b610cc9565b6040516102dc9190613fc0565b60405180910390f35b3480156102f0575f5ffd5b5061030b60048036038101906103069190613f86565b610cde565b6040516103189190613fc0565b60405180910390f35b34801561032c575f5ffd5b5061034760048036038101906103429190613f86565b610cf3565b005b348015610354575f5ffd5b5061036f600480360381019061036a9190613f86565b610d3e565b60405161037d929190613fd9565b60405180910390f35b348015610391575f5ffd5b5061039a610dca565b6040516103a79190613fc0565b60405180910390f35b3480156103bb575f5ffd5b506103d660048036038101906103d19190614055565b610dd0565b005b3480156103e3575f5ffd5b506103ec611002565b6040516103f99190613fc0565b60405180910390f35b34801561040d575f5ffd5b5061042860048036038101906104239190613f86565b611008565b005b348015610435575f5ffd5b50610450600480360381019061044b91906140a0565b6112ea565b005b34801561045d575f5ffd5b50610478600480360381019061047391906140cb565b61144c565b6040516104889493929190614193565b60405180910390f35b34801561049c575f5ffd5b506104b760048036038101906104b291906140cb565b611524565b005b3480156104c4575f5ffd5b506104cd6118e0565b6040516104da9190614238565b60405180910390f35b3480156104ee575f5ffd5b506104f7611905565b6040516105049190613fc0565b60405180910390f35b348015610518575f5ffd5b5061052161190a565b005b34801561052e575f5ffd5b5061054960048036038101906105449190614251565b61191d565b60405161055b9695949392919061428b565b60405180910390f35b34801561056f575f5ffd5b50610578611a06565b6040516105859190613fc0565b60405180910390f35b348015610599575f5ffd5b506105a2611a0c565b6040516105af9190614311565b60405180910390f35b3480156105c3575f5ffd5b506105cc611a31565b6040516105d9919061432a565b60405180910390f35b3480156105ed575f5ffd5b506105f6611a58565b6040516106039190613fc0565b60405180910390f35b348015610617575f5ffd5b50610620611a5e565b60405161062d9190613fc0565b60405180910390f35b348015610641575f5ffd5b5061065c600480360381019061065791906140cb565b611a64565b005b348015610669575f5ffd5b50610684600480360381019061067f9190614251565b611c77565b005b348015610691575f5ffd5b5061069a611ccb565b6040516106a79190613fc0565b60405180910390f35b3480156106bb575f5ffd5b506106d660048036038101906106d19190614251565b611cd1565b005b3480156106e3575f5ffd5b506106fe60048036038101906106f99190614251565b611f1d565b60405161070b9190613fc0565b60405180910390f35b34801561071f575f5ffd5b5061073a60048036038101906107359190613f86565b611f3d565b005b348015610747575f5ffd5b50610750611f88565b60405161075f93929190614343565b60405180910390f35b610770611f9f565b60405161077e929190614378565b60405180910390f35b348015610792575f5ffd5b506107ad60048036038101906107a89190613f86565b61216b565b6040516107ba9190614527565b60405180910390f35b3480156107ce575f5ffd5b506107e960048036038101906107e49190613f86565b6122c1565b005b3480156107f6575f5ffd5b50610811600480360381019061080c9190613f86565b612345565b60405161081e9190614527565b60405180910390f35b348015610832575f5ffd5b5061083b61249b565b6040516108489190613fc0565b60405180910390f35b34801561085c575f5ffd5b506108656124a8565b60405161087493929190614343565b60405180910390f35b6108856125b1565b804710156108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90614591565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561090b573d5f5f3e3d5ffd5b505050565b5f63150b7a0260e01b905095945050505050565b61092c6125b1565b610934612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610999906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2890614661565b60405180910390fd5b5f600c8054905011610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f906146c9565b60405180910390fd5b5f600c8054905090505f5f90505b81811015610c61575f600c8281548110610aa357610aa26146e7565b5b905f5260205f20015490503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b1f9190613fc0565b602060405180830381865afa158015610b3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5e9190614728565b73ffffffffffffffffffffffffffffffffffffffff1603610c5357600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3086846040518463ffffffff1660e01b8152600401610bd793929190614753565b5f604051808303815f87803b158015610bee575f5ffd5b505af1158015610c00573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051610c4a9190613fc0565b60405180910390a25b508080600101915050610a86565b50600c5f610c6f9190613d07565b8173ffffffffffffffffffffffffffffffffffffffff167f33791e8b42f2588755f7a687e5c7b194580157f8f23db8602b278c4ebecf2a7a82604051610cb59190613fc0565b60405180910390a250610cc6612687565b50565b6008602052805f5260405f205f915090505481565b6009602052805f5260405f205f915090505481565b610cfb6125b1565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60036001600384610d9391906147e2565b610d9d9190614812565b610da79190614845565b90508181610db59190614886565b9350683635c9adc5dea0000092505050915091565b60055481565b610dd86125b1565b5f8282905011610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614903565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614661565b60405180910390fd5b5f5f90505b82829050811015610fac57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330868686818110610f0e57610f0d6146e7565b5b905060200201356040518463ffffffff1660e01b8152600401610f3393929190614753565b5f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050600c838383818110610f7557610f746146e7565b5b90506020020135908060018154018082558091505060019003905f5260205f20015f90919091909150558080600101915050610eb1565b503373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f83839050604051610ff69190613fc0565b60405180910390a25050565b60045481565b6110106125b1565b611018612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061496b565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611170919061432a565b602060405180830381865afa15801561118b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111af919061499d565b90505f81116111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90614a12565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161124f929190614a30565b6020604051808303815f875af115801561126b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128f9190614a81565b508173ffffffffffffffffffffffffffffffffffffffff167f92e39f7df2c623ce2e69bbf1af49ba0fb2749b5855aab707652065d349118ccf826040516112d69190613fc0565b60405180910390a2506112e7612687565b50565b6112f26125b1565b6112fa612638565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906145f9565b60405180910390fd5b5f4790505f81116113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614af6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156113f1573d5f5f3e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff167f667063edc301be4bbbe0123ca445e0ded1511a46a4cba624ae39dfcda8eddbc1826040516114389190613fc0565b60405180910390a250611449612687565b50565b600d602052815f5260405f208181548110611465575f80fd5b905f5260205f2090600402015f9150915050805f01549080600101805461148b90614b41565b80601f01602080910402602001604051908101604052809291908181526020018280546114b790614b41565b80156115025780601f106114d957610100808354040283529160200191611502565b820191905f5260205f20905b8154815290600101906020018083116114e557829003601f168201915b505050505090806002015490806003015f9054906101000a900460ff16905084565b61152c6125b1565b611534612638565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906145f9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890614661565b60405180910390fd5b5f5f90505f5f90505b600c805490508110156116f35782600c828154811061165c5761165b6146e7565b5b905f5260205f200154036116e65760019150600c6001600c805490506116829190614886565b81548110611693576116926146e7565b5b905f5260205f200154600c82815481106116b0576116af6146e7565b5b905f5260205f200181905550600c8054806116ce576116cd614b71565b5b600190038181905f5260205f20015f905590556116f3565b808060010191505061163a565b503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016117659190613fc0565b602060405180830381865afa158015611780573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a49190614728565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614be8565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3085856040518463ffffffff1660e01b815260040161185893929190614753565b5f604051808303815f87803b15801561186f575f5ffd5b505af1158015611881573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b836040516118cb9190613fc0565b60405180910390a2506118dc612687565b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600381565b6119126125b1565b61191b5f612690565b565b600e602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461196190614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461198d90614b41565b80156119d85780601f106119af576101008083540402835291602001916119d8565b820191905f5260205f20905b8154815290600101906020018083116119bb57829003601f168201915b505050505090806002015490806003015490806004015490806005015f9054906101000a900460ff16905086565b60065481565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60025481565b611a6c6125b1565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061496b565b60405180910390fd5b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b56919061432a565b602060405180830381865afa158015611b71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b95919061499d565b1015611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90614c50565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c32929190614a30565b6020604051808303815f875af1158015611c4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c729190614a81565b505050565b611c7f6125b1565b5f8111611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890614cb8565b60405180910390fd5b8060028190555050565b60075481565b611cd96125b1565b5f8111611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290614d20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614661565b60405180910390fd5b5f5f90505f5f90505b82811015611e8857600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611e1993929190614753565b5f604051808303815f87803b158015611e30575f5ffd5b505af1925050508015611e41575060015b15611e7b57600c81908060018154018082558091505060019003905f5260205f20015f90919091909150558180611e7790614d3e565b9250505b8080600101915050611db3565b505f8111611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614dcf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f68f8240e0b8951631ab25257a8c9839034bb0159154f157bd48f300f3c6f284f82604051611f119190613fc0565b60405180910390a25050565b600c8181548110611f2c575f80fd5b905f5260205f20015f915090505481565b611f456125b1565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f600554925060065491506007549050909192565b60605f611faa612638565b6002543414611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614e37565b60405180910390fd5b5f4233446003546040516020016120089493929190614eba565b604051602081830303815290604052805190602001205f1c90505f612710826120319190614f07565b905060035f81548092919061204590614d3e565b919050555060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061209790614d3e565b91905055506120a533612751565b6116128110156120fe576040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525093505f92506120f7338585855f612e00565b505061215f565b611b46811161211d576121108261301f565b809450819550505061214f565b61207b811161213c5761212f826133b5565b809450819550505061214e565b61214582613848565b80945081955050505b5b61215c338585855f612e00565b50505b612167612687565b9091565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156122b6578382905f5260205f2090600402016040518060800160405290815f820154815260200160018201805461220390614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461222f90614b41565b801561227a5780601f106122515761010080835404028352916020019161227a565b820191905f5260205f20905b81548152906001019060200180831161225d57829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906121c9565b505050509050919050565b6122c96125b1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612339575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612330919061432a565b60405180910390fd5b61234281612690565b50565b6060600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612490578382905f5260205f2090600402016040518060800160405290815f82015481526020016001820180546123dd90614b41565b80601f016020809104026020016040519081016040528092919081815260200182805461240990614b41565b80156124545780601f1061242b57610100808354040283529160200191612454565b820191905f5260205f20905b81548152906001019060200180831161243757829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050815260200190600101906123a3565b505050509050919050565b683635c9adc5dea0000081565b5f5f5f4792505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125a057600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161255c919061432a565b602060405180830381865afa158015612577573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259b919061499d565b6125a2565b5f5b9150600c805490509050909192565b6125b9613c23565b73ffffffffffffffffffffffffffffffffffffffff166125d7611a31565b73ffffffffffffffffffffffffffffffffffffffff1614612636576125fa613c23565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161262d919061432a565b60405180910390fd5b565b60026001540361267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490614f81565b60405180910390fd5b6002600181905550565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6003826127a09190614f07565b1480156127ac57505f81115b15612dfc575f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156128af5750683635c9adc5dea00000600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286d919061432a565b602060405180830381865afa158015612888573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ac919061499d565b10155b15612dfb575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84683635c9adc5dea000006040518363ffffffff1660e01b815260040161291a929190614a30565b6020604051808303815f875af1158015612936573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295a9190614a81565b90508015612df957683635c9adc5dea0000060065f82825461297c9190614812565b92505081905550683635c9adc5dea0000060045f82825461299d9190614812565b92505081905550683635c9adc5dea0000060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129f99190614812565b92505081905550600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060405180608001604052804281526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020015f1515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ae19190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600581526020017f45524332300000000000000000000000000000000000000000000000000000008152508152602001683635c9adc5dea0000081526020014285604051602001612b91929190615286565b604051602081830303815290604052805190602001205f1c81526020014281526020015f1515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612c269190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050508273ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b4683635c9adc5dea00000604051612cb69190613fc0565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167fb41e1687f8cee7f3272379325c6cdd7343cad8bb7c4d437184660a7512411c61683635c9adc5dea0000084604051612d0f929190613fd9565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff167f142b19bc5c09690e61e7772c7972afe162e35d0432fc85b31dc6827fe1915bab683635c9adc5dea0000084604051612d68929190613fd9565b60405180910390a26003548373ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f6997683635c9adc5dea000004287604051602001612dc8929190615286565b604051602081830303815290604052805190602001205f1c5f604051612df093929190615306565b60405180910390a35b505b5b5050565b600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405280428152602001868152602001858152602001831515815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f01556020820151816001019081612ea39190615163565b50604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555050506040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001428152602001821515815250600e5f60035481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081612f809190615163565b5060408201518160020155606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff0219169083151502179055509050506003548573ffffffffffffffffffffffffffffffffffffffff167f66d7e32beaa0bf057724beb1d1928489fbe623e34e10f46aa960b25a8c0f699786868686604051613010949392919061534e565b60405180910390a35050505050565b60605f5f620f42408460405160200161303891906153e2565b604051602081830303815290604052805190602001205f1c61305a9190614f07565b90505f5f90505f5f90505b6010805490508110156133705760108181548110613086576130856146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826130bb9190614812565b915081831015613363575f600f82815481106130da576130d96146e7565b5b905f5260205f2001540361312c575f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090945094505050506133b0565b5f600f8281548110613141576131406146e7565b5b905f5260205f200154905080471061331e575f3373ffffffffffffffffffffffffffffffffffffffff168260405161317890615434565b5f6040518083038185875af1925050503d805f81146131b2576040519150601f19603f3d011682016040523d82523d5f602084013e6131b7565b606091505b5050905080156132d8578160045f8282546131d29190614812565b925050819055508160055f8282546131ea9190614812565b925050819055508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323d9190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f22638f6df852ff9ebbf1ed678c817164d21ece093e03d1395be093bede06959a8360405161328a9190613fc0565b60405180910390a2816040518060400160405280600681526020017f4e41544956450000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909650965050505050506133b0565b5f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509095509550505050506133b0565b8080600101915050613065565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f4240846040516020016133ce919061546a565b604051602081830303815290604052805190602001205f1c6133f09190614f07565b90505f5f90505f5f90505b601280549050811015613803576012818154811061341c5761341b6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826134519190614812565b9150818310156137f6575f601182815481106134705761346f6146e7565b5b905f5260205f200154036134c2575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613843565b5f601182815481106134d7576134d66146e7565b5b905f5260205f20015490505f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361357b575f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135d6919061432a565b602060405180830381865afa1580156135f1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613615919061499d565b106137b1575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613677929190614a30565b6020604051808303815f875af1158015613693573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b79190614a81565b9050801561376b578160065f8282546136d09190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fb11ca078ff9d9ef1c2c26ecfb507b717695344ea2e8bac9b0f2ee3b91c40d4b48360405161371d9190613fc0565b60405180910390a2816040518060400160405280600581526020017f455243323000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e450000000000000000000000000000000000000000000000000000000081525090965096505050505050613843565b5f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909550955050505050613843565b80806001019150506133fb565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b60605f5f620f42408460405160200161386191906154d9565b604051602081830303815290604052805190602001205f1c6138839190614f07565b90505f5f90505f5f90505b601380549050811015613bde57601381815481106138af576138ae6146e7565b5b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16826138e49190614812565b915081831015613bd1575f8103613939575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f600c8054905003613989575f6040518060400160405280600481526020017f4e4f4e45000000000000000000000000000000000000000000000000000000008152509094509450505050613c1e565b5f613992613c2a565b90503073ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401613a059190613fc0565b602060405180830381865afa158015613a20573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a449190614728565b73ffffffffffffffffffffffffffffffffffffffff1614613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190615548565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401613af893929190614753565b5f604051808303815f87803b158015613b0f575f5ffd5b505af1158015613b21573d5f5f3e3d5ffd5b50505050600160075f828254613b379190614812565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f597c2689b95dda1a133644788468fbc91f50604112bf2abb6cbe1ca11b78062b82604051613b849190613fc0565b60405180910390a2806040518060400160405280600381526020017f4e46540000000000000000000000000000000000000000000000000000000000815250909550955050505050613c1e565b808060010191505061388e565b505f6040518060400160405280600481526020017f4e4f4e4500000000000000000000000000000000000000000000000000000000815250909350935050505b915091565b5f33905090565b5f5f600c8054905011613c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c69906155b0565b60405180910390fd5b600c5f81548110613c8657613c856146e7565b5b905f5260205f2001549050600c6001600c80549050613ca59190614886565b81548110613cb657613cb56146e7565b5b905f5260205f200154600c5f81548110613cd357613cd26146e7565b5b905f5260205f200181905550600c805480613cf157613cf0614b71565b5b600190038181905f5260205f20015f9055905590565b5080545f8255905f5260205f2090810190613d229190613d25565b50565b5b80821115613d3c575f815f905550600101613d26565b5090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d7182613d48565b9050919050565b613d8181613d67565b8114613d8b575f5ffd5b50565b5f81359050613d9c81613d78565b92915050565b5f819050919050565b613db481613da2565b8114613dbe575f5ffd5b50565b5f81359050613dcf81613dab565b92915050565b5f5f60408385031215613deb57613dea613d40565b5b5f613df885828601613d8e565b9250506020613e0985828601613dc1565b9150509250929050565b5f613e1d82613d48565b9050919050565b613e2d81613e13565b8114613e37575f5ffd5b50565b5f81359050613e4881613e24565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613e6f57613e6e613e4e565b5b8235905067ffffffffffffffff811115613e8c57613e8b613e52565b5b602083019150836001820283011115613ea857613ea7613e56565b5b9250929050565b5f5f5f5f5f60808688031215613ec857613ec7613d40565b5b5f613ed588828901613e3a565b9550506020613ee688828901613e3a565b9450506040613ef788828901613dc1565b935050606086013567ffffffffffffffff811115613f1857613f17613d44565b5b613f2488828901613e5a565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f6781613f33565b82525050565b5f602082019050613f805f830184613f5e565b92915050565b5f60208284031215613f9b57613f9a613d40565b5b5f613fa884828501613e3a565b91505092915050565b613fba81613da2565b82525050565b5f602082019050613fd35f830184613fb1565b92915050565b5f604082019050613fec5f830185613fb1565b613ff96020830184613fb1565b9392505050565b5f5f83601f84011261401557614014613e4e565b5b8235905067ffffffffffffffff81111561403257614031613e52565b5b60208301915083602082028301111561404e5761404d613e56565b5b9250929050565b5f5f6020838503121561406b5761406a613d40565b5b5f83013567ffffffffffffffff81111561408857614087613d44565b5b61409485828601614000565b92509250509250929050565b5f602082840312156140b5576140b4613d40565b5b5f6140c284828501613d8e565b91505092915050565b5f5f604083850312156140e1576140e0613d40565b5b5f6140ee85828601613e3a565b92505060206140ff85828601613dc1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61414b82614109565b6141558185614113565b9350614165818560208601614123565b61416e81614131565b840191505092915050565b5f8115159050919050565b61418d81614179565b82525050565b5f6080820190506141a65f830187613fb1565b81810360208301526141b88186614141565b90506141c76040830185613fb1565b6141d46060830184614184565b95945050505050565b5f819050919050565b5f6142006141fb6141f684613d48565b6141dd565b613d48565b9050919050565b5f614211826141e6565b9050919050565b5f61422282614207565b9050919050565b61423281614218565b82525050565b5f60208201905061424b5f830184614229565b92915050565b5f6020828403121561426657614265613d40565b5b5f61427384828501613dc1565b91505092915050565b61428581613e13565b82525050565b5f60c08201905061429e5f83018961427c565b81810360208301526142b08188614141565b90506142bf6040830187613fb1565b6142cc6060830186613fb1565b6142d96080830185613fb1565b6142e660a0830184614184565b979650505050505050565b5f6142fb82614207565b9050919050565b61430b816142f1565b82525050565b5f6020820190506143245f830184614302565b92915050565b5f60208201905061433d5f83018461427c565b92915050565b5f6060820190506143565f830186613fb1565b6143636020830185613fb1565b6143706040830184613fb1565b949350505050565b5f6040820190508181035f8301526143908185614141565b905061439f6020830184613fb1565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143d881613da2565b82525050565b5f82825260208201905092915050565b5f6143f882614109565b61440281856143de565b9350614412818560208601614123565b61441b81614131565b840191505092915050565b61442f81614179565b82525050565b5f608083015f83015161444a5f8601826143cf565b506020830151848203602086015261446282826143ee565b915050604083015161447760408601826143cf565b50606083015161448a6060860182614426565b508091505092915050565b5f6144a08383614435565b905092915050565b5f602082019050919050565b5f6144be826143a6565b6144c881856143b0565b9350836020820285016144da856143c0565b805f5b8581101561451557848403895281516144f68582614495565b9450614501836144a8565b925060208a019950506001810190506144dd565b50829750879550505050505092915050565b5f6020820190508181035f83015261453f81846144b4565b905092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61457b601483614113565b915061458682614547565b602082019050919050565b5f6020820190508181035f8301526145a88161456f565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f6145e3600f83614113565b91506145ee826145af565b602082019050919050565b5f6020820190508181035f830152614610816145d7565b9050919050565b7f4e465420636f6c6c656374696f6e206e6f7420736574000000000000000000005f82015250565b5f61464b601683614113565b915061465682614617565b602082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b7f4e6f204e46547320746f207769746864726177000000000000000000000000005f82015250565b5f6146b3601383614113565b91506146be8261467f565b602082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061472281613e24565b92915050565b5f6020828403121561473d5761473c613d40565b5b5f61474a84828501614714565b91505092915050565b5f6060820190506147665f83018661427c565b614773602083018561427c565b6147806040830184613fb1565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147ec82613da2565b91506147f783613da2565b92508261480757614806614788565b5b828204905092915050565b5f61481c82613da2565b915061482783613da2565b925082820190508082111561483f5761483e6147b5565b5b92915050565b5f61484f82613da2565b915061485a83613da2565b925082820261486881613da2565b9150828204841483151761487f5761487e6147b5565b5b5092915050565b5f61489082613da2565b915061489b83613da2565b92508282039050818111156148b3576148b26147b5565b5b92915050565b7f4e6f20746f6b656e204944732070726f766964656400000000000000000000005f82015250565b5f6148ed601583614113565b91506148f8826148b9565b602082019050919050565b5f6020820190508181035f83015261491a816148e1565b9050919050565b7f4552433230206e6f7420736574000000000000000000000000000000000000005f82015250565b5f614955600d83614113565b915061496082614921565b602082019050919050565b5f6020820190508181035f83015261498281614949565b9050919050565b5f8151905061499781613dab565b92915050565b5f602082840312156149b2576149b1613d40565b5b5f6149bf84828501614989565b91505092915050565b7f4e6f2045524332302062616c616e636520746f207769746864726177000000005f82015250565b5f6149fc601c83614113565b9150614a07826149c8565b602082019050919050565b5f6020820190508181035f830152614a29816149f0565b9050919050565b5f604082019050614a435f83018561427c565b614a506020830184613fb1565b9392505050565b614a6081614179565b8114614a6a575f5ffd5b50565b5f81519050614a7b81614a57565b92915050565b5f60208284031215614a9657614a95613d40565b5b5f614aa384828501614a6d565b91505092915050565b7f4e6f206e61746976652062616c616e636520746f2077697468647261770000005f82015250565b5f614ae0601d83614113565b9150614aeb82614aac565b602082019050919050565b5f6020820190508181035f830152614b0d81614ad4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614b5857607f821691505b602082108103614b6b57614b6a614b14565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f436f6e747261637420646f6573206e6f74206f776e2074686973204e465400005f82015250565b5f614bd2601e83614113565b9150614bdd82614b9e565b602082019050919050565b5f6020820190508181035f830152614bff81614bc6565b9050919050565b7f496e73756666696369656e7420455243323000000000000000000000000000005f82015250565b5f614c3a601283614113565b9150614c4582614c06565b602082019050919050565b5f6020820190508181035f830152614c6781614c2e565b9050919050565b7f496e76616c696420636f737400000000000000000000000000000000000000005f82015250565b5f614ca2600c83614113565b9150614cad82614c6e565b602082019050919050565b5f6020820190508181035f830152614ccf81614c96565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614d0a601d83614113565b9150614d1582614cd6565b602082019050919050565b5f6020820190508181035f830152614d3781614cfe565b9050919050565b5f614d4882613da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d7a57614d796147b5565b5b600182019050919050565b7f4e6f204e4654732077657265206465706f7369746564000000000000000000005f82015250565b5f614db9601683614113565b9150614dc482614d85565b602082019050919050565b5f6020820190508181035f830152614de681614dad565b9050919050565b7f496e636f7272656374207370696e20636f7374000000000000000000000000005f82015250565b5f614e21601383614113565b9150614e2c82614ded565b602082019050919050565b5f6020820190508181035f830152614e4e81614e15565b9050919050565b5f819050919050565b614e6f614e6a82613da2565b614e55565b82525050565b5f8160601b9050919050565b5f614e8b82614e75565b9050919050565b5f614e9c82614e81565b9050919050565b614eb4614eaf82613e13565b614e92565b82525050565b5f614ec58287614e5e565b602082019150614ed58286614ea3565b601482019150614ee58285614e5e565b602082019150614ef58284614e5e565b60208201915081905095945050505050565b5f614f1182613da2565b9150614f1c83613da2565b925082614f2c57614f2b614788565b5b828206905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614f6b601f83614113565b9150614f7682614f37565b602082019050919050565b5f6020820190508181035f830152614f9881614f5f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026150287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614fed565b6150328683614fed565b95508019841693508086168417925050509392505050565b5f61506461505f61505a84613da2565b6141dd565b613da2565b9050919050565b5f819050919050565b61507d8361504a565b6150916150898261506b565b848454614ff9565b825550505050565b5f5f905090565b6150a8615099565b6150b3818484615074565b505050565b5b818110156150d6576150cb5f826150a0565b6001810190506150b9565b5050565b601f82111561511b576150ec81614fcc565b6150f584614fde565b81016020851015615104578190505b61511861511085614fde565b8301826150b8565b50505b505050565b5f82821c905092915050565b5f61513b5f1984600802615120565b1980831691505092915050565b5f615153838361512c565b9150826002028217905092915050565b61516c82614109565b67ffffffffffffffff81111561518557615184614f9f565b5b61518f8254614b41565b61519a8282856150da565b5f60209050601f8311600181146151cb575f84156151b9578287015190505b6151c38582615148565b86555061522a565b601f1984166151d986614fcc565b5f5b82811015615200578489015182556001820191506020850194506020810190506151db565b8683101561521d5784890151615219601f89168261512c565b8355505b6001600288020188555050505b505050505050565b5f81905092915050565b7f4155544f5f5245574152440000000000000000000000000000000000000000005f82015250565b5f615270600b83615232565b915061527b8261523c565b600b82019050919050565b5f6152918285614e5e565b6020820191506152a18284614ea3565b6014820191506152b082615264565b91508190509392505050565b7f45524332300000000000000000000000000000000000000000000000000000005f82015250565b5f6152f0600583614113565b91506152fb826152bc565b602082019050919050565b5f6080820190508181035f83015261531d816152e4565b905061532c6020830186613fb1565b6153396040830185613fb1565b6153466060830184614184565b949350505050565b5f6080820190508181035f8301526153668187614141565b90506153756020830186613fb1565b6153826040830185613fb1565b61538f6060830184614184565b95945050505050565b7f4e415449564500000000000000000000000000000000000000000000000000005f82015250565b5f6153cc600683615232565b91506153d782615398565b600682019050919050565b5f6153ed8284614e5e565b6020820191506153fc826153c0565b915081905092915050565b5f81905092915050565b50565b5f61541f5f83615407565b915061542a82615411565b5f82019050919050565b5f61543e82615414565b9150819050919050565b5f615454600583615232565b915061545f826152bc565b600582019050919050565b5f6154758284614e5e565b60208201915061548482615448565b915081905092915050565b7f4e465400000000000000000000000000000000000000000000000000000000005f82015250565b5f6154c3600383615232565b91506154ce8261548f565b600382019050919050565b5f6154e48284614e5e565b6020820191506154f3826154b7565b915081905092915050565b7f436f6e747261637420646f65736e2774206f776e2074686973204e46540000005f82015250565b5f615532601d83614113565b915061553d826154fe565b602082019050919050565b5f6020820190508181035f83015261555f81615526565b9050919050565b7f4e6f204e46547320617661696c61626c650000000000000000000000000000005f82015250565b5f61559a601183614113565b91506155a582615566565b602082019050919050565b5f6020820190508181035f8301526155c78161558e565b905091905056fea26469706673582212205ec08efc6d4016e44868447e6dc31ab159fdb7f6586c02246e678c415bc17a5c64736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bbbe30b1259a27e016a957e46fe182089330bf990000000000000000000000002d04e5ca7f73debb68b21b3ebe79e644e2479b29
-----Decoded View---------------
Arg [0] : _erc20 (address): 0xbBBE30B1259A27E016A957e46fe182089330Bf99
Arg [1] : _nft (address): 0x2D04e5CA7F73deBB68B21b3eBe79e644e2479b29
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bbbe30b1259a27e016a957e46fe182089330bf99
Arg [1] : 0000000000000000000000002d04e5ca7f73debb68b21b3ebe79e644e2479b29
Deployed Bytecode Sourcemap
18389:17532:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32975:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35630:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32181:786;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18695:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18748:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20791:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34410:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;18579:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21588:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18543:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31722:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31358:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19191:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33460:789;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18968:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18875:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4326:103;;;;;;;;;;;;;:::i;:::-;;19453:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;18619:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18937:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3651:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18511:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18466:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33175:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20527:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18656:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20906:674;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19003:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20679:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35336:286;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25718:1371;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;34829:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4584:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34257:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18806:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34978:350;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;32975:192;3537:13;:11;:13::i;:::-;33098:6:::1;33073:21;:31;;33065:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33140:2;:11;;:19;33152:6;33140:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32975:192:::0;;:::o;35630:251::-;35817:6;35843:30;;;35836:37;;35630:251;;;;;;;:::o;32181:786::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;32288:1:::2;32274:16;;:2;:16;;::::0;32266:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;32363:1;32329:36;;32337:13;;;;;;;;;;;32329:36;;::::0;32321:71:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;32436:1;32411:15;:22;;;;:26;32403:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32482:16;32501:15;:22;;;;32482:41;;32549:9;32561:1;32549:13;;32544:311;32568:8;32564:1;:12;32544:311;;;32598:15;32616;32632:1;32616:18;;;;;;;;:::i;:::-;;;;;;;;;;32598:36;;32695:4;32653:47;;:13;;;;;;;;;;;:21;;;32675:7;32653:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;::::0;32649:195:::2;;32721:13;;;;;;;;;;;:30;;;32760:4;32767:2;32771:7;32721:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32816:2;32803:25;;;32820:7;32803:25;;;;;;:::i;:::-;;;;;;;;32649:195;32583:272;32578:3;;;;;;;32544:311;;;;32882:15;;32875:22;;;;:::i;:::-;32946:2;32923:36;;;32950:8;32923:36;;;;;;:::i;:::-;;;;;;;;32255:712;7551:20:::1;:18;:20::i;:::-;32181:786:::0;:::o;18695:46::-;;;;;;;;;;;;;;;;;:::o;18748:49::-;;;;;;;;;;;;;;;;;:::o;20791:107::-;3537:13;:11;:13::i;:::-;20885:4:::1;20861:13;;:29;;;;;;;;;;;;;;;;;;20791:107:::0;:::o;34410:411::-;34478:24;34504;34541:23;34567:11;:19;34579:6;34567:19;;;;;;;;;;;;;;;;34541:45;;34597:22;18927:1;34671;18927;34624:15;:43;;;;:::i;:::-;34623:49;;;;:::i;:::-;34622:79;;;;:::i;:::-;34597:104;;34748:15;34731:14;:32;;;;:::i;:::-;34712:51;;18853:15;34774:39;;34530:291;;34410:411;;;:::o;18579:33::-;;;;:::o;21588:506::-;3537:13;:11;:13::i;:::-;21702:1:::1;21684:8;;:15;;:19;21676:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21782:1;21748:36;;21756:13;;;;;;;;;;;21748:36;;::::0;21740:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21837:9;21849:1;21837:13;;21832:187;21856:8;;:15;;21852:1;:19;21832:187;;;21893:13;;;;;;;;;;;:26;;;21920:10;21940:4;21947:8;;21956:1;21947:11;;;;;;;:::i;:::-;;;;;;;;21893:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21974:15;21995:8;;22004:1;21995:11;;;;;;;:::i;:::-;;;;;;;;21974:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21873:3;;;;;;;21832:187;;;;22058:10;22044:42;;;22070:8;;:15;;22044:42;;;;;;:::i;:::-;;;;;;;;21588:506:::0;;:::o;18543:27::-;;;;:::o;31722:451::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;31831:1:::2;31817:16;;:2;:16;;::::0;31809:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;31903:1;31872:33;;31880:10;;;;;;;;;;;31872:33;;::::0;31864:59:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;31944:15;31962:10;;;;;;;;;;;:20;;;31991:4;31962:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31944:53;;32026:1;32016:7;:11;32008:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32081:10;;;;;;;;;;;:19;;;32101:2;32105:7;32081:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32153:2;32129:36;;;32157:7;32129:36;;;;;;:::i;:::-;;;;;;;;31798:375;7551:20:::1;:18;:20::i;:::-;31722:451:::0;:::o;31358:356::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;31476:1:::2;31462:16;;:2;:16;;::::0;31454:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;31509:15;31527:21;31509:39;;31577:1;31567:7;:11;31559:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31633:2;:11;;:20;31645:7;31633:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31694:2;31669:37;;;31698:7;31669:37;;;;;;:::i;:::-;;;;;;;;31443:271;7551:20:::1;:18;:20::i;:::-;31358:356:::0;:::o;19191:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33460:789::-;3537:13;:11;:13::i;:::-;7507:21:::1;:19;:21::i;:::-;33575:1:::2;33561:16;;:2;:16;;::::0;33553:44:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;33650:1;33616:36;;33624:13;;;;;;;;;;;33616:36;;::::0;33608:71:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;33692:10;33705:5;33692:18;;33726:9;33738:1;33726:13;;33721:308;33745:15;:22;;;;33741:1;:26;33721:308;;;33815:7;33793:15;33809:1;33793:18;;;;;;;;:::i;:::-;;;;;;;;;;:29:::0;33789:229:::2;;33851:4;33843:12;;33895:15;33936:1;33911:15;:22;;;;:26;;;;:::i;:::-;33895:43;;;;;;;;:::i;:::-;;;;;;;;;;33874:15;33890:1;33874:18;;;;;;;;:::i;:::-;;;;;;;;;:64;;;;33957:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33997:5;;33789:229;33769:3;;;;;;;33721:308;;;;34091:4;34049:47;;:13;;;;;;;;;;;:21;;;34071:7;34049:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;34041:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34142:13;;;;;;;;;;;:30;;;34181:4;34188:2;34192:7;34142:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34229:2;34216:25;;;34233:7;34216:25;;;;;;:::i;:::-;;;;;;;;33542:707;7551:20:::1;:18;:20::i;:::-;33460:789:::0;;:::o;18968:28::-;;;;;;;;;;;;;:::o;18875:53::-;18927:1;18875:53;:::o;4326:103::-;3537:13;:11;:13::i;:::-;4391:30:::1;4418:1;4391:18;:30::i;:::-;4326:103::o:0;19453:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18619:30::-;;;;:::o;18937:24::-;;;;;;;;;;;;;:::o;3651:87::-;3697:7;3724:6;;;;;;;;;;;3717:13;;3651:87;:::o;18511:25::-;;;;:::o;18466:36::-;;;;:::o;33175:277::-;3537:13;:11;:13::i;:::-;33295:1:::1;33264:33;;33272:10;;;;;;;;;;;33264:33;;::::0;33256:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33373:6;33334:10;;;;;;;;;;;:20;;;33363:4;33334:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;33326:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33413:10;;;;;;;;;;;:19;;;33433:2;33437:6;33413:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33175:277:::0;;:::o;20527:144::-;3537:13;:11;:13::i;:::-;20615:1:::1;20604:8;:12;20596:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20655:8;20644;:19;;;;20527:144:::0;:::o;18656:30::-;;;;:::o;20906:674::-;3537:13;:11;:13::i;:::-;20990:1:::1;20981:6;:10;20973:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21078:1;21044:36;;21052:13;;;;;;;;;;;21044:36;;::::0;21036:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21128:22;21153:1;21128:26;;21180:9;21192:1;21180:13;;21175:267;21199:6;21195:1;:10;21175:267;;;21231:13;;;;;;;;;;;:26;;;21258:10;21278:4;21285:1;21231:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21227:204:::0;21407:8:::1;21227:204;21307:15;21328:1;21307:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21349:16;;;;;:::i;:::-;;;;21175:267;21207:3;;;;;;;21175:267;;;;21487:1;21470:14;:18;21462:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21545:10;21531:41;;;21557:14;21531:41;;;;;;:::i;:::-;;;;;;;;20962:618;20906:674:::0;:::o;19003:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20679:104::-;3537:13;:11;:13::i;:::-;20768:6:::1;20748:10;;:27;;;;;;;;;;;;;;;;;;20679:104:::0;:::o;35336:286::-;35419:21;35442:20;35464:18;35516;;35500:34;;35560:15;;35545:30;;35599:15;;35586:28;;35336:286;;;:::o;25718:1371::-;25773:23;25798:19;7507:21;:19;:21::i;:::-;25851:8:::1;;25838:9;:21;25830:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;25896:15;25963;25980:10;25992:16;26010:10;;25946:75;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25936:86;;;;;;25914:119;;25896:137;;26044:15;26072:5;26062:7;:15;;;;:::i;:::-;26044:33;;26090:10;;:12;;;;;;;;;:::i;:::-;;;;;;26113:11;:23;26125:10;26113:23;;;;;;;;;;;;;;;;:25;;;;;;;;;:::i;:::-;;;;;;26151:37;26177:10;26151:25;:37::i;:::-;26285:4;26275:7;:14;26271:257;;;26341:18;;;;;;;;;;;;;;;;::::0;::::1;;26388:1;26374:15;;26404:66;26419:10;26431:9;26442:11;26455:7;26464:5;26404:14;:66::i;:::-;26485:31;;;;26271:257;26555:4;26544:7;:15;26540:421;;26643:22;26657:7;26643:13;:22::i;:::-;26616:49;;;;;;;;26540:421;;;26698:4;26687:7;:15;26683:278;;26785:21;26798:7;26785:12;:21::i;:::-;26758:48;;;;;;;;26683:278;;;26930:19;26941:7;26930:10;:19::i;:::-;26903:46;;;;;;;;26683:278;26540:421;26973:66;26988:10;27000:9;27011:11;27024:7;27033:5;26973:14;:66::i;:::-;27050:31;;7539:1;7551:20:::0;:18;:20::i;:::-;25718:1371;;:::o;34829:141::-;34898:19;34937:17;:25;34955:6;34937:25;;;;;;;;;;;;;;;34930:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34829:141;;;:::o;4584:220::-;3537:13;:11;:13::i;:::-;4689:1:::1;4669:22;;:8;:22;;::::0;4665:93:::1;;4743:1;4715:31;;;;;;;;;;;:::i;:::-;;;;;;;;4665:93;4768:28;4787:8;4768:18;:28::i;:::-;4584:220:::0;:::o;34257:145::-;34330:19;34369:17;:25;34387:6;34369:25;;;;;;;;;;;;;;;34362:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34257:145;;;:::o;18806:62::-;18853:15;18806:62;:::o;34978:350::-;35059:21;35082:20;35104:16;35154:21;35138:37;;35232:1;35201:33;;35209:10;;;;;;;;;;;35201:33;;;:75;;35241:10;;;;;;;;;;;:20;;;35270:4;35241:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35201:75;;;35237:1;35201:75;35186:90;;35298:15;:22;;;;35287:33;;34978:350;;;:::o;3816:166::-;3887:12;:10;:12::i;:::-;3876:23;;:7;:5;:7::i;:::-;:23;;;3872:103;;3950:12;:10;:12::i;:::-;3923:40;;;;;;;;;;;:::i;:::-;;;;;;;;3872:103;3816:166::o;7587:293::-;6989:1;7721:7;;:19;7713:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6989:1;7854:7;:18;;;;7587:293::o;7888:213::-;6945:1;8071:7;:22;;;;7888:213::o;4964:191::-;5038:16;5057:6;;;;;;;;;;;5038:25;;5083:8;5074:6;;:17;;;;;;;;;;;;;;;;;;5138:8;5107:40;;5128:8;5107:40;;;;;;;;;;;;5027:128;4964:191;:::o;22419:2204::-;22490:23;22516:11;:19;22528:6;22516:19;;;;;;;;;;;;;;;;22490:45;;22607:1;18927;22560:15;:43;;;;:::i;:::-;:48;:71;;;;;22630:1;22612:15;:19;22560:71;22556:2060;;;22683:1;22652:33;;22660:10;;;;;;;;;;;22652:33;;;;:114;;;;;18853:15;22707:10;;;;;;;;;;;:20;;;22736:4;22707:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;22652:114;22648:1957;;;22805:12;22820:10;;;;;;;;;;;:19;;;22840:6;18853:15;22820:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22805:64;;22892:7;22888:1702;;;18853:15;22924;;:39;;;;;;;:::i;:::-;;;;;;;;18853:15;22986:12;;:36;;;;;;;:::i;:::-;;;;;;;;18853:15;23045:14;:22;23060:6;23045:22;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;23136:17;:25;23154:6;23136:25;;;;;;;;;;;;;;;23193:259;;;;;;;;23246:15;23193:259;;;;;;;;;;;;;;;;;;;;;;;;;18853:15;23193:259;;;;23419:5;23193:259;;;;;23136:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23540:390;;;;;;;;23586:6;23540:390;;;;;;;;;;;;;;;;;;;;;;;;;;;18853:15;23540:390;;;;23767:15;23784:6;23750:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23740:67;;;;;;23732:76;;23540:390;;;;23846:15;23540:390;;;;23901:5;23540:390;;;;;23520:5;:17;23526:10;;23520:17;;;;;;;;;;;:410;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23975:6;23960:44;;;18853:15;23960:44;;;;;;:::i;:::-;;;;;;;;24050:6;24032:64;;;18853:15;24080;24032:64;;;;;;;:::i;:::-;;;;;;;;24148:6;24124:70;;;18853:15;24178;24124:70;;;;;;;:::i;:::-;;;;;;;;24317:10;;24283:6;24244:326;;;18853:15;24473;24490:6;24456:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24446:67;;;;;;24438:76;;24542:5;24244:326;;;;;;;;:::i;:::-;;;;;;;;22888:1702;22768:1837;22648:1957;22556:2060;22479:2144;22419:2204;:::o;30594:756::-;30732:17;:25;30750:6;30732:25;;;;;;;;;;;;;;;30777:195;;;;;;;;30818:15;30777:195;;;;30863:9;30777:195;;;;30904:11;30777:195;;;;30948:8;30777:195;;;;;30732:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31016:233;;;;;;;;31050:6;31016:233;;;;;;31082:9;31016:233;;;;31119:11;31016:233;;;;31153:7;31016:233;;;;31186:15;31016:233;;;;31229:8;31016:233;;;;;30996:5;:17;31002:10;;30996:17;;;;;;;;;;;:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31288:10;;31280:6;31267:75;;;31300:9;31311:11;31324:7;31333:8;31267:75;;;;;;;;;:::i;:::-;;;;;;;;30594:756;;;;;:::o;27097:1202::-;27155:23;27180:19;27212:9;27282;27259:7;27242:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;27232:46;;;;;;27224:55;;:67;;;;:::i;:::-;27212:79;;27302:11;27316:1;27302:15;;27333:9;27345:1;27333:13;;27328:935;27352:9;:16;;;;27348:1;:20;27328:935;;;27397:9;27407:1;27397:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27390:19;;;;;;;:::i;:::-;;;27432:3;27428:1;:7;27424:828;;;27480:1;27460:13;27474:1;27460:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;27456:88;;27522:1;27506:18;;;;;;;;;;;;;;;;;;;;;;;;;;;27456:88;27562:14;27579:13;27593:1;27579:16;;;;;;;;:::i;:::-;;;;;;;;;;27562:33;;27643:6;27618:21;:31;27614:623;;27675:9;27698:10;27690:24;;27722:6;27690:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27674:59;;;27760:4;27756:395;;;27809:6;27793:12;;:22;;;;;;;:::i;:::-;;;;;;;;27864:6;27842:18;;:28;;;;;;;:::i;:::-;;;;;;;;27927:6;27897:14;:26;27912:10;27897:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;27981:10;27965:35;;;27993:6;27965:35;;;;;;:::i;:::-;;;;;;;;28045:6;28027:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27756:395;28125:1;28109:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27614:623;28215:1;28199:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;27424:828;27370:3;;;;;;;27328:935;;;;28289:1;28273:18;;;;;;;;;;;;;;;;;;;;;;;;27097:1202;;;;:::o;28307:1157::-;28364:23;28389:19;28421:9;28490;28468:7;28451:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;28441:45;;;;;;28433:54;;:66;;;;:::i;:::-;28421:78;;28510:11;28524:1;28510:15;;28541:9;28553:1;28541:13;;28536:892;28560:8;:15;;;;28556:1;:19;28536:892;;;28604:8;28613:1;28604:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28597:18;;;;;;;:::i;:::-;;;28638:3;28634:1;:7;28630:787;;;28685:1;28666:12;28679:1;28666:15;;;;;;;;:::i;:::-;;;;;;;;;;:20;28662:87;;28727:1;28711:18;;;;;;;;;;;;;;;;;;;;;;;;;;;28662:87;28767:14;28784:12;28797:1;28784:15;;;;;;;;:::i;:::-;;;;;;;;;;28767:32;;28853:1;28822:33;;28830:10;;;;;;;;;;;28822:33;;;28818:57;;28873:1;28857:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;28818:57;28937:6;28898:10;;;;;;;;;;;:20;;;28927:4;28898:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;28894:508;;28968:7;28978:10;;;;;;;;;;;:19;;;28998:10;29010:6;28978:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28968:49;;29044:2;29040:276;;;29094:6;29075:15;;:25;;;;;;;:::i;:::-;;;;;;;;29147:10;29132:34;;;29159:6;29132:34;;;;;;:::i;:::-;;;;;;;;29210:6;29193:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29040:276;29290:1;29274:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28894:508;29380:1;29364:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;28630:787;28577:3;;;;;;;28536:892;;;;29454:1;29438:18;;;;;;;;;;;;;;;;;;;;;;;;28307:1157;;;;:::o;29472:1114::-;29527:23;29552:19;29584:9;29651;29631:7;29614:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;29604:43;;;;;;29596:52;;:64;;;;:::i;:::-;29584:76;;29671:11;29685:1;29671:15;;29702:9;29714:1;29702:13;;29697:853;29721:6;:13;;;;29717:1;:17;29697:853;;;29763:6;29770:1;29763:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29756:16;;;;;;;:::i;:::-;;;29795:3;29791:1;:7;29787:752;;;29828:1;29823;:6;29819:705;;29870:1;29854:18;;;;;;;;;;;;;;;;;;;;;;;;;;;29819:705;29951:1;29925:15;:22;;;;:27;29921:51;;29970:1;29954:18;;;;;;;;;;;;;;;;;;;;;;;;;;;29921:51;29995:15;30013:23;:21;:23::i;:::-;29995:41;;30157:4;30115:47;;:13;;;;;;;;;;;:21;;;30137:7;30115:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;30081:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;30288:13;;;;;;;;;;;:30;;;30327:4;30334:10;30346:7;30288:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30396:1;30377:15;;:20;;;;;;;:::i;:::-;;;;;;;;30438:10;30425:33;;;30450:7;30425:33;;;;;;:::i;:::-;;;;;;;;30496:7;30481:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;29787:752;29736:3;;;;;;;29697:853;;;;30576:1;30560:18;;;;;;;;;;;;;;;;;;;;;;;;29472:1114;;;;:::o;1660:98::-;1713:7;1740:10;1733:17;;1660:98;:::o;22102:309::-;22153:15;22214:1;22189:15;:22;;;;:26;22181:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22268:15;22284:1;22268:18;;;;;;;;:::i;:::-;;;;;;;;;;22258:28;;22328:15;22369:1;22344:15;:22;;;;:26;;;;:::i;:::-;22328:43;;;;;;;;:::i;:::-;;;;;;;;;;22307:15;22323:1;22307:18;;;;;;;;:::i;:::-;;;;;;;;;:64;;;;22382:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22102:309;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:104::-;511:7;540:24;558:5;540:24;:::i;:::-;529:35;;466:104;;;:::o;576:138::-;657:32;683:5;657:32;:::i;:::-;650:5;647:43;637:71;;704:1;701;694:12;637:71;576:138;:::o;720:155::-;774:5;812:6;799:20;790:29;;828:41;863:5;828:41;:::i;:::-;720:155;;;;:::o;881:77::-;918:7;947:5;936:16;;881:77;;;:::o;964:122::-;1037:24;1055:5;1037:24;:::i;:::-;1030:5;1027:35;1017:63;;1076:1;1073;1066:12;1017:63;964:122;:::o;1092:139::-;1138:5;1176:6;1163:20;1154:29;;1192:33;1219:5;1192:33;:::i;:::-;1092:139;;;;:::o;1237:490::-;1313:6;1321;1370:2;1358:9;1349:7;1345:23;1341:32;1338:119;;;1376:79;;:::i;:::-;1338:119;1496:1;1521:61;1574:7;1565:6;1554:9;1550:22;1521:61;:::i;:::-;1511:71;;1467:125;1631:2;1657:53;1702:7;1693:6;1682:9;1678:22;1657:53;:::i;:::-;1647:63;;1602:118;1237:490;;;;;:::o;1733:96::-;1770:7;1799:24;1817:5;1799:24;:::i;:::-;1788:35;;1733:96;;;:::o;1835:122::-;1908:24;1926:5;1908:24;:::i;:::-;1901:5;1898:35;1888:63;;1947:1;1944;1937:12;1888:63;1835:122;:::o;1963:139::-;2009:5;2047:6;2034:20;2025:29;;2063:33;2090:5;2063:33;:::i;:::-;1963:139;;;;:::o;2108:117::-;2217:1;2214;2207:12;2231:117;2340:1;2337;2330:12;2354:117;2463:1;2460;2453:12;2490:552;2547:8;2557:6;2607:3;2600:4;2592:6;2588:17;2584:27;2574:122;;2615:79;;:::i;:::-;2574:122;2728:6;2715:20;2705:30;;2758:18;2750:6;2747:30;2744:117;;;2780:79;;:::i;:::-;2744:117;2894:4;2886:6;2882:17;2870:29;;2948:3;2940:4;2932:6;2928:17;2918:8;2914:32;2911:41;2908:128;;;2955:79;;:::i;:::-;2908:128;2490:552;;;;;:::o;3048:963::-;3145:6;3153;3161;3169;3177;3226:3;3214:9;3205:7;3201:23;3197:33;3194:120;;;3233:79;;:::i;:::-;3194:120;3353:1;3378:53;3423:7;3414:6;3403:9;3399:22;3378:53;:::i;:::-;3368:63;;3324:117;3480:2;3506:53;3551:7;3542:6;3531:9;3527:22;3506:53;:::i;:::-;3496:63;;3451:118;3608:2;3634:53;3679:7;3670:6;3659:9;3655:22;3634:53;:::i;:::-;3624:63;;3579:118;3764:2;3753:9;3749:18;3736:32;3795:18;3787:6;3784:30;3781:117;;;3817:79;;:::i;:::-;3781:117;3930:64;3986:7;3977:6;3966:9;3962:22;3930:64;:::i;:::-;3912:82;;;;3707:297;3048:963;;;;;;;;:::o;4017:149::-;4053:7;4093:66;4086:5;4082:78;4071:89;;4017:149;;;:::o;4172:115::-;4257:23;4274:5;4257:23;:::i;:::-;4252:3;4245:36;4172:115;;:::o;4293:218::-;4384:4;4422:2;4411:9;4407:18;4399:26;;4435:69;4501:1;4490:9;4486:17;4477:6;4435:69;:::i;:::-;4293:218;;;;:::o;4517:329::-;4576:6;4625:2;4613:9;4604:7;4600:23;4596:32;4593:119;;;4631:79;;:::i;:::-;4593:119;4751:1;4776:53;4821:7;4812:6;4801:9;4797:22;4776:53;:::i;:::-;4766:63;;4722:117;4517:329;;;;:::o;4852:118::-;4939:24;4957:5;4939:24;:::i;:::-;4934:3;4927:37;4852:118;;:::o;4976:222::-;5069:4;5107:2;5096:9;5092:18;5084:26;;5120:71;5188:1;5177:9;5173:17;5164:6;5120:71;:::i;:::-;4976:222;;;;:::o;5204:332::-;5325:4;5363:2;5352:9;5348:18;5340:26;;5376:71;5444:1;5433:9;5429:17;5420:6;5376:71;:::i;:::-;5457:72;5525:2;5514:9;5510:18;5501:6;5457:72;:::i;:::-;5204:332;;;;;:::o;5559:568::-;5632:8;5642:6;5692:3;5685:4;5677:6;5673:17;5669:27;5659:122;;5700:79;;:::i;:::-;5659:122;5813:6;5800:20;5790:30;;5843:18;5835:6;5832:30;5829:117;;;5865:79;;:::i;:::-;5829:117;5979:4;5971:6;5967:17;5955:29;;6033:3;6025:4;6017:6;6013:17;6003:8;5999:32;5996:41;5993:128;;;6040:79;;:::i;:::-;5993:128;5559:568;;;;;:::o;6133:559::-;6219:6;6227;6276:2;6264:9;6255:7;6251:23;6247:32;6244:119;;;6282:79;;:::i;:::-;6244:119;6430:1;6419:9;6415:17;6402:31;6460:18;6452:6;6449:30;6446:117;;;6482:79;;:::i;:::-;6446:117;6595:80;6667:7;6658:6;6647:9;6643:22;6595:80;:::i;:::-;6577:98;;;;6373:312;6133:559;;;;;:::o;6698:345::-;6765:6;6814:2;6802:9;6793:7;6789:23;6785:32;6782:119;;;6820:79;;:::i;:::-;6782:119;6940:1;6965:61;7018:7;7009:6;6998:9;6994:22;6965:61;:::i;:::-;6955:71;;6911:125;6698:345;;;;:::o;7049:474::-;7117:6;7125;7174:2;7162:9;7153:7;7149:23;7145:32;7142:119;;;7180:79;;:::i;:::-;7142:119;7300:1;7325:53;7370:7;7361:6;7350:9;7346:22;7325:53;:::i;:::-;7315:63;;7271:117;7427:2;7453:53;7498:7;7489:6;7478:9;7474:22;7453:53;:::i;:::-;7443:63;;7398:118;7049:474;;;;;:::o;7529:99::-;7581:6;7615:5;7609:12;7599:22;;7529:99;;;:::o;7634:169::-;7718:11;7752:6;7747:3;7740:19;7792:4;7787:3;7783:14;7768:29;;7634:169;;;;:::o;7809:139::-;7898:6;7893:3;7888;7882:23;7939:1;7930:6;7925:3;7921:16;7914:27;7809:139;;;:::o;7954:102::-;7995:6;8046:2;8042:7;8037:2;8030:5;8026:14;8022:28;8012:38;;7954:102;;;:::o;8062:377::-;8150:3;8178:39;8211:5;8178:39;:::i;:::-;8233:71;8297:6;8292:3;8233:71;:::i;:::-;8226:78;;8313:65;8371:6;8366:3;8359:4;8352:5;8348:16;8313:65;:::i;:::-;8403:29;8425:6;8403:29;:::i;:::-;8398:3;8394:39;8387:46;;8154:285;8062:377;;;;:::o;8445:90::-;8479:7;8522:5;8515:13;8508:21;8497:32;;8445:90;;;:::o;8541:109::-;8622:21;8637:5;8622:21;:::i;:::-;8617:3;8610:34;8541:109;;:::o;8656:632::-;8847:4;8885:3;8874:9;8870:19;8862:27;;8899:71;8967:1;8956:9;8952:17;8943:6;8899:71;:::i;:::-;9017:9;9011:4;9007:20;9002:2;8991:9;8987:18;8980:48;9045:78;9118:4;9109:6;9045:78;:::i;:::-;9037:86;;9133:72;9201:2;9190:9;9186:18;9177:6;9133:72;:::i;:::-;9215:66;9277:2;9266:9;9262:18;9253:6;9215:66;:::i;:::-;8656:632;;;;;;;:::o;9294:60::-;9322:3;9343:5;9336:12;;9294:60;;;:::o;9360:142::-;9410:9;9443:53;9461:34;9470:24;9488:5;9470:24;:::i;:::-;9461:34;:::i;:::-;9443:53;:::i;:::-;9430:66;;9360:142;;;:::o;9508:126::-;9558:9;9591:37;9622:5;9591:37;:::i;:::-;9578:50;;9508:126;;;:::o;9640:141::-;9705:9;9738:37;9769:5;9738:37;:::i;:::-;9725:50;;9640:141;;;:::o;9787:161::-;9889:52;9935:5;9889:52;:::i;:::-;9884:3;9877:65;9787:161;;:::o;9954:252::-;10062:4;10100:2;10089:9;10085:18;10077:26;;10113:86;10196:1;10185:9;10181:17;10172:6;10113:86;:::i;:::-;9954:252;;;;:::o;10212:329::-;10271:6;10320:2;10308:9;10299:7;10295:23;10291:32;10288:119;;;10326:79;;:::i;:::-;10288:119;10446:1;10471:53;10516:7;10507:6;10496:9;10492:22;10471:53;:::i;:::-;10461:63;;10417:117;10212:329;;;;:::o;10547:118::-;10634:24;10652:5;10634:24;:::i;:::-;10629:3;10622:37;10547:118;;:::o;10671:854::-;10918:4;10956:3;10945:9;10941:19;10933:27;;10970:71;11038:1;11027:9;11023:17;11014:6;10970:71;:::i;:::-;11088:9;11082:4;11078:20;11073:2;11062:9;11058:18;11051:48;11116:78;11189:4;11180:6;11116:78;:::i;:::-;11108:86;;11204:72;11272:2;11261:9;11257:18;11248:6;11204:72;:::i;:::-;11286;11354:2;11343:9;11339:18;11330:6;11286:72;:::i;:::-;11368:73;11436:3;11425:9;11421:19;11412:6;11368:73;:::i;:::-;11451:67;11513:3;11502:9;11498:19;11489:6;11451:67;:::i;:::-;10671:854;;;;;;;;;:::o;11531:140::-;11595:9;11628:37;11659:5;11628:37;:::i;:::-;11615:50;;11531:140;;;:::o;11677:159::-;11778:51;11823:5;11778:51;:::i;:::-;11773:3;11766:64;11677:159;;:::o;11842:250::-;11949:4;11987:2;11976:9;11972:18;11964:26;;12000:85;12082:1;12071:9;12067:17;12058:6;12000:85;:::i;:::-;11842:250;;;;:::o;12098:222::-;12191:4;12229:2;12218:9;12214:18;12206:26;;12242:71;12310:1;12299:9;12295:17;12286:6;12242:71;:::i;:::-;12098:222;;;;:::o;12326:442::-;12475:4;12513:2;12502:9;12498:18;12490:26;;12526:71;12594:1;12583:9;12579:17;12570:6;12526:71;:::i;:::-;12607:72;12675:2;12664:9;12660:18;12651:6;12607:72;:::i;:::-;12689;12757:2;12746:9;12742:18;12733:6;12689:72;:::i;:::-;12326:442;;;;;;:::o;12774:423::-;12915:4;12953:2;12942:9;12938:18;12930:26;;13002:9;12996:4;12992:20;12988:1;12977:9;12973:17;12966:47;13030:78;13103:4;13094:6;13030:78;:::i;:::-;13022:86;;13118:72;13186:2;13175:9;13171:18;13162:6;13118:72;:::i;:::-;12774:423;;;;;:::o;13203:141::-;13297:6;13331:5;13325:12;13315:22;;13203:141;;;:::o;13350:211::-;13476:11;13510:6;13505:3;13498:19;13550:4;13545:3;13541:14;13526:29;;13350:211;;;;:::o;13567:159::-;13661:4;13684:3;13676:11;;13714:4;13709:3;13705:14;13697:22;;13567:159;;;:::o;13732:108::-;13809:24;13827:5;13809:24;:::i;:::-;13804:3;13797:37;13732:108;;:::o;13846:159::-;13920:11;13954:6;13949:3;13942:19;13994:4;13989:3;13985:14;13970:29;;13846:159;;;;:::o;14011:357::-;14089:3;14117:39;14150:5;14117:39;:::i;:::-;14172:61;14226:6;14221:3;14172:61;:::i;:::-;14165:68;;14242:65;14300:6;14295:3;14288:4;14281:5;14277:16;14242:65;:::i;:::-;14332:29;14354:6;14332:29;:::i;:::-;14327:3;14323:39;14316:46;;14093:275;14011:357;;;;:::o;14374:99::-;14445:21;14460:5;14445:21;:::i;:::-;14440:3;14433:34;14374:99;;:::o;14557:967::-;14670:3;14706:4;14701:3;14697:14;14798:4;14791:5;14787:16;14781:23;14817:63;14874:4;14869:3;14865:14;14851:12;14817:63;:::i;:::-;14721:169;14977:4;14970:5;14966:16;14960:23;15030:3;15024:4;15020:14;15013:4;15008:3;15004:14;14997:38;15056:73;15124:4;15110:12;15056:73;:::i;:::-;15048:81;;14900:240;15229:4;15222:5;15218:16;15212:23;15248:63;15305:4;15300:3;15296:14;15282:12;15248:63;:::i;:::-;15150:171;15411:4;15404:5;15400:16;15394:23;15430:57;15481:4;15476:3;15472:14;15458:12;15430:57;:::i;:::-;15331:166;15514:4;15507:11;;14675:849;14557:967;;;;:::o;15530:264::-;15653:10;15688:100;15784:3;15776:6;15688:100;:::i;:::-;15674:114;;15530:264;;;;:::o;15800:140::-;15897:4;15929;15924:3;15920:14;15912:22;;15800:140;;;:::o;16028:1127::-;16201:3;16230:81;16305:5;16230:81;:::i;:::-;16327:113;16433:6;16428:3;16327:113;:::i;:::-;16320:120;;16466:3;16511:4;16503:6;16499:17;16494:3;16490:27;16541:83;16618:5;16541:83;:::i;:::-;16647:7;16678:1;16663:447;16688:6;16685:1;16682:13;16663:447;;;16759:9;16753:4;16749:20;16744:3;16737:33;16810:6;16804:13;16838:118;16951:4;16936:13;16838:118;:::i;:::-;16830:126;;16979:87;17059:6;16979:87;:::i;:::-;16969:97;;17095:4;17090:3;17086:14;17079:21;;16723:387;16710:1;16707;16703:9;16698:14;;16663:447;;;16667:14;17126:4;17119:11;;17146:3;17139:10;;16206:949;;;;;16028:1127;;;;:::o;17161:481::-;17358:4;17396:2;17385:9;17381:18;17373:26;;17445:9;17439:4;17435:20;17431:1;17420:9;17416:17;17409:47;17473:162;17630:4;17621:6;17473:162;:::i;:::-;17465:170;;17161:481;;;;:::o;17648:170::-;17788:22;17784:1;17776:6;17772:14;17765:46;17648:170;:::o;17824:366::-;17966:3;17987:67;18051:2;18046:3;17987:67;:::i;:::-;17980:74;;18063:93;18152:3;18063:93;:::i;:::-;18181:2;18176:3;18172:12;18165:19;;17824:366;;;:::o;18196:419::-;18362:4;18400:2;18389:9;18385:18;18377:26;;18449:9;18443:4;18439:20;18435:1;18424:9;18420:17;18413:47;18477:131;18603:4;18477:131;:::i;:::-;18469:139;;18196:419;;;:::o;18621:165::-;18761:17;18757:1;18749:6;18745:14;18738:41;18621:165;:::o;18792:366::-;18934:3;18955:67;19019:2;19014:3;18955:67;:::i;:::-;18948:74;;19031:93;19120:3;19031:93;:::i;:::-;19149:2;19144:3;19140:12;19133:19;;18792:366;;;:::o;19164:419::-;19330:4;19368:2;19357:9;19353:18;19345:26;;19417:9;19411:4;19407:20;19403:1;19392:9;19388:17;19381:47;19445:131;19571:4;19445:131;:::i;:::-;19437:139;;19164:419;;;:::o;19589:172::-;19729:24;19725:1;19717:6;19713:14;19706:48;19589:172;:::o;19767:366::-;19909:3;19930:67;19994:2;19989:3;19930:67;:::i;:::-;19923:74;;20006:93;20095:3;20006:93;:::i;:::-;20124:2;20119:3;20115:12;20108:19;;19767:366;;;:::o;20139:419::-;20305:4;20343:2;20332:9;20328:18;20320:26;;20392:9;20386:4;20382:20;20378:1;20367:9;20363:17;20356:47;20420:131;20546:4;20420:131;:::i;:::-;20412:139;;20139:419;;;:::o;20564:169::-;20704:21;20700:1;20692:6;20688:14;20681:45;20564:169;:::o;20739:366::-;20881:3;20902:67;20966:2;20961:3;20902:67;:::i;:::-;20895:74;;20978:93;21067:3;20978:93;:::i;:::-;21096:2;21091:3;21087:12;21080:19;;20739:366;;;:::o;21111:419::-;21277:4;21315:2;21304:9;21300:18;21292:26;;21364:9;21358:4;21354:20;21350:1;21339:9;21335:17;21328:47;21392:131;21518:4;21392:131;:::i;:::-;21384:139;;21111:419;;;:::o;21536:180::-;21584:77;21581:1;21574:88;21681:4;21678:1;21671:15;21705:4;21702:1;21695:15;21722:143;21779:5;21810:6;21804:13;21795:22;;21826:33;21853:5;21826:33;:::i;:::-;21722:143;;;;:::o;21871:351::-;21941:6;21990:2;21978:9;21969:7;21965:23;21961:32;21958:119;;;21996:79;;:::i;:::-;21958:119;22116:1;22141:64;22197:7;22188:6;22177:9;22173:22;22141:64;:::i;:::-;22131:74;;22087:128;21871:351;;;;:::o;22228:442::-;22377:4;22415:2;22404:9;22400:18;22392:26;;22428:71;22496:1;22485:9;22481:17;22472:6;22428:71;:::i;:::-;22509:72;22577:2;22566:9;22562:18;22553:6;22509:72;:::i;:::-;22591;22659:2;22648:9;22644:18;22635:6;22591:72;:::i;:::-;22228:442;;;;;;:::o;22676:180::-;22724:77;22721:1;22714:88;22821:4;22818:1;22811:15;22845:4;22842:1;22835:15;22862:180;22910:77;22907:1;22900:88;23007:4;23004:1;22997:15;23031:4;23028:1;23021:15;23048:185;23088:1;23105:20;23123:1;23105:20;:::i;:::-;23100:25;;23139:20;23157:1;23139:20;:::i;:::-;23134:25;;23178:1;23168:35;;23183:18;;:::i;:::-;23168:35;23225:1;23222;23218:9;23213:14;;23048:185;;;;:::o;23239:191::-;23279:3;23298:20;23316:1;23298:20;:::i;:::-;23293:25;;23332:20;23350:1;23332:20;:::i;:::-;23327:25;;23375:1;23372;23368:9;23361:16;;23396:3;23393:1;23390:10;23387:36;;;23403:18;;:::i;:::-;23387:36;23239:191;;;;:::o;23436:410::-;23476:7;23499:20;23517:1;23499:20;:::i;:::-;23494:25;;23533:20;23551:1;23533:20;:::i;:::-;23528:25;;23588:1;23585;23581:9;23610:30;23628:11;23610:30;:::i;:::-;23599:41;;23789:1;23780:7;23776:15;23773:1;23770:22;23750:1;23743:9;23723:83;23700:139;;23819:18;;:::i;:::-;23700:139;23484:362;23436:410;;;;:::o;23852:194::-;23892:4;23912:20;23930:1;23912:20;:::i;:::-;23907:25;;23946:20;23964:1;23946:20;:::i;:::-;23941:25;;23990:1;23987;23983:9;23975:17;;24014:1;24008:4;24005:11;24002:37;;;24019:18;;:::i;:::-;24002:37;23852:194;;;;:::o;24052:171::-;24192:23;24188:1;24180:6;24176:14;24169:47;24052:171;:::o;24229:366::-;24371:3;24392:67;24456:2;24451:3;24392:67;:::i;:::-;24385:74;;24468:93;24557:3;24468:93;:::i;:::-;24586:2;24581:3;24577:12;24570:19;;24229:366;;;:::o;24601:419::-;24767:4;24805:2;24794:9;24790:18;24782:26;;24854:9;24848:4;24844:20;24840:1;24829:9;24825:17;24818:47;24882:131;25008:4;24882:131;:::i;:::-;24874:139;;24601:419;;;:::o;25026:163::-;25166:15;25162:1;25154:6;25150:14;25143:39;25026:163;:::o;25195:366::-;25337:3;25358:67;25422:2;25417:3;25358:67;:::i;:::-;25351:74;;25434:93;25523:3;25434:93;:::i;:::-;25552:2;25547:3;25543:12;25536:19;;25195:366;;;:::o;25567:419::-;25733:4;25771:2;25760:9;25756:18;25748:26;;25820:9;25814:4;25810:20;25806:1;25795:9;25791:17;25784:47;25848:131;25974:4;25848:131;:::i;:::-;25840:139;;25567:419;;;:::o;25992:143::-;26049:5;26080:6;26074:13;26065:22;;26096:33;26123:5;26096:33;:::i;:::-;25992:143;;;;:::o;26141:351::-;26211:6;26260:2;26248:9;26239:7;26235:23;26231:32;26228:119;;;26266:79;;:::i;:::-;26228:119;26386:1;26411:64;26467:7;26458:6;26447:9;26443:22;26411:64;:::i;:::-;26401:74;;26357:128;26141:351;;;;:::o;26498:178::-;26638:30;26634:1;26626:6;26622:14;26615:54;26498:178;:::o;26682:366::-;26824:3;26845:67;26909:2;26904:3;26845:67;:::i;:::-;26838:74;;26921:93;27010:3;26921:93;:::i;:::-;27039:2;27034:3;27030:12;27023:19;;26682:366;;;:::o;27054:419::-;27220:4;27258:2;27247:9;27243:18;27235:26;;27307:9;27301:4;27297:20;27293:1;27282:9;27278:17;27271:47;27335:131;27461:4;27335:131;:::i;:::-;27327:139;;27054:419;;;:::o;27479:332::-;27600:4;27638:2;27627:9;27623:18;27615:26;;27651:71;27719:1;27708:9;27704:17;27695:6;27651:71;:::i;:::-;27732:72;27800:2;27789:9;27785:18;27776:6;27732:72;:::i;:::-;27479:332;;;;;:::o;27817:116::-;27887:21;27902:5;27887:21;:::i;:::-;27880:5;27877:32;27867:60;;27923:1;27920;27913:12;27867:60;27817:116;:::o;27939:137::-;27993:5;28024:6;28018:13;28009:22;;28040:30;28064:5;28040:30;:::i;:::-;27939:137;;;;:::o;28082:345::-;28149:6;28198:2;28186:9;28177:7;28173:23;28169:32;28166:119;;;28204:79;;:::i;:::-;28166:119;28324:1;28349:61;28402:7;28393:6;28382:9;28378:22;28349:61;:::i;:::-;28339:71;;28295:125;28082:345;;;;:::o;28433:179::-;28573:31;28569:1;28561:6;28557:14;28550:55;28433:179;:::o;28618:366::-;28760:3;28781:67;28845:2;28840:3;28781:67;:::i;:::-;28774:74;;28857:93;28946:3;28857:93;:::i;:::-;28975:2;28970:3;28966:12;28959:19;;28618:366;;;:::o;28990:419::-;29156:4;29194:2;29183:9;29179:18;29171:26;;29243:9;29237:4;29233:20;29229:1;29218:9;29214:17;29207:47;29271:131;29397:4;29271:131;:::i;:::-;29263:139;;28990:419;;;:::o;29415:180::-;29463:77;29460:1;29453:88;29560:4;29557:1;29550:15;29584:4;29581:1;29574:15;29601:320;29645:6;29682:1;29676:4;29672:12;29662:22;;29729:1;29723:4;29719:12;29750:18;29740:81;;29806:4;29798:6;29794:17;29784:27;;29740:81;29868:2;29860:6;29857:14;29837:18;29834:38;29831:84;;29887:18;;:::i;:::-;29831:84;29652:269;29601:320;;;:::o;29927:180::-;29975:77;29972:1;29965:88;30072:4;30069:1;30062:15;30096:4;30093:1;30086:15;30113:180;30253:32;30249:1;30241:6;30237:14;30230:56;30113:180;:::o;30299:366::-;30441:3;30462:67;30526:2;30521:3;30462:67;:::i;:::-;30455:74;;30538:93;30627:3;30538:93;:::i;:::-;30656:2;30651:3;30647:12;30640:19;;30299:366;;;:::o;30671:419::-;30837:4;30875:2;30864:9;30860:18;30852:26;;30924:9;30918:4;30914:20;30910:1;30899:9;30895:17;30888:47;30952:131;31078:4;30952:131;:::i;:::-;30944:139;;30671:419;;;:::o;31096:168::-;31236:20;31232:1;31224:6;31220:14;31213:44;31096:168;:::o;31270:366::-;31412:3;31433:67;31497:2;31492:3;31433:67;:::i;:::-;31426:74;;31509:93;31598:3;31509:93;:::i;:::-;31627:2;31622:3;31618:12;31611:19;;31270:366;;;:::o;31642:419::-;31808:4;31846:2;31835:9;31831:18;31823:26;;31895:9;31889:4;31885:20;31881:1;31870:9;31866:17;31859:47;31923:131;32049:4;31923:131;:::i;:::-;31915:139;;31642:419;;;:::o;32067:162::-;32207:14;32203:1;32195:6;32191:14;32184:38;32067:162;:::o;32235:366::-;32377:3;32398:67;32462:2;32457:3;32398:67;:::i;:::-;32391:74;;32474:93;32563:3;32474:93;:::i;:::-;32592:2;32587:3;32583:12;32576:19;;32235:366;;;:::o;32607:419::-;32773:4;32811:2;32800:9;32796:18;32788:26;;32860:9;32854:4;32850:20;32846:1;32835:9;32831:17;32824:47;32888:131;33014:4;32888:131;:::i;:::-;32880:139;;32607:419;;;:::o;33032:179::-;33172:31;33168:1;33160:6;33156:14;33149:55;33032:179;:::o;33217:366::-;33359:3;33380:67;33444:2;33439:3;33380:67;:::i;:::-;33373:74;;33456:93;33545:3;33456:93;:::i;:::-;33574:2;33569:3;33565:12;33558:19;;33217:366;;;:::o;33589:419::-;33755:4;33793:2;33782:9;33778:18;33770:26;;33842:9;33836:4;33832:20;33828:1;33817:9;33813:17;33806:47;33870:131;33996:4;33870:131;:::i;:::-;33862:139;;33589:419;;;:::o;34014:233::-;34053:3;34076:24;34094:5;34076:24;:::i;:::-;34067:33;;34122:66;34115:5;34112:77;34109:103;;34192:18;;:::i;:::-;34109:103;34239:1;34232:5;34228:13;34221:20;;34014:233;;;:::o;34253:172::-;34393:24;34389:1;34381:6;34377:14;34370:48;34253:172;:::o;34431:366::-;34573:3;34594:67;34658:2;34653:3;34594:67;:::i;:::-;34587:74;;34670:93;34759:3;34670:93;:::i;:::-;34788:2;34783:3;34779:12;34772:19;;34431:366;;;:::o;34803:419::-;34969:4;35007:2;34996:9;34992:18;34984:26;;35056:9;35050:4;35046:20;35042:1;35031:9;35027:17;35020:47;35084:131;35210:4;35084:131;:::i;:::-;35076:139;;34803:419;;;:::o;35228:169::-;35368:21;35364:1;35356:6;35352:14;35345:45;35228:169;:::o;35403:366::-;35545:3;35566:67;35630:2;35625:3;35566:67;:::i;:::-;35559:74;;35642:93;35731:3;35642:93;:::i;:::-;35760:2;35755:3;35751:12;35744:19;;35403:366;;;:::o;35775:419::-;35941:4;35979:2;35968:9;35964:18;35956:26;;36028:9;36022:4;36018:20;36014:1;36003:9;35999:17;35992:47;36056:131;36182:4;36056:131;:::i;:::-;36048:139;;35775:419;;;:::o;36200:79::-;36239:7;36268:5;36257:16;;36200:79;;;:::o;36285:157::-;36390:45;36410:24;36428:5;36410:24;:::i;:::-;36390:45;:::i;:::-;36385:3;36378:58;36285:157;;:::o;36448:94::-;36481:8;36529:5;36525:2;36521:14;36500:35;;36448:94;;;:::o;36548:::-;36587:7;36616:20;36630:5;36616:20;:::i;:::-;36605:31;;36548:94;;;:::o;36648:100::-;36687:7;36716:26;36736:5;36716:26;:::i;:::-;36705:37;;36648:100;;;:::o;36754:157::-;36859:45;36879:24;36897:5;36879:24;:::i;:::-;36859:45;:::i;:::-;36854:3;36847:58;36754:157;;:::o;36917:679::-;37113:3;37128:75;37199:3;37190:6;37128:75;:::i;:::-;37228:2;37223:3;37219:12;37212:19;;37241:75;37312:3;37303:6;37241:75;:::i;:::-;37341:2;37336:3;37332:12;37325:19;;37354:75;37425:3;37416:6;37354:75;:::i;:::-;37454:2;37449:3;37445:12;37438:19;;37467:75;37538:3;37529:6;37467:75;:::i;:::-;37567:2;37562:3;37558:12;37551:19;;37587:3;37580:10;;36917:679;;;;;;;:::o;37602:176::-;37634:1;37651:20;37669:1;37651:20;:::i;:::-;37646:25;;37685:20;37703:1;37685:20;:::i;:::-;37680:25;;37724:1;37714:35;;37729:18;;:::i;:::-;37714:35;37770:1;37767;37763:9;37758:14;;37602:176;;;;:::o;37784:181::-;37924:33;37920:1;37912:6;37908:14;37901:57;37784:181;:::o;37971:366::-;38113:3;38134:67;38198:2;38193:3;38134:67;:::i;:::-;38127:74;;38210:93;38299:3;38210:93;:::i;:::-;38328:2;38323:3;38319:12;38312:19;;37971:366;;;:::o;38343:419::-;38509:4;38547:2;38536:9;38532:18;38524:26;;38596:9;38590:4;38586:20;38582:1;38571:9;38567:17;38560:47;38624:131;38750:4;38624:131;:::i;:::-;38616:139;;38343:419;;;:::o;38768:180::-;38816:77;38813:1;38806:88;38913:4;38910:1;38903:15;38937:4;38934:1;38927:15;38954:141;39003:4;39026:3;39018:11;;39049:3;39046:1;39039:14;39083:4;39080:1;39070:18;39062:26;;38954:141;;;:::o;39101:93::-;39138:6;39185:2;39180;39173:5;39169:14;39165:23;39155:33;;39101:93;;;:::o;39200:107::-;39244:8;39294:5;39288:4;39284:16;39263:37;;39200:107;;;;:::o;39313:393::-;39382:6;39432:1;39420:10;39416:18;39455:97;39485:66;39474:9;39455:97;:::i;:::-;39573:39;39603:8;39592:9;39573:39;:::i;:::-;39561:51;;39645:4;39641:9;39634:5;39630:21;39621:30;;39694:4;39684:8;39680:19;39673:5;39670:30;39660:40;;39389:317;;39313:393;;;;;:::o;39712:142::-;39762:9;39795:53;39813:34;39822:24;39840:5;39822:24;:::i;:::-;39813:34;:::i;:::-;39795:53;:::i;:::-;39782:66;;39712:142;;;:::o;39860:75::-;39903:3;39924:5;39917:12;;39860:75;;;:::o;39941:269::-;40051:39;40082:7;40051:39;:::i;:::-;40112:91;40161:41;40185:16;40161:41;:::i;:::-;40153:6;40146:4;40140:11;40112:91;:::i;:::-;40106:4;40099:105;40017:193;39941:269;;;:::o;40216:73::-;40261:3;40282:1;40275:8;;40216:73;:::o;40295:189::-;40372:32;;:::i;:::-;40413:65;40471:6;40463;40457:4;40413:65;:::i;:::-;40348:136;40295:189;;:::o;40490:186::-;40550:120;40567:3;40560:5;40557:14;40550:120;;;40621:39;40658:1;40651:5;40621:39;:::i;:::-;40594:1;40587:5;40583:13;40574:22;;40550:120;;;40490:186;;:::o;40682:543::-;40783:2;40778:3;40775:11;40772:446;;;40817:38;40849:5;40817:38;:::i;:::-;40901:29;40919:10;40901:29;:::i;:::-;40891:8;40887:44;41084:2;41072:10;41069:18;41066:49;;;41105:8;41090:23;;41066:49;41128:80;41184:22;41202:3;41184:22;:::i;:::-;41174:8;41170:37;41157:11;41128:80;:::i;:::-;40787:431;;40772:446;40682:543;;;:::o;41231:117::-;41285:8;41335:5;41329:4;41325:16;41304:37;;41231:117;;;;:::o;41354:169::-;41398:6;41431:51;41479:1;41475:6;41467:5;41464:1;41460:13;41431:51;:::i;:::-;41427:56;41512:4;41506;41502:15;41492:25;;41405:118;41354:169;;;;:::o;41528:295::-;41604:4;41750:29;41775:3;41769:4;41750:29;:::i;:::-;41742:37;;41812:3;41809:1;41805:11;41799:4;41796:21;41788:29;;41528:295;;;;:::o;41828:1395::-;41945:37;41978:3;41945:37;:::i;:::-;42047:18;42039:6;42036:30;42033:56;;;42069:18;;:::i;:::-;42033:56;42113:38;42145:4;42139:11;42113:38;:::i;:::-;42198:67;42258:6;42250;42244:4;42198:67;:::i;:::-;42292:1;42316:4;42303:17;;42348:2;42340:6;42337:14;42365:1;42360:618;;;;43022:1;43039:6;43036:77;;;43088:9;43083:3;43079:19;43073:26;43064:35;;43036:77;43139:67;43199:6;43192:5;43139:67;:::i;:::-;43133:4;43126:81;42995:222;42330:887;;42360:618;42412:4;42408:9;42400:6;42396:22;42446:37;42478:4;42446:37;:::i;:::-;42505:1;42519:208;42533:7;42530:1;42527:14;42519:208;;;42612:9;42607:3;42603:19;42597:26;42589:6;42582:42;42663:1;42655:6;42651:14;42641:24;;42710:2;42699:9;42695:18;42682:31;;42556:4;42553:1;42549:12;42544:17;;42519:208;;;42755:6;42746:7;42743:19;42740:179;;;42813:9;42808:3;42804:19;42798:26;42856:48;42898:4;42890:6;42886:17;42875:9;42856:48;:::i;:::-;42848:6;42841:64;42763:156;42740:179;42965:1;42961;42953:6;42949:14;42945:22;42939:4;42932:36;42367:611;;;42330:887;;41920:1303;;;41828:1395;;:::o;43229:148::-;43331:11;43368:3;43353:18;;43229:148;;;;:::o;43383:161::-;43523:13;43519:1;43511:6;43507:14;43500:37;43383:161;:::o;43550:402::-;43710:3;43731:85;43813:2;43808:3;43731:85;:::i;:::-;43724:92;;43825:93;43914:3;43825:93;:::i;:::-;43943:2;43938:3;43934:12;43927:19;;43550:402;;;:::o;43958:663::-;44199:3;44214:75;44285:3;44276:6;44214:75;:::i;:::-;44314:2;44309:3;44305:12;44298:19;;44327:75;44398:3;44389:6;44327:75;:::i;:::-;44427:2;44422:3;44418:12;44411:19;;44447:148;44591:3;44447:148;:::i;:::-;44440:155;;44612:3;44605:10;;43958:663;;;;;:::o;44627:155::-;44767:7;44763:1;44755:6;44751:14;44744:31;44627:155;:::o;44788:365::-;44930:3;44951:66;45015:1;45010:3;44951:66;:::i;:::-;44944:73;;45026:93;45115:3;45026:93;:::i;:::-;45144:2;45139:3;45135:12;45128:19;;44788:365;;;:::o;45159:738::-;45403:4;45441:3;45430:9;45426:19;45418:27;;45491:9;45485:4;45481:20;45477:1;45466:9;45462:17;45455:47;45519:131;45645:4;45519:131;:::i;:::-;45511:139;;45660:72;45728:2;45717:9;45713:18;45704:6;45660:72;:::i;:::-;45742;45810:2;45799:9;45795:18;45786:6;45742:72;:::i;:::-;45824:66;45886:2;45875:9;45871:18;45862:6;45824:66;:::i;:::-;45159:738;;;;;;:::o;45903:632::-;46094:4;46132:3;46121:9;46117:19;46109:27;;46182:9;46176:4;46172:20;46168:1;46157:9;46153:17;46146:47;46210:78;46283:4;46274:6;46210:78;:::i;:::-;46202:86;;46298:72;46366:2;46355:9;46351:18;46342:6;46298:72;:::i;:::-;46380;46448:2;46437:9;46433:18;46424:6;46380:72;:::i;:::-;46462:66;46524:2;46513:9;46509:18;46500:6;46462:66;:::i;:::-;45903:632;;;;;;;:::o;46541:156::-;46681:8;46677:1;46669:6;46665:14;46658:32;46541:156;:::o;46703:400::-;46863:3;46884:84;46966:1;46961:3;46884:84;:::i;:::-;46877:91;;46977:93;47066:3;46977:93;:::i;:::-;47095:1;47090:3;47086:11;47079:18;;46703:400;;;:::o;47109:522::-;47322:3;47337:75;47408:3;47399:6;47337:75;:::i;:::-;47437:2;47432:3;47428:12;47421:19;;47457:148;47601:3;47457:148;:::i;:::-;47450:155;;47622:3;47615:10;;47109:522;;;;:::o;47637:147::-;47738:11;47775:3;47760:18;;47637:147;;;;:::o;47790:114::-;;:::o;47910:398::-;48069:3;48090:83;48171:1;48166:3;48090:83;:::i;:::-;48083:90;;48182:93;48271:3;48182:93;:::i;:::-;48300:1;48295:3;48291:11;48284:18;;47910:398;;;:::o;48314:379::-;48498:3;48520:147;48663:3;48520:147;:::i;:::-;48513:154;;48684:3;48677:10;;48314:379;;;:::o;48699:400::-;48859:3;48880:84;48962:1;48957:3;48880:84;:::i;:::-;48873:91;;48973:93;49062:3;48973:93;:::i;:::-;49091:1;49086:3;49082:11;49075:18;;48699:400;;;:::o;49105:522::-;49318:3;49333:75;49404:3;49395:6;49333:75;:::i;:::-;49433:2;49428:3;49424:12;49417:19;;49453:148;49597:3;49453:148;:::i;:::-;49446:155;;49618:3;49611:10;;49105:522;;;;:::o;49633:153::-;49773:5;49769:1;49761:6;49757:14;49750:29;49633:153;:::o;49792:400::-;49952:3;49973:84;50055:1;50050:3;49973:84;:::i;:::-;49966:91;;50066:93;50155:3;50066:93;:::i;:::-;50184:1;50179:3;50175:11;50168:18;;49792:400;;;:::o;50198:522::-;50411:3;50426:75;50497:3;50488:6;50426:75;:::i;:::-;50526:2;50521:3;50517:12;50510:19;;50546:148;50690:3;50546:148;:::i;:::-;50539:155;;50711:3;50704:10;;50198:522;;;;:::o;50726:179::-;50866:31;50862:1;50854:6;50850:14;50843:55;50726:179;:::o;50911:366::-;51053:3;51074:67;51138:2;51133:3;51074:67;:::i;:::-;51067:74;;51150:93;51239:3;51150:93;:::i;:::-;51268:2;51263:3;51259:12;51252:19;;50911:366;;;:::o;51283:419::-;51449:4;51487:2;51476:9;51472:18;51464:26;;51536:9;51530:4;51526:20;51522:1;51511:9;51507:17;51500:47;51564:131;51690:4;51564:131;:::i;:::-;51556:139;;51283:419;;;:::o;51708:167::-;51848:19;51844:1;51836:6;51832:14;51825:43;51708:167;:::o;51881:366::-;52023:3;52044:67;52108:2;52103:3;52044:67;:::i;:::-;52037:74;;52120:93;52209:3;52120:93;:::i;:::-;52238:2;52233:3;52229:12;52222:19;;51881:366;;;:::o;52253:419::-;52419:4;52457:2;52446:9;52442:18;52434:26;;52506:9;52500:4;52496:20;52492:1;52481:9;52477:17;52470:47;52534:131;52660:4;52534:131;:::i;:::-;52526:139;;52253:419;;;:::o
Swarm Source
ipfs://5ec08efc6d4016e44868447e6dc31ab159fdb7f6586c02246e678c415bc17a5c
Loading...
Loading
Loading...
Loading
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.