Source Code
Latest 25 from a total of 220 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Collect Eggs | 18704357 | 739 days ago | IN | 0 ETH | 0.00450946 | ||||
| Exit Position | 18679783 | 743 days ago | IN | 0 ETH | 0.01204834 | ||||
| Mint Position | 18679722 | 743 days ago | IN | 0 ETH | 0.02351969 | ||||
| Mint Position | 18679701 | 743 days ago | IN | 0 ETH | 0.02797666 | ||||
| Swap V2 | 18679679 | 743 days ago | IN | 0 ETH | 0.00721017 | ||||
| Wrap ETH | 18615857 | 752 days ago | IN | 0 ETH | 0.00203643 | ||||
| Exit Position | 18589348 | 755 days ago | IN | 0 ETH | 0.00636246 | ||||
| Exit Position | 18589346 | 755 days ago | IN | 0 ETH | 0.00610233 | ||||
| Exit Position | 18589343 | 755 days ago | IN | 0 ETH | 0.00686211 | ||||
| Swap V3 | 18589314 | 755 days ago | IN | 0 ETH | 0.00671229 | ||||
| Mint Position | 18589253 | 755 days ago | IN | 0 ETH | 0.01293899 | ||||
| Mint Position | 18589243 | 755 days ago | IN | 0 ETH | 0.01295023 | ||||
| Mint Position | 18589213 | 755 days ago | IN | 0 ETH | 0.01522872 | ||||
| Swap V3 | 18589205 | 755 days ago | IN | 0 ETH | 0.00301513 | ||||
| Swap V3 | 18589200 | 755 days ago | IN | 0 ETH | 0.00746179 | ||||
| Swap V2 | 18589173 | 755 days ago | IN | 0 ETH | 0.00272717 | ||||
| Wrap ETH | 18589168 | 755 days ago | IN | 0 ETH | 0.00118628 | ||||
| Swap V2 | 18589161 | 755 days ago | IN | 0 ETH | 0.00390185 | ||||
| Swap V2 | 18589154 | 755 days ago | IN | 0 ETH | 0.00362126 | ||||
| Swap V2 | 18589149 | 755 days ago | IN | 0 ETH | 0.00378027 | ||||
| Swap V2 | 18589142 | 755 days ago | IN | 0 ETH | 0.00422607 | ||||
| Swap V2 | 18589137 | 755 days ago | IN | 0 ETH | 0.00380456 | ||||
| Swap V2 | 18589130 | 755 days ago | IN | 0 ETH | 0.00358944 | ||||
| Swap V2 | 18589124 | 755 days ago | IN | 0 ETH | 0.00358762 | ||||
| Exit Position | 18589107 | 755 days ago | IN | 0 ETH | 0.00898431 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Deposit | 18615857 | 752 days ago | 0.01137435 ETH | ||||
| Transfer | 18605061 | 753 days ago | 0.01137435 ETH | ||||
| Deposit | 18589168 | 755 days ago | 0.11959402 ETH | ||||
| Transfer | 18588550 | 755 days ago | 0.1058709 ETH | ||||
| Deposit | 18584460 | 756 days ago | 0.8 ETH | ||||
| Transfer | 18579345 | 757 days ago | 0.33083787 ETH | ||||
| Transfer | 18564659 | 759 days ago | 0.47716117 ETH | ||||
| Deposit | 18561064 | 759 days ago | 2.7 ETH | ||||
| Deposit | 18559665 | 760 days ago | 1 ETH | ||||
| Deposit | 18559453 | 760 days ago | 1 ETH | ||||
| Deposit | 18558870 | 760 days ago | 3 ETH | ||||
| Transfer | 18558832 | 760 days ago | 0.12813931 ETH | ||||
| Transfer | 18558547 | 760 days ago | 4 ETH | ||||
| Deposit | 18556695 | 760 days ago | 5 ETH | ||||
| Deposit | 18554567 | 760 days ago | 5 ETH | ||||
| Deposit | 18544385 | 762 days ago | 1.5 ETH | ||||
| Transfer | 18543770 | 762 days ago | 0.0829157 ETH | ||||
| Transfer | 18542960 | 762 days ago | 5 ETH | ||||
| Transfer | 18542058 | 762 days ago | 0.0025 ETH | ||||
| Transfer | 18539988 | 762 days ago | 1.38812354 ETH | ||||
| Deposit | 18538744 | 762 days ago | 5 ETH | ||||
| Deposit | 18537394 | 763 days ago | 5 ETH | ||||
| Transfer | 18533230 | 763 days ago | 2.06550894 ETH | ||||
| Deposit | 18527784 | 764 days ago | 7 ETH | ||||
| Transfer | 18526112 | 764 days ago | 2.9268842 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XBC_Cock_Coup
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-11-05
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
// 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/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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: bag.sol
pragma solidity 0.8.19;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
}
}
interface IV3SwapRouter {
struct ExactInputSingleParams {
address tokenIn;
address tokenOut;
uint24 fee;
address recipient;
uint256 deadline;
uint256 amountIn;
uint256 amountOutMinimum;
uint160 sqrtPriceLimitX96;
}
function exactInputSingle(ExactInputSingleParams calldata params) external returns (uint256 amountOut);
function factory() external view returns (address);
function positionManager() external view returns (address);
function WETH9() external view returns (address);
}
interface IV3Factory {
function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool);
}
interface IV3Pool {
function initialize(uint160 _sqrtPriceX96) external;
function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint32 feeProtocol, bool unlocked);
}
interface IV3NonfungiblePositionManager {
struct MintParams {
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}
struct IncreaseLiquidityParams {
uint256 tokenId;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
uint256 deadline;
}
struct DecreaseLiquidityParams {
uint256 tokenId;
uint128 liquidity;
uint256 amount0Min;
uint256 amount1Min;
uint256 deadline;
}
struct CollectParams {
uint256 tokenId;
address recipient;
uint128 amount0Max;
uint128 amount1Max;
}
function positions(uint256 tokenId)external view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1);
function mint(MintParams calldata params) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
function increaseLiquidity(IncreaseLiquidityParams calldata params) external payable returns (uint128 liquidity, uint256 amount0, uint256 amount1);
function createAndInitializePoolIfNecessary(address token0, address token1, uint24 fee, uint160 sqrtPriceX96) external payable returns (address pool);
function decreaseLiquidity(DecreaseLiquidityParams calldata params) external payable returns (uint256 amount0, uint256 amount1);
function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1);
function burn(uint256 tokenId) external payable;
}
interface IFactoryV2 {
event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
function getPair(address tokenA, address tokenB) external view returns (address lpPair);
function createPair(address tokenA, address tokenB) external returns (address lpPair);
}
interface IV2Pair {
function factory() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function sync() external;
function token0() external view returns (address);
function token1() external view returns (address);
}
interface IRouter01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to, uint deadline
) external payable returns (uint[] memory amounts);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IRouter02 is IRouter01 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
}
interface IWETH {
function deposit() external payable;
function withdraw(uint256 wad) external;
}
contract XBC_Cock_Coup is Ownable, ReentrancyGuard{
IV3NonfungiblePositionManager public immutable nonfungiblePositionManager;
IV3Factory public immutable V3Factory;
IFactoryV2 public immutable V2Factory;
IV3SwapRouter public immutable V3swapRouter;
IRouter02 public immutable V2swapRouter;
address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // Weth 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
address public constant Dead = 0x000000000000000000000000000000000000dEaD;
IERC20 public XBCToken;
uint256 private tokenId;
uint256 private amount0;
uint256 private amount1;
bool public isCockSet;
mapping(uint256 => Position) public positions;
uint256[] public allTokenIds;
address[] public claimableTokens;
mapping(address => bool) public tokenIsActive;
mapping(address => bool) private _authorizedAccounts;
event AccountAuthorized(address indexed account);
event AccountDeauthorized(address indexed account);
modifier onlyAuthorized() {
require(_authorizedAccounts[msg.sender] || msg.sender == owner(), "Not authorized");
_;
}
struct Position {
address owner;
uint256 tokenId;
address token0;
address token1;
uint24 mintFee;
int24 lowerTick;
int24 upperTick;
bool useV2;
}
constructor(
address _nonfungiblePositionManager,
address _V3Factory,
address _V3swapRouter,
address _V2Factory,
address _V2swapRouter
) {
nonfungiblePositionManager = IV3NonfungiblePositionManager(_nonfungiblePositionManager);
V3Factory = IV3Factory(_V3Factory);
V3swapRouter = IV3SwapRouter(_V3swapRouter);
V2Factory = IFactoryV2 (_V2Factory);
V2swapRouter = IRouter02(_V2swapRouter);
}
receive() external payable {}
function authorizeAccount(address account) external onlyOwner {
require(account != address(0), "Zero address cannot be authorized");
require(!_authorizedAccounts[account], "Account already authorized");
_authorizedAccounts[account] = true;
emit AccountAuthorized(account);
}
// function to deauthorize an account, callable only by the owner
function deauthorizeAccount(address account) external onlyOwner {
require(account != address(0), "Zero address cannot be deauthorized");
require(_authorizedAccounts[account], "Account is not authorized");
_authorizedAccounts[account] = false;
emit AccountDeauthorized(account);
}
// function to check if an account is authorized
function isAccountAuthorized(address account) external view returns (bool) {
return _authorizedAccounts[account];
}
function getAllTokenIds() public view returns (uint256[] memory) {
return allTokenIds;
}
// Wrap Specified Amount of Contract's ETH to WETH
function wrapETH(uint256 amount) external onlyAuthorized {
require(amount <= address(this).balance, "Insufficient ETH balance");
IWETH(WETH).deposit{value: amount}();
}
// Unwrap Specified Amount of Contract's WETH to ETH
function unwrapWETH(uint256 amount) external onlyAuthorized {
require(amount > 0, "Amount must be greater than 0");
IERC20 weth = IERC20(WETH);
require(weth.balanceOf(address(this)) >= amount, "Insufficient WETH balance");
// Ensure that the contract is approved to spend its own WETH
if (weth.allowance(address(this), address(WETH)) < amount) {
weth.approve(address(WETH), amount);
}
IWETH(WETH).withdraw(amount);
}
function createAndInitializePoolIfNecessary(
address _tokenA,
address _tokenB,
uint24 _fee,
uint160 _sqrtPriceX96
) external onlyAuthorized returns (address pool) {
pool = V3Factory.getPool(_tokenA, _tokenB, _fee);
// Create the pool if it doesn't exist
if (pool == address(0)) {
pool = V3Factory.createPool(_tokenA, _tokenB, _fee);
require(pool != address(0), "Failed to create pool");
IV3Pool(pool).initialize(_sqrtPriceX96);
} else {
// Check if the pool is already initialized
(uint160 sqrtPriceX96,,,,,,) = IV3Pool(pool).slot0();
if (sqrtPriceX96 == 0) {
IV3Pool(pool).initialize(_sqrtPriceX96);
}
}
require(pool != address(0), "Pool creation failed");
return pool;
}
function setCock(address _Cock) external onlyOwner {
require(!isCockSet, "Cock can only be set once");
require(_Cock != address(0), "Cock address cannot be zero");
XBCToken = IERC20(_Cock);
isCockSet = true;
}
function onERC721Received(
address,
address,
uint256 _tokenId,
bytes memory
) public virtual returns (bytes4) {
return this.onERC721Received.selector;
}
function getV3poolAddress (address token0, address token1, uint24 poolFee) public view returns (address) {
address poolAddress = V3Factory.getPool(token0, token1, poolFee);
return poolAddress;
}
function getAmountsOut(address inputToken, address outputToken, uint256 amountIn) public view returns (uint256) {
address[] memory path = new address[](2);
path[0] = inputToken;
path[1] = outputToken;
uint256[] memory amounts = V2swapRouter.getAmountsOut(amountIn, path);
return amounts[1];
}
function getLiquidity(uint256 __tokenId) public view returns (uint128 liquidity) {
(, , , , , , , liquidity, , , , ) = nonfungiblePositionManager.positions(__tokenId);
}
function getCurrentTick(address token0, address token1, uint24 poolFee) public view returns (int24) {
address poolAddress = V3Factory.getPool(token0, token1, poolFee);
IV3Pool pool = IV3Pool(poolAddress);
(, int24 currentTick, , , , , ) = pool.slot0();
return currentTick;
}
function _getCurrentTickByTokenId(uint256 tokenIDS) public view returns (int24) {
Position memory position = positions[tokenIDS];
address token0 = position.token0;
address token1 = position.token1;
uint24 poolFee = position.mintFee;
address poolAddress = V3Factory.getPool(token0, token1, poolFee);
IV3Pool pool = IV3Pool(poolAddress);
(, int24 currentTick, , , , , ) = pool.slot0();
return currentTick;
}
function SwapV2(address inputTokens, address outputToken, uint256 amountIn) external onlyAuthorized {
_swapV2(inputTokens, outputToken, amountIn);
}
function SwapV3(address inputToken, address outputToken, uint24 swapFee, uint256 amountIn) external onlyAuthorized {
_swapV3(inputToken, outputToken, swapFee, amountIn);
}
function _swapV2(address inputToken, address outputToken, uint256 amountIn) internal returns (uint256 amountOut) {
require(address(inputToken) != address(XBCToken), "Selling COCK token is not allowed");
if (amountIn == 0) {
return 0;
}
IERC20(inputToken).approve(address(V2swapRouter), amountIn);
address[] memory path = new address[](2);
path[0] = inputToken;
path[1] = outputToken;
uint256 balanceBefore = IERC20(outputToken).balanceOf(address(this));
V2swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
amountIn,
0,
path,
address(this),
block.timestamp + 60
);
amountOut = IERC20(outputToken).balanceOf(address(this)) - balanceBefore;
return amountOut;
}
function _swapV3(address inputToken, address outputToken, uint24 swapFee, uint256 amountIn) internal returns (uint256 amountOut) {
require(address(inputToken) != address(XBCToken), "Selling COCK token is not allowed");
if (amountIn == 0) {
return 0;
}
IERC20(inputToken).approve(address(V3swapRouter), amountIn);
IV3SwapRouter.ExactInputSingleParams memory swapParams = IV3SwapRouter
.ExactInputSingleParams({
tokenIn: inputToken,
tokenOut: outputToken,
fee: swapFee,
recipient: address(this),
deadline: block.timestamp + 600, // Deadline
amountIn: amountIn,
amountOutMinimum: 0,// amountsOut - amountsOut / slippage,
sqrtPriceLimitX96: 0
});
amountOut = V3swapRouter.exactInputSingle(swapParams);
return amountOut;
}
function CollectEggs(uint256 tokenID) external nonReentrant{
_collect(tokenID);
}
function _decreaseLiquidity(uint256 _tokenId) internal returns (uint256 _amount0, uint256 _amount1){
(, , , , , , , uint128 _liquidityt, , , , ) = nonfungiblePositionManager.positions(_tokenId);
// Execute the decrease liquidity operation
(amount0, amount1) = nonfungiblePositionManager.decreaseLiquidity(
IV3NonfungiblePositionManager.DecreaseLiquidityParams({
tokenId: _tokenId,
liquidity: _liquidityt,
amount0Min: 0,
amount1Min: 0,
deadline: block.timestamp + 600 // 10 minutes from the current block time
})
);
return (amount0, amount1);
}
function _collect(uint256 _tokenId) internal returns (uint256 collectedAmount0, uint256 collectedAmount1) {
(collectedAmount0, collectedAmount1) = nonfungiblePositionManager.collect(
IV3NonfungiblePositionManager.CollectParams({
tokenId: _tokenId,
recipient: address(this),
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
return (collectedAmount0, collectedAmount1);
}
function increaseLiquidity(uint256 _tokenId, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min) external onlyAuthorized {
// Get the position details
Position storage position = positions[_tokenId];
// Approve the position manager to pull tokens
IERC20(position.token0).approve(address(nonfungiblePositionManager), amount0Desired);
IERC20(position.token1).approve(address(nonfungiblePositionManager), amount1Desired);
// Set the parameters for the increase liquidity operation
IV3NonfungiblePositionManager.IncreaseLiquidityParams memory params = IV3NonfungiblePositionManager.IncreaseLiquidityParams({
tokenId: _tokenId,
amount0Desired: amount0Desired,
amount1Desired: amount1Desired,
amount0Min: amount0Min,
amount1Min: amount1Min,
deadline: block.timestamp + 600 // 10 minutes from the current block time
});
// Execute the increase liquidity operation
(, amount0, amount1) = nonfungiblePositionManager.increaseLiquidity(params);
}
function mintPosition(address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint256 amount0Desired, uint256 amount1Desired, bool useV2) external onlyAuthorized {
// Approve the position manager to pull tokens
IERC20(token0).approve(address(nonfungiblePositionManager), amount0Desired);
IERC20(token1).approve(address(nonfungiblePositionManager), amount1Desired);
IV3NonfungiblePositionManager.MintParams memory params = IV3NonfungiblePositionManager.MintParams({
token0: token0,
token1: token1,
fee: fee,
tickLower: tickLower,
tickUpper: tickUpper,
amount0Desired: amount0Desired,
amount1Desired: amount1Desired,
amount0Min: 0,
amount1Min: 0,
recipient: address(this),
deadline: block.timestamp + 600 // 10 minutes from the current block time
});
(tokenId,, amount0, amount1) = nonfungiblePositionManager.mint(params);
positions[tokenId] = Position({
owner: address(this),
tokenId: tokenId,
token0: token0,
token1: token1,
mintFee: fee,
lowerTick: tickLower,
upperTick: tickUpper,
useV2: useV2
});
allTokenIds.push(tokenId);
}
function enterPositionSwap(address token0, address token1, uint24 mintFee, int24 lowerTick, int24 upperTick, uint256 swapAmountInEth, bool useV2, uint256 mintSlippage) external onlyAuthorized {
address tokenIn = WETH;
address tokenOut = token0 == WETH ? token1 : token0;
if (useV2) {
_swapV2(tokenIn, tokenOut, swapAmountInEth);
} else {
_swapV3(tokenIn, tokenOut, mintFee, swapAmountInEth);
}
uint256 maxAmount0 = IERC20(token0).balanceOf(address(this));
uint256 maxAmount1 = IERC20(token1).balanceOf(address(this));
TransferHelper.safeApprove(token0, address(nonfungiblePositionManager), maxAmount0);
TransferHelper.safeApprove(token1, address(nonfungiblePositionManager), maxAmount1);
IV3NonfungiblePositionManager.MintParams
memory mintParams = IV3NonfungiblePositionManager.MintParams({
token0: token0,
token1: token1,
fee: mintFee,
tickLower: lowerTick,
tickUpper: upperTick,
amount0Desired: maxAmount0,
amount1Desired: maxAmount1,
amount0Min: maxAmount0 - maxAmount0 / mintSlippage,
amount1Min: maxAmount1 - maxAmount1 / mintSlippage,
recipient: address(this),
deadline: block.timestamp + 600
});
(tokenId, , amount0, amount1) = nonfungiblePositionManager.mint(mintParams);
positions[tokenId] = Position({
owner: address(this),
tokenId: tokenId,
token0: token0,
token1: token1,
mintFee: mintFee,
lowerTick: lowerTick,
upperTick: upperTick,
useV2: useV2
});
allTokenIds.push(tokenId);
}
function exitPosition(uint256 _tokenId) external onlyAuthorized{
nonfungiblePositionManager.collect(
IV3NonfungiblePositionManager.CollectParams({
tokenId: _tokenId,
recipient: address(this),
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
(, , , , , , , uint128 liquidity, , , , ) = nonfungiblePositionManager
.positions(_tokenId);
nonfungiblePositionManager.decreaseLiquidity(
IV3NonfungiblePositionManager.DecreaseLiquidityParams({
tokenId: _tokenId,
liquidity: liquidity,
amount0Min: 0,
amount1Min: 0,
deadline: block.timestamp + 600
})
);
nonfungiblePositionManager.collect(
IV3NonfungiblePositionManager.CollectParams({
tokenId: _tokenId,
recipient: address(this),
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
nonfungiblePositionManager.burn(_tokenId);
for (uint256 i = 0; i < allTokenIds.length; i++) {
if (allTokenIds[i] == _tokenId) {
allTokenIds[i] = allTokenIds[allTokenIds.length - 1];
allTokenIds.pop();
break;
}
}
}
// Function to add a token to the claimable list
function addTokenToClaimable(address _token) external onlyAuthorized {
require(!tokenIsActive[_token], "Token already claimable");
claimableTokens.push(_token);
tokenIsActive[_token] = true;
}
// Function to remove a token from the claimable list
function removeTokenFromClaimable(address _token) external onlyAuthorized {
require(tokenIsActive[_token], "Token not claimable");
tokenIsActive[_token] = false;
// This is a gas-intensive operation because it requires shifting array elements
for (uint256 i = 0; i < claimableTokens.length; i++) {
if (claimableTokens[i] == _token) {
claimableTokens[i] = claimableTokens[claimableTokens.length - 1];
claimableTokens.pop();
break;
}
}
}
function claimFunds(uint256 amountOfXBC) external nonReentrant{
require(amountOfXBC > 0, "Amount must be greater than 0");
uint256 userBalance = XBCToken.balanceOf(msg.sender);
require(userBalance >= amountOfXBC, "Insufficient XBC balance");
XBCToken.transferFrom(msg.sender, Dead, amountOfXBC);
// Calculate the user's share percentage based on the specified amount of COCK
uint256 userSharePercentage = (amountOfXBC * 1e18) / getCirculatingSupply();
for (uint256 i = 0; i < claimableTokens.length; i++) {
address token = claimableTokens[i];
if (!tokenIsActive[token]) continue; // Skip inactive tokens
uint256 tokenBalance = IERC20(token).balanceOf(address(this));
if (tokenBalance == 0) continue; // Skip if no balance
// Calculate claimable amount based on the user's share percentage
uint256 claimableAmount = (tokenBalance * userSharePercentage) / 1e18;
if (claimableAmount > 0) {
IERC20(token).transfer(msg.sender, claimableAmount);
}
}
}
function getCirculatingSupply() public view returns (uint256) {
uint256 totalSupply = XBCToken.totalSupply();
uint256 burnedAmount = XBCToken.balanceOf(address(Dead)); // Assuming address(0) is the burn address
uint256 contractBalance = XBCToken.balanceOf(address(this));
return totalSupply - burnedAmount - contractBalance;
}
struct ClaimableToken {
address tokenAddress;
uint256 claimableAmount;
}
function getClaimableAmounts(address userAddress) public view returns (ClaimableToken[] memory) {
uint256 userBalance = XBCToken.balanceOf(userAddress);
uint256 userSharePercentage = (userBalance * 1e18) / getCirculatingSupply();
ClaimableToken[] memory claimableAmounts = new ClaimableToken[](claimableTokens.length);
for (uint256 i = 0; i < claimableTokens.length; i++) {
address token = claimableTokens[i];
uint256 tokenBalance = IERC20(token).balanceOf(address(this));
// Calculate claimable amount based on the user's share percentage
uint256 claimableAmount = (tokenBalance * userSharePercentage) / 1e18;
claimableAmounts[i] = ClaimableToken({
tokenAddress: token,
claimableAmount: claimableAmount
});
}
return claimableAmounts;
}
function WithdrawERC20( address _contract, address _to) external onlyOwner {
require(!isCockSet, "No withdraw once Cock is set");
uint256 amount = IERC20(_contract).balanceOf(address(this));
IERC20(_contract).transfer(_to, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_nonfungiblePositionManager","type":"address"},{"internalType":"address","name":"_V3Factory","type":"address"},{"internalType":"address","name":"_V3swapRouter","type":"address"},{"internalType":"address","name":"_V2Factory","type":"address"},{"internalType":"address","name":"_V2swapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AccountAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AccountDeauthorized","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"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"CollectEggs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inputTokens","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"SwapV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint24","name":"swapFee","type":"uint24"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"SwapV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"V2Factory","outputs":[{"internalType":"contract IFactoryV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V2swapRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3Factory","outputs":[{"internalType":"contract IV3Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3swapRouter","outputs":[{"internalType":"contract IV3SwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"WithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"XBCToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIDS","type":"uint256"}],"name":"_getCurrentTickByTokenId","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addTokenToClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorizeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfXBC","type":"uint256"}],"name":"claimFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimableTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint24","name":"_fee","type":"uint24"},{"internalType":"uint160","name":"_sqrtPriceX96","type":"uint160"}],"name":"createAndInitializePoolIfNecessary","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"deauthorizeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"mintFee","type":"uint24"},{"internalType":"int24","name":"lowerTick","type":"int24"},{"internalType":"int24","name":"upperTick","type":"int24"},{"internalType":"uint256","name":"swapAmountInEth","type":"uint256"},{"internalType":"bool","name":"useV2","type":"bool"},{"internalType":"uint256","name":"mintSlippage","type":"uint256"}],"name":"enterPositionSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"exitPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllTokenIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getClaimableAmounts","outputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"claimableAmount","type":"uint256"}],"internalType":"struct XBC_Cock_Coup.ClaimableToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"poolFee","type":"uint24"}],"name":"getCurrentTick","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"__tokenId","type":"uint256"}],"name":"getLiquidity","outputs":[{"internalType":"uint128","name":"liquidity","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"poolFee","type":"uint24"}],"name":"getV3poolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"}],"name":"increaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAccountAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCockSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"bool","name":"useV2","type":"bool"}],"name":"mintPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonfungiblePositionManager","outputs":[{"internalType":"contract IV3NonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"positions","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"mintFee","type":"uint24"},{"internalType":"int24","name":"lowerTick","type":"int24"},{"internalType":"int24","name":"upperTick","type":"int24"},{"internalType":"bool","name":"useV2","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"removeTokenFromClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_Cock","type":"address"}],"name":"setCock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrapWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wrapETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6101206040523480156200001257600080fd5b5060405162004c1238038062004c128339810160408190526200003591620000db565b62000040336200006e565b600180556001600160a01b0394851660805292841660a05290831660e052821660c05216610100526200014b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000d657600080fd5b919050565b600080600080600060a08688031215620000f457600080fd5b620000ff86620000be565b94506200010f60208701620000be565b93506200011f60408701620000be565b92506200012f60608701620000be565b91506200013f60808701620000be565b90509295509295909350565b60805160a05160c05160e051610100516149cc620002466000396000818161078f0152818161189c01528181613aaf0152613c0b01526000818161027e0152818161371501526138650152600061047501526000818161060301528181610a1a01528181610abb0152818161116a015281816115430152611e5001526000818161080b01528181611a2b01528181611abc01528181611b3f01528181611c7a01528181611d0801528181611f7501528181612063015281816120f5015281816121ff0152818161297f015281816129aa01528181612a8601528181612eb001528181612f480152818161303c01526139ca01526149cc6000f3fe6080604052600436106102605760003560e01c80638da5cb5b11610144578063b44a2722116100b6578063d304277b1161007a578063d304277b146108af578063d6281921146108cf578063d62a853a146108ff578063ef10a2f71461092c578063f018a8c11461094c578063f2fde38b1461096c57600080fd5b8063b44a2722146107f9578063bc4a05051461082d578063bdbed7221461084d578063c04bc3521461086f578063c691b0a11461088f57600080fd5b8063a44616ec11610108578063a44616ec1461071d578063a9996e6c1461073d578063a9a8679b1461075d578063a9bbe4b61461077d578063abb6555a146107b1578063ad5c4648146107d157600080fd5b80638da5cb5b1461059b578063951583c3146105b957806397d56997146105f157806399fbab8814610625578063a2c1a3c3146106fd57600080fd5b806330ce76fa116101dd5780635d0d1ae2116101a15780635d0d1ae2146104f0578063715018a61461051057806378dc9059146105255780637d07b2d21461054557806382c4767b146105655780638b17c5bf1461057b57600080fd5b806330ce76fa1461041057806331c4e1251461044357806341690d571461046357806345608d001461049757806347539058146104b757600080fd5b80631c58db4f116102245780631c58db4f1461036357806326872330146103835780632689a5d2146103ad5780632a66f4bf146103cd5780632b112e49146103ed57600080fd5b80630165b0a41461026c5780630217ce49146102bd57806313ead562146102dd578063150b7a02146102fd5780631b55e3381461034157600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c957600080fd5b506102a06102d8366004613e09565b61098c565b3480156102e957600080fd5b506102a06102f8366004613e48565b6109b6565b34801561030957600080fd5b50610328610318366004613eeb565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102b4565b34801561034d57600080fd5b5061036161035c366004613e09565b610d17565b005b34801561036f57600080fd5b5061036161037e366004613e09565b611066565b34801561038f57600080fd5b5060065461039d9060ff1681565b60405190151581526020016102b4565b3480156103b957600080fd5b506102a06103c8366004613faf565b611165565b3480156103d957600080fd5b506103616103e8366004613ffa565b611204565b3480156103f957600080fd5b50610402611318565b6040519081526020016102b4565b34801561041c57600080fd5b5061043061042b366004613e09565b611497565b60405160029190910b81526020016102b4565b34801561044f57600080fd5b5061036161045e366004613ffa565b61163c565b34801561046f57600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a357600080fd5b506104026104b2366004614017565b611807565b3480156104c357600080fd5b5061039d6104d2366004613ffa565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104fc57600080fd5b5061036161050b366004614058565b611940565b34801561051c57600080fd5b50610361611997565b34801561053157600080fd5b50610361610540366004613e09565b6119ab565b34801561055157600080fd5b50610402610560366004613e09565b611e2a565b34801561057157600080fd5b506102a061dead81565b34801561058757600080fd5b50610430610596366004613faf565b611e4b565b3480156105a757600080fd5b506000546001600160a01b03166102a0565b3480156105c557600080fd5b506105d96105d4366004613e09565b611f5c565b6040516001600160801b0390911681526020016102b4565b3480156105fd57600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063157600080fd5b506106a4610640366004613e09565b6007602052600090815260409020805460018201546002808401546003909401546001600160a01b0393841694929392831692811691600160a01b820462ffffff1691600160b81b8104820b91600160d01b8204900b90600160e81b900460ff1688565b604080516001600160a01b03998a16815260208101989098529588169587019590955292909516606085015262ffffff166080840152600293840b60a084015290920b60c082015290151560e0820152610100016102b4565b34801561070957600080fd5b506103616107183660046140c6565b611ffb565b34801561072957600080fd5b5061036161073836600461415d565b612470565b34801561074957600080fd5b50610361610758366004613e09565b6125b0565b34801561076957600080fd5b50610361610778366004613ffa565b6125cc565b34801561078957600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156107bd57600080fd5b506103616107cc366004613ffa565b6126e9565b3480156107dd57600080fd5b506102a073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561080557600080fd5b506102a07f000000000000000000000000000000000000000000000000000000000000000081565b34801561083957600080fd5b50610361610848366004614196565b612804565b34801561085957600080fd5b50610862612cfb565b6040516102b4919061422d565b34801561087b57600080fd5b5061036161088a366004613ffa565b612d53565b34801561089b57600080fd5b506103616108aa366004614271565b612e33565b3480156108bb57600080fd5b506103616108ca366004614017565b6130c1565b3480156108db57600080fd5b5061039d6108ea366004613ffa565b600a6020526000908152604090205460ff1681565b34801561090b57600080fd5b5061091f61091a366004613ffa565b613110565b6040516102b491906142ac565b34801561093857600080fd5b506002546102a0906001600160a01b031681565b34801561095857600080fd5b50610361610967366004613e09565b61332a565b34801561097857600080fd5b50610361610987366004613ffa565b6135e1565b6009818154811061099c57600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600b602052604081205460ff16806109de57506000546001600160a01b031633145b610a035760405162461bcd60e51b81526004016109fa90614304565b60405180910390fd5b604051630b4c774160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290610a539088908890889060040161432c565b602060405180830381865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190614364565b90506001600160a01b038116610be75760405163a167129560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a167129590610af49088908890889060040161432c565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190614364565b90506001600160a01b038116610b875760405162461bcd60e51b815260206004820152601560248201527411985a5b1959081d1bc818dc99585d19481c1bdbdb605a1b60448201526064016109fa565b60405163f637731d60e01b81526001600160a01b03838116600483015282169063f637731d90602401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b50505050610cc2565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b919061439e565b5050505050509050806001600160a01b0316600003610cc05760405163f637731d60e01b81526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050505b505b6001600160a01b038116610d0f5760405162461bcd60e51b8152602060048201526014602482015273141bdbdb0818dc99585d1a5bdb8819985a5b195960621b60448201526064016109fa565b949350505050565b610d1f613657565b60008111610d6f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6002546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190614439565b905081811015610e2e5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74205842432062616c616e6365000000000000000060448201526064016109fa565b6002546040516323b872dd60e01b815233600482015261dead6024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab9190614452565b506000610eb6611318565b610ec884670de0b6b3a7640000614485565b610ed291906144a2565b905060005b60095481101561105757600060098281548110610ef657610ef66144c4565b60009182526020808320909101546001600160a01b0316808352600a90915260409091205490915060ff16610f2b5750611045565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190614439565b905080600003610fa7575050611045565b6000670de0b6b3a7640000610fbc8684614485565b610fc691906144a2565b905080156110415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610ffc90339085906004016144da565b6020604051808303816000875af115801561101b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103f9190614452565b505b5050505b8061104f816144f3565b915050610ed7565b50505061106360018055565b50565b336000908152600b602052604090205460ff168061108e57506000546001600160a01b031633145b6110aa5760405162461bcd60e51b81526004016109fa90614304565b478111156110fa5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016109fa565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b81526004016111b89392919061432c565b602060405180830381865afa1580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f99190614364565b9150505b9392505050565b336000908152600b602052604090205460ff168061122c57506000546001600160a01b031633145b6112485760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff16156112b15760405162461bcd60e51b815260206004820152601760248201527f546f6b656e20616c726561647920636c61696d61626c6500000000000000000060448201526064016109fa565b6009805460018181019092557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b039093166001600160a01b0319909316831790556000918252600a6020526040909120805460ff19169091179055565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190614439565b6002546040516370a0823160e01b815261dead60048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190614439565b6002546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190614439565b905080611485838561450c565b61148f919061450c565b935050505090565b600081815260076020908152604080832081516101008101835281546001600160a01b039081168252600183015494820194909452600280830154851682850181905260039093015480861660608401819052600160a01b820462ffffff1660808501819052600160b81b8304840b60a0860152600160d01b830490930b60c0850152600160e81b90910460ff16151560e08401529351630b4c774160e11b81529194929392909186917f00000000000000000000000000000000000000000000000000000000000000001690631698ee829061157c9087908790879060040161432c565b602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611628919061439e565b50939e9d5050505050505050505050505050565b336000908152600b602052604090205460ff168061166457506000546001600160a01b031633145b6116805760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff166116de5760405162461bcd60e51b8152602060048201526013602482015272546f6b656e206e6f7420636c61696d61626c6560681b60448201526064016109fa565b6001600160a01b0381166000908152600a60205260408120805460ff191690555b60095481101561180357816001600160a01b031660098281548110611726576117266144c4565b6000918252602090912001546001600160a01b0316036117f157600980546117509060019061450c565b81548110611760576117606144c4565b600091825260209091200154600980546001600160a01b03909216918390811061178c5761178c6144c4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806117cb576117cb61451f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806117fb816144f3565b9150506116ff565b5050565b604080516002808252606082018352600092839291906020830190803683370190505090508481600081518110611840576118406144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611874576118746144c4565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f906118d39087908690600401614579565b600060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119189190810190614592565b90508060018151811061192d5761192d6144c4565b6020026020010151925050509392505050565b336000908152600b602052604090205460ff168061196857506000546001600160a01b031633145b6119845760405162461bcd60e51b81526004016109fa90614304565b611990848484846136b0565b5050505050565b61199f6138df565b6119a96000613939565b565b336000908152600b602052604090205460ff16806119d357506000546001600160a01b031633145b6119ef5760405162461bcd60e51b81526004016109fa90614304565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f786591611a5f9190600401614638565b60408051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa1919061467b565b505060405163133f757160e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3091906146c1565b505050509750505050505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c49ccbe6040518060a00160405280858152602001846001600160801b03168152602001600081526020016000815260200142610258611ba891906147a2565b9052604080516001600160e01b031960e085901b1681528251600482015260208301516001600160801b0316602482015290820151604482015260608201516064820152608090910151608482015260a40160408051808303816000875af1158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c919061467b565b5050604080516080810182528381523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f786591611cae9190600401614638565b60408051808303816000875af1158015611ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf0919061467b565b5050604051630852cd8d60e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611d5457600080fd5b505af1158015611d68573d6000803e3d6000fd5b5050505060005b600854811015611e25578260088281548110611d8d57611d8d6144c4565b906000526020600020015403611e135760088054611dad9060019061450c565b81548110611dbd57611dbd6144c4565b906000526020600020015460088281548110611ddb57611ddb6144c4565b6000918252602090912001556008805480611df857611df861451f565b60019003818190600052602060002001600090559055505050565b80611e1d816144f3565b915050611d6f565b505050565b60088181548110611e3a57600080fd5b600091825260209091200154905081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b8152600401611e9e9392919061432c565b602060405180830381865afa158015611ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edf9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4a919061439e565b50939c9b505050505050505050505050565b60405163133f757160e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe991906146c1565b50929c9b505050505050505050505050565b336000908152600b602052604090205460ff168061202357506000546001600160a01b031633145b61203f5760405162461bcd60e51b81526004016109fa90614304565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b39061208d907f00000000000000000000000000000000000000000000000000000000000000009087906004016144da565b6020604051808303816000875af11580156120ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d09190614452565b5060405163095ea7b360e01b81526001600160a01b0388169063095ea7b39061211f907f00000000000000000000000000000000000000000000000000000000000000009086906004016144da565b6020604051808303816000875af115801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190614452565b5060006040518061016001604052808a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b81526020018581526020018481526020016000815260200160008152602001306001600160a01b03168152602001426102586121e391906147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906388316456906122349084906004016147b5565b6080604051808303816000875af1158015612253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122779190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b815260200183151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff02191690831515021790555090505060086003549080600181540180825580915050600190039060005260206000200160009091909190915055505050505050505050565b6124786138df565b60065460ff16156124cb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f207769746864726177206f6e636520436f636b206973207365740000000060448201526064016109fa565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125369190614439565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb9061256790859085906004016144da565b6020604051808303816000875af1158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa9190614452565b50505050565b6125b8613657565b6125c181613989565b505061106360018055565b6125d46138df565b6001600160a01b0381166126345760405162461bcd60e51b815260206004820152602160248201527f5a65726f20616464726573732063616e6e6f7420626520617574686f72697a656044820152601960fa1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff161561269d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920617574686f72697a656400000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19166001179055517f10e4428e2647e1f920c2b46454982af8924babe9f09c0c629254a87a3b06d9ab9190a250565b6126f16138df565b6001600160a01b0381166127535760405162461bcd60e51b815260206004820152602360248201527f5a65726f20616464726573732063616e6e6f74206265206465617574686f72696044820152621e995960ea1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff166127bb5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e74206973206e6f7420617574686f72697a65640000000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055517fc2e0a577963cbf13d6b3b04206effff57f0b291f749f2b6623784d061a070f889190a250565b336000908152600b602052604090205460ff168061282c57506000546001600160a01b031633145b6128485760405162461bcd60e51b81526004016109fa90614304565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260006001600160a01b038a1682146128755789612877565b885b905083156128905761288a828287613a4a565b5061289e565b61289c82828a886136b0565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156128e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129099190614439565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015612953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129779190614439565b90506129a48c7f000000000000000000000000000000000000000000000000000000000000000084613d06565b6129cf8b7f000000000000000000000000000000000000000000000000000000000000000083613d06565b60006040518061016001604052808e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b81526020018481526020018381526020018785612a3091906144a2565b612a3a908661450c565b8152602001612a4988856144a2565b612a53908561450c565b8152306020820152604001612a6a426102586147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638831645690612abb9084906004016147b5565b6080604051808303816000875af1158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe9190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b815260200188151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff0219169083151502179055509050506008600354908060018154018082558091505060019003906000526020600020016000909190919091505550505050505050505050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015612d4957602002820191906000526020600020905b815481526020019060010190808311612d35575b5050505050905090565b612d5b6138df565b60065460ff1615612dae5760405162461bcd60e51b815260206004820152601960248201527f436f636b2063616e206f6e6c7920626520736574206f6e63650000000000000060448201526064016109fa565b6001600160a01b038116612e045760405162461bcd60e51b815260206004820152601b60248201527f436f636b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064016109fa565b600280546001600160a01b0319166001600160a01b03929092169190911790556006805460ff19166001179055565b336000908152600b602052604090205460ff1680612e5b57506000546001600160a01b031633145b612e775760405162461bcd60e51b81526004016109fa90614304565b600085815260076020526040908190206002810154915163095ea7b360e01b815290916001600160a01b03169063095ea7b390612eda907f00000000000000000000000000000000000000000000000000000000000000009089906004016144da565b6020604051808303816000875af1158015612ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1d9190614452565b50600381015460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612f72907f00000000000000000000000000000000000000000000000000000000000000009088906004016144da565b6020604051808303816000875af1158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb59190614452565b5060006040518060c0016040528088815260200187815260200186815260200185815260200184815260200142610258612fef91906147a2565b90526040805163219f5d1760e01b81528251600482015260208301516024820152908201516044820152606082015160648201526080820151608482015260a082015160a48201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063219f5d179060c4016060604051808303816000875af115801561308d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b191906148b5565b6005556004555050505050505050565b336000908152600b602052604090205460ff16806130e957506000546001600160a01b031633145b6131055760405162461bcd60e51b81526004016109fa90614304565b6125aa838383613a4a565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a0823190602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190614439565b9050600061318f611318565b6131a183670de0b6b3a7640000614485565b6131ab91906144a2565b60095490915060009067ffffffffffffffff8111156131cc576131cc613ea4565b60405190808252806020026020018201604052801561321157816020015b60408051808201909152600080825260208201528152602001906001900390816131ea5790505b50905060005b60095481101561332157600060098281548110613236576132366144c4565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015613289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ad9190614439565b90506000670de0b6b3a76400006132c48784614485565b6132ce91906144a2565b90506040518060400160405280846001600160a01b0316815260200182815250858581518110613300576133006144c4565b60200260200101819052505050508080613319906144f3565b915050613217565b50949350505050565b336000908152600b602052604090205460ff168061335257506000546001600160a01b031633145b61336e5760405162461bcd60e51b81526004016109fa90614304565b600081116133be5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290829082906370a0823190602401602060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134359190614439565b10156134835760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e63650000000000000060448201526064016109fa565b604051636eb1769f60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135079190614439565b10156135945760405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061354f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29086906004016144da565b6020604051808303816000875af115801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614452565b505b604051632e1a7d4d60e01b81526004810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b15801561114957600080fd5b6135e96138df565b6001600160a01b03811661364e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b61106381613939565b6002600154036136a95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109fa565b6002600155565b6002546000906001600160a01b03908116908616036136e15760405162461bcd60e51b81526004016109fa906148ea565b816000036136f157506000610d0f565b60405163095ea7b360e01b81526001600160a01b0386169063095ea7b39061373f907f00000000000000000000000000000000000000000000000000000000000000009086906004016144da565b6020604051808303816000875af115801561375e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137829190614452565b506000604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020018562ffffff168152602001306001600160a01b03168152602001426102586137d791906147a2565b8152602080820186905260006040808401829052606093840191909152805163414bf38960e01b815284516001600160a01b03908116600483015292850151831660248201529084015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c083015160c483015260e0830151811660e48301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063414bf38990610104016020604051808303816000875af11580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614439565b9695505050505050565b6000546001600160a01b031633146119a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b815260009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fc6f7865916139fe9190600401614638565b60408051808303816000875af1158015613a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a40919061467b565b9094909350915050565b6002546000906001600160a01b0390811690851603613a7b5760405162461bcd60e51b81526004016109fa906148ea565b81600003613a8b575060006111fd565b60405163095ea7b360e01b81526001600160a01b0385169063095ea7b390613ad9907f00000000000000000000000000000000000000000000000000000000000000009086906004016144da565b6020604051808303816000875af1158015613af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1c9190614452565b506040805160028082526060820183526000926020830190803683370190505090508481600081518110613b5257613b526144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613b8657613b866144c4565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918616906370a0823190602401602060405180830381865afa158015613bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bff9190614439565b90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635c11d7958560008530613c4042603c6147a2565b6040518663ffffffff1660e01b8152600401613c6095949392919061492b565b600060405180830381600087803b158015613c7a57600080fd5b505af1158015613c8e573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03881691506370a0823190602401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc9190614439565b6138d5919061450c565b600080846001600160a01b031663095ea7b360e01b8585604051602401613d2e9291906144da565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613d6c9190614967565b6000604051808303816000865af19150503d8060008114613da9576040519150601f19603f3d011682016040523d82523d6000602084013e613dae565b606091505b5091509150818015613dd8575080511580613dd8575080806020019051810190613dd89190614452565b6119905760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016109fa565b600060208284031215613e1b57600080fd5b5035919050565b6001600160a01b038116811461106357600080fd5b62ffffff8116811461106357600080fd5b60008060008060808587031215613e5e57600080fd5b8435613e6981613e22565b93506020850135613e7981613e22565b92506040850135613e8981613e37565b91506060850135613e9981613e22565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ee357613ee3613ea4565b604052919050565b60008060008060808587031215613f0157600080fd5b8435613f0c81613e22565b9350602085810135613f1d81613e22565b935060408601359250606086013567ffffffffffffffff80821115613f4157600080fd5b818801915088601f830112613f5557600080fd5b813581811115613f6757613f67613ea4565b613f79601f8201601f19168501613eba565b91508082528984828501011115613f8f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080600060608486031215613fc457600080fd5b8335613fcf81613e22565b92506020840135613fdf81613e22565b91506040840135613fef81613e37565b809150509250925092565b60006020828403121561400c57600080fd5b81356111fd81613e22565b60008060006060848603121561402c57600080fd5b833561403781613e22565b9250602084013561404781613e22565b929592945050506040919091013590565b6000806000806080858703121561406e57600080fd5b843561407981613e22565b9350602085013561408981613e22565b9250604085013561409981613e37565b9396929550929360600135925050565b8060020b811461106357600080fd5b801515811461106357600080fd5b600080600080600080600080610100898b0312156140e357600080fd5b88356140ee81613e22565b975060208901356140fe81613e22565b9650604089013561410e81613e37565b9550606089013561411e816140a9565b9450608089013561412e816140a9565b935060a0890135925060c0890135915060e089013561414c816140b8565b809150509295985092959890939650565b6000806040838503121561417057600080fd5b823561417b81613e22565b9150602083013561418b81613e22565b809150509250929050565b600080600080600080600080610100898b0312156141b357600080fd5b88356141be81613e22565b975060208901356141ce81613e22565b965060408901356141de81613e37565b955060608901356141ee816140a9565b945060808901356141fe816140a9565b935060a0890135925060c0890135614215816140b8565b8092505060e089013590509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561426557835183529284019291840191600101614249565b50909695505050505050565b600080600080600060a0868803121561428957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825282518282018190526000919060409081850190868401855b828110156142f757815180516001600160a01b031685528601518685015292840192908501906001016142c9565b5091979650505050505050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b805161435f81613e22565b919050565b60006020828403121561437657600080fd5b81516111fd81613e22565b805161435f816140a9565b805161ffff8116811461435f57600080fd5b600080600080600080600060e0888a0312156143b957600080fd5b87516143c481613e22565b60208901519097506143d5816140a9565b95506143e36040890161438c565b94506143f16060890161438c565b93506143ff6080890161438c565b925060a088015163ffffffff8116811461441857600080fd5b60c0890151909250614429816140b8565b8091505092959891949750929550565b60006020828403121561444b57600080fd5b5051919050565b60006020828403121561446457600080fd5b81516111fd816140b8565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761449c5761449c61446f565b92915050565b6000826144bf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000600182016145055761450561446f565b5060010190565b8181038181111561449c5761449c61446f565b634e487b7160e01b600052603160045260246000fd5b600081518084526020808501945080840160005b8381101561456e5781516001600160a01b031687529582019590820190600101614549565b509495945050505050565b828152604060208201526000610d0f6040830184614535565b600060208083850312156145a557600080fd5b825167ffffffffffffffff808211156145bd57600080fd5b818501915085601f8301126145d157600080fd5b8151818111156145e3576145e3613ea4565b8060051b91506145f4848301613eba565b818152918301840191848101908884111561460e57600080fd5b938501935b8385101561462c57845182529385019390850190614613565b98975050505050505050565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b6000806040838503121561468e57600080fd5b505080516020909101519092909150565b805161435f81613e37565b80516001600160801b038116811461435f57600080fd5b6000806000806000806000806000806000806101808d8f0312156146e457600080fd5b8c516bffffffffffffffffffffffff8116811461470057600080fd5b9b5061470e60208e01614354565b9a5061471c60408e01614354565b995061472a60608e01614354565b985061473860808e0161469f565b975061474660a08e01614381565b965061475460c08e01614381565b955061476260e08e016146aa565b94506101008d015193506101208d015192506147816101408e016146aa565b91506147906101608e016146aa565b90509295989b509295989b509295989b565b8082018082111561449c5761449c61446f565b81516001600160a01b03168152610160810160208301516147e160208401826001600160a01b03169052565b5060408301516147f8604084018262ffffff169052565b50606083015161480d606084018260020b9052565b506080830151614822608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614868828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561488f57600080fd5b8451935061489f602086016146aa565b6040860151606090960151949790965092505050565b6000806000606084860312156148ca57600080fd5b6148d3846146aa565b925060208401519150604084015190509250925092565b60208082526021908201527f53656c6c696e6720434f434b20746f6b656e206973206e6f7420616c6c6f77656040820152601960fa1b606082015260800190565b85815284602082015260a06040820152600061494a60a0830186614535565b6001600160a01b0394909416606083015250608001529392505050565b6000825160005b81811015614988576020818601810151858301520161496e565b50600092019182525091905056fea26469706673582212208e65e89c6a397554b980dc77ccb027e32b134f9a7425b2d5213630d1f7ef45b164736f6c63430008130033000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106102605760003560e01c80638da5cb5b11610144578063b44a2722116100b6578063d304277b1161007a578063d304277b146108af578063d6281921146108cf578063d62a853a146108ff578063ef10a2f71461092c578063f018a8c11461094c578063f2fde38b1461096c57600080fd5b8063b44a2722146107f9578063bc4a05051461082d578063bdbed7221461084d578063c04bc3521461086f578063c691b0a11461088f57600080fd5b8063a44616ec11610108578063a44616ec1461071d578063a9996e6c1461073d578063a9a8679b1461075d578063a9bbe4b61461077d578063abb6555a146107b1578063ad5c4648146107d157600080fd5b80638da5cb5b1461059b578063951583c3146105b957806397d56997146105f157806399fbab8814610625578063a2c1a3c3146106fd57600080fd5b806330ce76fa116101dd5780635d0d1ae2116101a15780635d0d1ae2146104f0578063715018a61461051057806378dc9059146105255780637d07b2d21461054557806382c4767b146105655780638b17c5bf1461057b57600080fd5b806330ce76fa1461041057806331c4e1251461044357806341690d571461046357806345608d001461049757806347539058146104b757600080fd5b80631c58db4f116102245780631c58db4f1461036357806326872330146103835780632689a5d2146103ad5780632a66f4bf146103cd5780632b112e49146103ed57600080fd5b80630165b0a41461026c5780630217ce49146102bd57806313ead562146102dd578063150b7a02146102fd5780631b55e3381461034157600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102a07f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c957600080fd5b506102a06102d8366004613e09565b61098c565b3480156102e957600080fd5b506102a06102f8366004613e48565b6109b6565b34801561030957600080fd5b50610328610318366004613eeb565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102b4565b34801561034d57600080fd5b5061036161035c366004613e09565b610d17565b005b34801561036f57600080fd5b5061036161037e366004613e09565b611066565b34801561038f57600080fd5b5060065461039d9060ff1681565b60405190151581526020016102b4565b3480156103b957600080fd5b506102a06103c8366004613faf565b611165565b3480156103d957600080fd5b506103616103e8366004613ffa565b611204565b3480156103f957600080fd5b50610402611318565b6040519081526020016102b4565b34801561041c57600080fd5b5061043061042b366004613e09565b611497565b60405160029190910b81526020016102b4565b34801561044f57600080fd5b5061036161045e366004613ffa565b61163c565b34801561046f57600080fd5b506102a07f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b3480156104a357600080fd5b506104026104b2366004614017565b611807565b3480156104c357600080fd5b5061039d6104d2366004613ffa565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104fc57600080fd5b5061036161050b366004614058565b611940565b34801561051c57600080fd5b50610361611997565b34801561053157600080fd5b50610361610540366004613e09565b6119ab565b34801561055157600080fd5b50610402610560366004613e09565b611e2a565b34801561057157600080fd5b506102a061dead81565b34801561058757600080fd5b50610430610596366004613faf565b611e4b565b3480156105a757600080fd5b506000546001600160a01b03166102a0565b3480156105c557600080fd5b506105d96105d4366004613e09565b611f5c565b6040516001600160801b0390911681526020016102b4565b3480156105fd57600080fd5b506102a07f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98481565b34801561063157600080fd5b506106a4610640366004613e09565b6007602052600090815260409020805460018201546002808401546003909401546001600160a01b0393841694929392831692811691600160a01b820462ffffff1691600160b81b8104820b91600160d01b8204900b90600160e81b900460ff1688565b604080516001600160a01b03998a16815260208101989098529588169587019590955292909516606085015262ffffff166080840152600293840b60a084015290920b60c082015290151560e0820152610100016102b4565b34801561070957600080fd5b506103616107183660046140c6565b611ffb565b34801561072957600080fd5b5061036161073836600461415d565b612470565b34801561074957600080fd5b50610361610758366004613e09565b6125b0565b34801561076957600080fd5b50610361610778366004613ffa565b6125cc565b34801561078957600080fd5b506102a07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107bd57600080fd5b506103616107cc366004613ffa565b6126e9565b3480156107dd57600080fd5b506102a073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561080557600080fd5b506102a07f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8881565b34801561083957600080fd5b50610361610848366004614196565b612804565b34801561085957600080fd5b50610862612cfb565b6040516102b4919061422d565b34801561087b57600080fd5b5061036161088a366004613ffa565b612d53565b34801561089b57600080fd5b506103616108aa366004614271565b612e33565b3480156108bb57600080fd5b506103616108ca366004614017565b6130c1565b3480156108db57600080fd5b5061039d6108ea366004613ffa565b600a6020526000908152604090205460ff1681565b34801561090b57600080fd5b5061091f61091a366004613ffa565b613110565b6040516102b491906142ac565b34801561093857600080fd5b506002546102a0906001600160a01b031681565b34801561095857600080fd5b50610361610967366004613e09565b61332a565b34801561097857600080fd5b50610361610987366004613ffa565b6135e1565b6009818154811061099c57600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600b602052604081205460ff16806109de57506000546001600160a01b031633145b610a035760405162461bcd60e51b81526004016109fa90614304565b60405180910390fd5b604051630b4c774160e11b81526001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841690631698ee8290610a539088908890889060040161432c565b602060405180830381865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190614364565b90506001600160a01b038116610be75760405163a167129560e01b81526001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984169063a167129590610af49088908890889060040161432c565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190614364565b90506001600160a01b038116610b875760405162461bcd60e51b815260206004820152601560248201527411985a5b1959081d1bc818dc99585d19481c1bdbdb605a1b60448201526064016109fa565b60405163f637731d60e01b81526001600160a01b03838116600483015282169063f637731d90602401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b50505050610cc2565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b919061439e565b5050505050509050806001600160a01b0316600003610cc05760405163f637731d60e01b81526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050505b505b6001600160a01b038116610d0f5760405162461bcd60e51b8152602060048201526014602482015273141bdbdb0818dc99585d1a5bdb8819985a5b195960621b60448201526064016109fa565b949350505050565b610d1f613657565b60008111610d6f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6002546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190614439565b905081811015610e2e5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74205842432062616c616e6365000000000000000060448201526064016109fa565b6002546040516323b872dd60e01b815233600482015261dead6024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab9190614452565b506000610eb6611318565b610ec884670de0b6b3a7640000614485565b610ed291906144a2565b905060005b60095481101561105757600060098281548110610ef657610ef66144c4565b60009182526020808320909101546001600160a01b0316808352600a90915260409091205490915060ff16610f2b5750611045565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190614439565b905080600003610fa7575050611045565b6000670de0b6b3a7640000610fbc8684614485565b610fc691906144a2565b905080156110415760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610ffc90339085906004016144da565b6020604051808303816000875af115801561101b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103f9190614452565b505b5050505b8061104f816144f3565b915050610ed7565b50505061106360018055565b50565b336000908152600b602052604090205460ff168061108e57506000546001600160a01b031633145b6110aa5760405162461bcd60e51b81526004016109fa90614304565b478111156110fa5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482062616c616e6365000000000000000060448201526064016109fa565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b505050505050565b6000807f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846001600160a01b0316631698ee828686866040518463ffffffff1660e01b81526004016111b89392919061432c565b602060405180830381865afa1580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f99190614364565b9150505b9392505050565b336000908152600b602052604090205460ff168061122c57506000546001600160a01b031633145b6112485760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff16156112b15760405162461bcd60e51b815260206004820152601760248201527f546f6b656e20616c726561647920636c61696d61626c6500000000000000000060448201526064016109fa565b6009805460018181019092557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b039093166001600160a01b0319909316831790556000918252600a6020526040909120805460ff19169091179055565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190614439565b6002546040516370a0823160e01b815261dead60048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190614439565b6002546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190614439565b905080611485838561450c565b61148f919061450c565b935050505090565b600081815260076020908152604080832081516101008101835281546001600160a01b039081168252600183015494820194909452600280830154851682850181905260039093015480861660608401819052600160a01b820462ffffff1660808501819052600160b81b8304840b60a0860152600160d01b830490930b60c0850152600160e81b90910460ff16151560e08401529351630b4c774160e11b81529194929392909186917f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841690631698ee829061157c9087908790879060040161432c565b602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611628919061439e565b50939e9d5050505050505050505050505050565b336000908152600b602052604090205460ff168061166457506000546001600160a01b031633145b6116805760405162461bcd60e51b81526004016109fa90614304565b6001600160a01b0381166000908152600a602052604090205460ff166116de5760405162461bcd60e51b8152602060048201526013602482015272546f6b656e206e6f7420636c61696d61626c6560681b60448201526064016109fa565b6001600160a01b0381166000908152600a60205260408120805460ff191690555b60095481101561180357816001600160a01b031660098281548110611726576117266144c4565b6000918252602090912001546001600160a01b0316036117f157600980546117509060019061450c565b81548110611760576117606144c4565b600091825260209091200154600980546001600160a01b03909216918390811061178c5761178c6144c4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806117cb576117cb61451f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806117fb816144f3565b9150506116ff565b5050565b604080516002808252606082018352600092839291906020830190803683370190505090508481600081518110611840576118406144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611874576118746144c4565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d06ca61f906118d39087908690600401614579565b600060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119189190810190614592565b90508060018151811061192d5761192d6144c4565b6020026020010151925050509392505050565b336000908152600b602052604090205460ff168061196857506000546001600160a01b031633145b6119845760405162461bcd60e51b81526004016109fa90614304565b611990848484846136b0565b5050505050565b61199f6138df565b6119a96000613939565b565b336000908152600b602052604090205460ff16806119d357506000546001600160a01b031633145b6119ef5760405162461bcd60e51b81526004016109fa90614304565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f786591611a5f9190600401614638565b60408051808303816000875af1158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa1919061467b565b505060405163133f757160e31b8152600481018290526000907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316906399fbab889060240161018060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3091906146c1565b505050509750505050505050507f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316630c49ccbe6040518060a00160405280858152602001846001600160801b03168152602001600081526020016000815260200142610258611ba891906147a2565b9052604080516001600160e01b031960e085901b1681528251600482015260208301516001600160801b0316602482015290820151604482015260608201516064820152608090910151608482015260a40160408051808303816000875af1158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c919061467b565b5050604080516080810182528381523060208201526001600160801b038183018190526060820152905163fc6f786560e01b81526001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f786591611cae9190600401614638565b60408051808303816000875af1158015611ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf0919061467b565b5050604051630852cd8d60e31b8152600481018390527f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316906342966c6890602401600060405180830381600087803b158015611d5457600080fd5b505af1158015611d68573d6000803e3d6000fd5b5050505060005b600854811015611e25578260088281548110611d8d57611d8d6144c4565b906000526020600020015403611e135760088054611dad9060019061450c565b81548110611dbd57611dbd6144c4565b906000526020600020015460088281548110611ddb57611ddb6144c4565b6000918252602090912001556008805480611df857611df861451f565b60019003818190600052602060002001600090559055505050565b80611e1d816144f3565b915050611d6f565b505050565b60088181548110611e3a57600080fd5b600091825260209091200154905081565b6000807f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846001600160a01b0316631698ee828686866040518463ffffffff1660e01b8152600401611e9e9392919061432c565b602060405180830381865afa158015611ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edf9190614364565b905060008190506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4a919061439e565b50939c9b505050505050505050505050565b60405163133f757160e31b8152600481018290526000907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b0316906399fbab889060240161018060405180830381865afa158015611fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe991906146c1565b50929c9b505050505050505050505050565b336000908152600b602052604090205460ff168061202357506000546001600160a01b031633145b61203f5760405162461bcd60e51b81526004016109fa90614304565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b39061208d907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889087906004016144da565b6020604051808303816000875af11580156120ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d09190614452565b5060405163095ea7b360e01b81526001600160a01b0388169063095ea7b39061211f907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889086906004016144da565b6020604051808303816000875af115801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190614452565b5060006040518061016001604052808a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b81526020018581526020018481526020016000815260200160008152602001306001600160a01b03168152602001426102586121e391906147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8816906388316456906122349084906004016147b5565b6080604051808303816000875af1158015612253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122779190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018a6001600160a01b03168152602001896001600160a01b031681526020018862ffffff1681526020018760020b81526020018660020b815260200183151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff02191690831515021790555090505060086003549080600181540180825580915050600190039060005260206000200160009091909190915055505050505050505050565b6124786138df565b60065460ff16156124cb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f207769746864726177206f6e636520436f636b206973207365740000000060448201526064016109fa565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125369190614439565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb9061256790859085906004016144da565b6020604051808303816000875af1158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa9190614452565b50505050565b6125b8613657565b6125c181613989565b505061106360018055565b6125d46138df565b6001600160a01b0381166126345760405162461bcd60e51b815260206004820152602160248201527f5a65726f20616464726573732063616e6e6f7420626520617574686f72697a656044820152601960fa1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff161561269d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920617574686f72697a656400000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19166001179055517f10e4428e2647e1f920c2b46454982af8924babe9f09c0c629254a87a3b06d9ab9190a250565b6126f16138df565b6001600160a01b0381166127535760405162461bcd60e51b815260206004820152602360248201527f5a65726f20616464726573732063616e6e6f74206265206465617574686f72696044820152621e995960ea1b60648201526084016109fa565b6001600160a01b0381166000908152600b602052604090205460ff166127bb5760405162461bcd60e51b815260206004820152601960248201527f4163636f756e74206973206e6f7420617574686f72697a65640000000000000060448201526064016109fa565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055517fc2e0a577963cbf13d6b3b04206effff57f0b291f749f2b6623784d061a070f889190a250565b336000908152600b602052604090205460ff168061282c57506000546001600160a01b031633145b6128485760405162461bcd60e51b81526004016109fa90614304565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260006001600160a01b038a1682146128755789612877565b885b905083156128905761288a828287613a4a565b5061289e565b61289c82828a886136b0565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa1580156128e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129099190614439565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015612953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129779190614439565b90506129a48c7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8884613d06565b6129cf8b7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8883613d06565b60006040518061016001604052808e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b81526020018481526020018381526020018785612a3091906144a2565b612a3a908661450c565b8152602001612a4988856144a2565b612a53908561450c565b8152306020820152604001612a6a426102586147a2565b9052604051634418b22b60e11b81529091506001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe881690638831645690612abb9084906004016147b5565b6080604051808303816000875af1158015612ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afe9190614879565b909150600360006004600060056000869190505585919050558491905055505050604051806101000160405280306001600160a01b0316815260200160035481526020018e6001600160a01b031681526020018d6001600160a01b031681526020018c62ffffff1681526020018b60020b81526020018a60020b815260200188151581525060076000600354815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160030160146101000a81548162ffffff021916908362ffffff16021790555060a08201518160030160176101000a81548162ffffff021916908360020b62ffffff16021790555060c082015181600301601a6101000a81548162ffffff021916908360020b62ffffff16021790555060e082015181600301601d6101000a81548160ff0219169083151502179055509050506008600354908060018154018082558091505060019003906000526020600020016000909190919091505550505050505050505050505050565b60606008805480602002602001604051908101604052809291908181526020018280548015612d4957602002820191906000526020600020905b815481526020019060010190808311612d35575b5050505050905090565b612d5b6138df565b60065460ff1615612dae5760405162461bcd60e51b815260206004820152601960248201527f436f636b2063616e206f6e6c7920626520736574206f6e63650000000000000060448201526064016109fa565b6001600160a01b038116612e045760405162461bcd60e51b815260206004820152601b60248201527f436f636b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064016109fa565b600280546001600160a01b0319166001600160a01b03929092169190911790556006805460ff19166001179055565b336000908152600b602052604090205460ff1680612e5b57506000546001600160a01b031633145b612e775760405162461bcd60e51b81526004016109fa90614304565b600085815260076020526040908190206002810154915163095ea7b360e01b815290916001600160a01b03169063095ea7b390612eda907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889089906004016144da565b6020604051808303816000875af1158015612ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1d9190614452565b50600381015460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390612f72907f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe889088906004016144da565b6020604051808303816000875af1158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb59190614452565b5060006040518060c0016040528088815260200187815260200186815260200185815260200184815260200142610258612fef91906147a2565b90526040805163219f5d1760e01b81528251600482015260208301516024820152908201516044820152606082015160648201526080820151608482015260a082015160a48201529091507f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b03169063219f5d179060c4016060604051808303816000875af115801561308d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b191906148b5565b6005556004555050505050505050565b336000908152600b602052604090205460ff16806130e957506000546001600160a01b031633145b6131055760405162461bcd60e51b81526004016109fa90614304565b6125aa838383613a4a565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a0823190602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190614439565b9050600061318f611318565b6131a183670de0b6b3a7640000614485565b6131ab91906144a2565b60095490915060009067ffffffffffffffff8111156131cc576131cc613ea4565b60405190808252806020026020018201604052801561321157816020015b60408051808201909152600080825260208201528152602001906001900390816131ea5790505b50905060005b60095481101561332157600060098281548110613236576132366144c4565b60009182526020822001546040516370a0823160e01b81523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015613289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ad9190614439565b90506000670de0b6b3a76400006132c48784614485565b6132ce91906144a2565b90506040518060400160405280846001600160a01b0316815260200182815250858581518110613300576133006144c4565b60200260200101819052505050508080613319906144f3565b915050613217565b50949350505050565b336000908152600b602052604090205460ff168061335257506000546001600160a01b031633145b61336e5760405162461bcd60e51b81526004016109fa90614304565b600081116133be5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016109fa565b6040516370a0823160e01b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290829082906370a0823190602401602060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134359190614439565b10156134835760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420574554482062616c616e63650000000000000060448201526064016109fa565b604051636eb1769f60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135079190614439565b10156135945760405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061354f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29086906004016144da565b6020604051808303816000875af115801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614452565b505b604051632e1a7d4d60e01b81526004810183905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b15801561114957600080fd5b6135e96138df565b6001600160a01b03811661364e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b61106381613939565b6002600154036136a95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109fa565b6002600155565b6002546000906001600160a01b03908116908616036136e15760405162461bcd60e51b81526004016109fa906148ea565b816000036136f157506000610d0f565b60405163095ea7b360e01b81526001600160a01b0386169063095ea7b39061373f907f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649086906004016144da565b6020604051808303816000875af115801561375e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137829190614452565b506000604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020018562ffffff168152602001306001600160a01b03168152602001426102586137d791906147a2565b8152602080820186905260006040808401829052606093840191909152805163414bf38960e01b815284516001600160a01b03908116600483015292850151831660248201529084015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c083015160c483015260e0830151811660e48301529192507f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063414bf38990610104016020604051808303816000875af11580156138b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d59190614439565b9695505050505050565b6000546001600160a01b031633146119a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516080810182528281523060208201526001600160801b038183018190526060820152905163fc6f786560e01b815260009182916001600160a01b037f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88169163fc6f7865916139fe9190600401614638565b60408051808303816000875af1158015613a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a40919061467b565b9094909350915050565b6002546000906001600160a01b0390811690851603613a7b5760405162461bcd60e51b81526004016109fa906148ea565b81600003613a8b575060006111fd565b60405163095ea7b360e01b81526001600160a01b0385169063095ea7b390613ad9907f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9086906004016144da565b6020604051808303816000875af1158015613af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1c9190614452565b506040805160028082526060820183526000926020830190803683370190505090508481600081518110613b5257613b526144c4565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613b8657613b866144c4565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918616906370a0823190602401602060405180830381865afa158015613bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bff9190614439565b90506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16635c11d7958560008530613c4042603c6147a2565b6040518663ffffffff1660e01b8152600401613c6095949392919061492b565b600060405180830381600087803b158015613c7a57600080fd5b505af1158015613c8e573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03881691506370a0823190602401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc9190614439565b6138d5919061450c565b600080846001600160a01b031663095ea7b360e01b8585604051602401613d2e9291906144da565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613d6c9190614967565b6000604051808303816000865af19150503d8060008114613da9576040519150601f19603f3d011682016040523d82523d6000602084013e613dae565b606091505b5091509150818015613dd8575080511580613dd8575080806020019051810190613dd89190614452565b6119905760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016109fa565b600060208284031215613e1b57600080fd5b5035919050565b6001600160a01b038116811461106357600080fd5b62ffffff8116811461106357600080fd5b60008060008060808587031215613e5e57600080fd5b8435613e6981613e22565b93506020850135613e7981613e22565b92506040850135613e8981613e37565b91506060850135613e9981613e22565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ee357613ee3613ea4565b604052919050565b60008060008060808587031215613f0157600080fd5b8435613f0c81613e22565b9350602085810135613f1d81613e22565b935060408601359250606086013567ffffffffffffffff80821115613f4157600080fd5b818801915088601f830112613f5557600080fd5b813581811115613f6757613f67613ea4565b613f79601f8201601f19168501613eba565b91508082528984828501011115613f8f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080600060608486031215613fc457600080fd5b8335613fcf81613e22565b92506020840135613fdf81613e22565b91506040840135613fef81613e37565b809150509250925092565b60006020828403121561400c57600080fd5b81356111fd81613e22565b60008060006060848603121561402c57600080fd5b833561403781613e22565b9250602084013561404781613e22565b929592945050506040919091013590565b6000806000806080858703121561406e57600080fd5b843561407981613e22565b9350602085013561408981613e22565b9250604085013561409981613e37565b9396929550929360600135925050565b8060020b811461106357600080fd5b801515811461106357600080fd5b600080600080600080600080610100898b0312156140e357600080fd5b88356140ee81613e22565b975060208901356140fe81613e22565b9650604089013561410e81613e37565b9550606089013561411e816140a9565b9450608089013561412e816140a9565b935060a0890135925060c0890135915060e089013561414c816140b8565b809150509295985092959890939650565b6000806040838503121561417057600080fd5b823561417b81613e22565b9150602083013561418b81613e22565b809150509250929050565b600080600080600080600080610100898b0312156141b357600080fd5b88356141be81613e22565b975060208901356141ce81613e22565b965060408901356141de81613e37565b955060608901356141ee816140a9565b945060808901356141fe816140a9565b935060a0890135925060c0890135614215816140b8565b8092505060e089013590509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561426557835183529284019291840191600101614249565b50909695505050505050565b600080600080600060a0868803121561428957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825282518282018190526000919060409081850190868401855b828110156142f757815180516001600160a01b031685528601518685015292840192908501906001016142c9565b5091979650505050505050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b805161435f81613e22565b919050565b60006020828403121561437657600080fd5b81516111fd81613e22565b805161435f816140a9565b805161ffff8116811461435f57600080fd5b600080600080600080600060e0888a0312156143b957600080fd5b87516143c481613e22565b60208901519097506143d5816140a9565b95506143e36040890161438c565b94506143f16060890161438c565b93506143ff6080890161438c565b925060a088015163ffffffff8116811461441857600080fd5b60c0890151909250614429816140b8565b8091505092959891949750929550565b60006020828403121561444b57600080fd5b5051919050565b60006020828403121561446457600080fd5b81516111fd816140b8565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761449c5761449c61446f565b92915050565b6000826144bf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b6000600182016145055761450561446f565b5060010190565b8181038181111561449c5761449c61446f565b634e487b7160e01b600052603160045260246000fd5b600081518084526020808501945080840160005b8381101561456e5781516001600160a01b031687529582019590820190600101614549565b509495945050505050565b828152604060208201526000610d0f6040830184614535565b600060208083850312156145a557600080fd5b825167ffffffffffffffff808211156145bd57600080fd5b818501915085601f8301126145d157600080fd5b8151818111156145e3576145e3613ea4565b8060051b91506145f4848301613eba565b818152918301840191848101908884111561460e57600080fd5b938501935b8385101561462c57845182529385019390850190614613565b98975050505050505050565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b6000806040838503121561468e57600080fd5b505080516020909101519092909150565b805161435f81613e37565b80516001600160801b038116811461435f57600080fd5b6000806000806000806000806000806000806101808d8f0312156146e457600080fd5b8c516bffffffffffffffffffffffff8116811461470057600080fd5b9b5061470e60208e01614354565b9a5061471c60408e01614354565b995061472a60608e01614354565b985061473860808e0161469f565b975061474660a08e01614381565b965061475460c08e01614381565b955061476260e08e016146aa565b94506101008d015193506101208d015192506147816101408e016146aa565b91506147906101608e016146aa565b90509295989b509295989b509295989b565b8082018082111561449c5761449c61446f565b81516001600160a01b03168152610160810160208301516147e160208401826001600160a01b03169052565b5060408301516147f8604084018262ffffff169052565b50606083015161480d606084018260020b9052565b506080830151614822608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614868828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561488f57600080fd5b8451935061489f602086016146aa565b6040860151606090960151949790965092505050565b6000806000606084860312156148ca57600080fd5b6148d3846146aa565b925060208401519150604084015190509250925092565b60208082526021908201527f53656c6c696e6720434f434b20746f6b656e206973206e6f7420616c6c6f77656040820152601960fa1b606082015260800190565b85815284602082015260a06040820152600061494a60a0830186614535565b6001600160a01b0394909416606083015250608001529392505050565b6000825160005b81811015614988576020818601810151858301520161496e565b50600092019182525091905056fea26469706673582212208e65e89c6a397554b980dc77ccb027e32b134f9a7425b2d5213630d1f7ef45b164736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe880000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000e592427a0aece92de3edee1f18e0157c058615640000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _nonfungiblePositionManager (address): 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Arg [1] : _V3Factory (address): 0x1F98431c8aD98523631AE4a59f267346ea31F984
Arg [2] : _V3swapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [3] : _V2Factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [4] : _V2swapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88
Arg [1] : 0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
Arg [2] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [3] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
13885:20176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14113:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;199:32:1;;;181:51;;169:2;154:18;14113:43:0;;;;;;;;14677:32;;;;;;;;;;-1:-1:-1;14677:32:0;;;;;:::i;:::-;;:::i;17767:904::-;;;;;;;;;;-1:-1:-1;17767:904:0;;;;;:::i;:::-;;:::i;18944:219::-;;;;;;;;;;-1:-1:-1;18944:219:0;;;;;:::i;:::-;-1:-1:-1;;;18944:219:0;;;;;;;;;;-1:-1:-1;;;;;;3366:33:1;;;3348:52;;3336:2;3321:18;18944:219:0;3204:202:1;31237:1184:0;;;;;;;;;;-1:-1:-1;31237:1184:0;;;;;:::i;:::-;;:::i;:::-;;16991:201;;;;;;;;;;-1:-1:-1;16991:201:0;;;;;:::i;:::-;;:::i;14552:21::-;;;;;;;;;;-1:-1:-1;14552:21:0;;;;;;;;;;;3576:14:1;;3569:22;3551:41;;3539:2;3524:18;14552:21:0;3411:187:1;19171:217:0;;;;;;;;;;-1:-1:-1;19171:217:0;;;;;:::i;:::-;;:::i;30376:224::-;;;;;;;;;;-1:-1:-1;30376:224:0;;;;;:::i;:::-;;:::i;32435:367::-;;;;;;;;;;;;;:::i;:::-;;;4533:25:1;;;4521:2;4506:18;32435:367:0;4387:177:1;20261:486:0;;;;;;;;;;-1:-1:-1;20261:486:0;;;;;:::i;:::-;;:::i;:::-;;;4836:1:1;4825:21;;;;4807:40;;4795:2;4780:18;20261:486:0;4665:188:1;30667:562:0;;;;;;;;;;-1:-1:-1;30667:562:0;;;;;:::i;:::-;;:::i;14069:37::-;;;;;;;;;;;;;;;19398:332;;;;;;;;;;-1:-1:-1;19398:332:0;;;;;:::i;:::-;;:::i;16685:129::-;;;;;;;;;;-1:-1:-1;16685:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;16778:28:0;16754:4;16778:28;;;:19;:28;;;;;;;;;16685:129;20932:183;;;;;;;;;;-1:-1:-1;20932:183:0;;;;;:::i;:::-;;:::i;6076:103::-;;;;;;;;;;;;;:::i;28825:1486::-;;;;;;;;;;-1:-1:-1;28825:1486:0;;;;;:::i;:::-;;:::i;14640:28::-;;;;;;;;;;-1:-1:-1;14640:28:0;;;;;:::i;:::-;;:::i;14345:73::-;;;;;;;;;;;;14376:42;14345:73;;19932:321;;;;;;;;;;-1:-1:-1;19932:321:0;;;;;:::i;:::-;;:::i;5428:87::-;;;;;;;;;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;5428:87;;19738:183;;;;;;;;;;-1:-1:-1;19738:183:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6310:47:1;;;6292:66;;6280:2;6265:18;19738:183:0;6146:218:1;14025:37:0;;;;;;;;;;;;;;;14588:45;;;;;;;;;;-1:-1:-1;14588:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14588:45:0;;;;;;;;;;;;;-1:-1:-1;;;14588:45:0;;;;;-1:-1:-1;;;14588:45:0;;;;;-1:-1:-1;;;14588:45:0;;;;;-1:-1:-1;;;14588:45:0;;;;;;;;;;-1:-1:-1;;;;;7075:15:1;;;7057:34;;7122:2;7107:18;;7100:34;;;;7170:15;;;7150:18;;;7143:43;;;;7222:15;;;;7217:2;7202:18;;7195:43;7287:8;7275:21;7269:3;7254:19;;7247:50;7345:1;7334:21;;;7037:3;7313:19;;7306:50;7393:21;;;7387:3;7372:19;;7365:50;7459:14;;7452:22;7446:3;7431:19;;7424:51;7006:3;6991:19;14588:45:0;6692:789:1;25583:1339:0;;;;;;;;;;-1:-1:-1;25583:1339:0;;;;;:::i;:::-;;:::i;33789:265::-;;;;;;;;;;-1:-1:-1;33789:265:0;;;;;:::i;:::-;;:::i;23062:93::-;;;;;;;;;;-1:-1:-1;23062:93:0;;;;;:::i;:::-;;:::i;15907:319::-;;;;;;;;;;-1:-1:-1;15907:319:0;;;;;:::i;:::-;;:::i;14165:39::-;;;;;;;;;;;;;;;16302:324;;;;;;;;;;-1:-1:-1;16302:324:0;;;;;:::i;:::-;;:::i;14213:73::-;;;;;;;;;;;;14244:42;14213:73;;13945;;;;;;;;;;;;;;;26930:1887;;;;;;;;;;-1:-1:-1;26930:1887:0;;;;;:::i;:::-;;:::i;16825:102::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18685:251::-;;;;;;;;;;-1:-1:-1;18685:251:0;;;;;:::i;:::-;;:::i;24417:1156::-;;;;;;;;;;-1:-1:-1;24417:1156:0;;;;;:::i;:::-;;:::i;20764:160::-;;;;;;;;;;-1:-1:-1;20764:160:0;;;;;:::i;:::-;;:::i;14716:45::-;;;;;;;;;;-1:-1:-1;14716:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32905:876;;;;;;;;;;-1:-1:-1;32905:876:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14426:22::-;;;;;;;;;;-1:-1:-1;14426:22:0;;;;-1:-1:-1;;;;;14426:22:0;;;17258:501;;;;;;;;;;-1:-1:-1;17258:501:0;;;;;:::i;:::-;;:::i;6334:201::-;;;;;;;;;;-1:-1:-1;6334:201:0;;;;;:::i;:::-;;:::i;14677:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14677:32:0;;-1:-1:-1;14677:32:0;:::o;17767:904::-;15008:10;17960:12;14988:31;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;;;;;;;;;17992:41:::1;::::0;-1:-1:-1;;;17992:41:0;;-1:-1:-1;;;;;17992:9:0::1;:17;::::0;::::1;::::0;:41:::1;::::0;18010:7;;18019;;18028:4;;17992:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17985:48:::0;-1:-1:-1;;;;;;18106:18:0;::::1;18102:476;;18148:44;::::0;-1:-1:-1;;;18148:44:0;;-1:-1:-1;;;;;18148:9:0::1;:20;::::0;::::1;::::0;:44:::1;::::0;18169:7;;18178;;18187:4;;18148:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18141:51:::0;-1:-1:-1;;;;;;18215:18:0;::::1;18207:52;;;::::0;-1:-1:-1;;;18207:52:0;;14247:2:1;18207:52:0::1;::::0;::::1;14229:21:1::0;14286:2;14266:18;;;14259:30;-1:-1:-1;;;14305:18:1;;;14298:51;14366:18;;18207:52:0::1;14045:345:1::0;18207:52:0::1;18274:39;::::0;-1:-1:-1;;;18274:39:0;;-1:-1:-1;;;;;199:32:1;;;18274:39:0::1;::::0;::::1;181:51:1::0;18274:24:0;::::1;::::0;::::1;::::0;154:18:1;;18274:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18102:476;;;18404:20;18442:4;-1:-1:-1::0;;;;;18434:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18403:52;;;;;;;;18474:12;-1:-1:-1::0;;;;;18474:17:0::1;18490:1;18474:17:::0;18470:97:::1;;18512:39;::::0;-1:-1:-1;;;18512:39:0;;-1:-1:-1;;;;;199:32:1;;;18512:39:0::1;::::0;::::1;181:51:1::0;18512:24:0;::::1;::::0;::::1;::::0;154:18:1;;18512:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18470:97;18331:247;18102:476;-1:-1:-1::0;;;;;18598:18:0;::::1;18590:51;;;::::0;-1:-1:-1;;;18590:51:0;;16044:2:1;18590:51:0::1;::::0;::::1;16026:21:1::0;16083:2;16063:18;;;16056:30;-1:-1:-1;;;16102:18:1;;;16095:50;16162:18;;18590:51:0::1;15842:344:1::0;18590:51:0::1;17767:904:::0;;;;;;:::o;31237:1184::-;2405:21;:19;:21::i;:::-;31332:1:::1;31318:11;:15;31310:57;;;::::0;-1:-1:-1;;;31310:57:0;;16393:2:1;31310:57:0::1;::::0;::::1;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:31;16451:18;;;16444:59;16520:18;;31310:57:0::1;16191:353:1::0;31310:57:0::1;31400:8;::::0;:30:::1;::::0;-1:-1:-1;;;31400:30:0;;31419:10:::1;31400:30;::::0;::::1;181:51:1::0;31378:19:0::1;::::0;-1:-1:-1;;;;;31400:8:0::1;::::0;:18:::1;::::0;154::1;;31400:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31378:52;;31464:11;31449;:26;;31441:63;;;::::0;-1:-1:-1;;;31441:63:0;;16940:2:1;31441:63:0::1;::::0;::::1;16922:21:1::0;16979:2;16959:18;;;16952:30;17018:26;16998:18;;;16991:54;17062:18;;31441:63:0::1;16738:348:1::0;31441:63:0::1;31521:8;::::0;:52:::1;::::0;-1:-1:-1;;;31521:52:0;;31543:10:::1;31521:52;::::0;::::1;17331:34:1::0;14376:42:0::1;17381:18:1::0;;;17374:43;17433:18;;;17426:34;;;-1:-1:-1;;;;;31521:8:0;;::::1;::::0;:21:::1;::::0;17266:18:1;;31521:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31676:27;31729:22;:20;:22::i;:::-;31707:18;:11:::0;31721:4:::1;31707:18;:::i;:::-;31706:45;;;;:::i;:::-;31676:75;;31769:9;31764:650;31788:15;:22:::0;31784:26;::::1;31764:650;;;31832:13;31848:15;31864:1;31848:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;31848:18:0::1;31886:20:::0;;;:13:::1;:20:::0;;;;;;;;31848:18;;-1:-1:-1;31886:20:0::1;;31881:35;;31908:8;;;31881:35;31978:38;::::0;-1:-1:-1;;;31978:38:0;;32010:4:::1;31978:38;::::0;::::1;181:51:1::0;31955:20:0::1;::::0;-1:-1:-1;;;;;31978:23:0;::::1;::::0;::::1;::::0;154:18:1;;31978:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31955:61;;32035:12;32051:1;32035:17:::0;32031:31:::1;;32054:8;;;;32031:31;32208:23;32273:4;32235:34;32250:19:::0;32235:12;:34:::1;:::i;:::-;32234:43;;;;:::i;:::-;32208:69:::0;-1:-1:-1;32296:19:0;;32292:111:::1;;32336:51;::::0;-1:-1:-1;;;32336:51:0;;-1:-1:-1;;;;;32336:22:0;::::1;::::0;::::1;::::0;:51:::1;::::0;32359:10:::1;::::0;32371:15;;32336:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32292:111;31817:597;;;31764:650;31812:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31764:650;;;;31299:1122;;2449:20:::0;1843:1;2969:22;;2786:213;2449:20;31237:1184;:::o;16991:201::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;17077:21:::1;17067:6;:31;;17059:68;;;::::0;-1:-1:-1;;;17059:68:0;;19001:2:1;17059:68:0::1;::::0;::::1;18983:21:1::0;19040:2;19020:18;;;19013:30;19079:26;19059:18;;;19052:54;19123:18;;17059:68:0::1;18799:348:1::0;17059:68:0::1;14244:42;-1:-1:-1::0;;;;;17148:19:0::1;;17175:6;17148:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;16991:201:::0;:::o;19171:217::-;19267:7;19287:19;19309:9;-1:-1:-1;;;;;19309:17:0;;19327:6;19335;19343:7;19309:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19287:64;-1:-1:-1;;19171:217:0;;;;;;:::o;30376:224::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30465:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;::::1;;30464:22;30456:58;;;::::0;-1:-1:-1;;;30456:58:0;;19354:2:1;30456:58:0::1;::::0;::::1;19336:21:1::0;19393:2;19373:18;;;19366:30;19432:25;19412:18;;;19405:53;19475:18;;30456:58:0::1;19152:347:1::0;30456:58:0::1;30525:15;:28:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;30525:28:0;;::::1;-1:-1:-1::0;;;;;;30525:28:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;30564:21:0;;;:13:::1;30525:28;30564:21:::0;;;;;:28;;-1:-1:-1;;30564:28:0::1;::::0;;::::1;::::0;;30376:224::o;32435:367::-;32488:7;32508:19;32530:8;;;;;;;;;-1:-1:-1;;;;;32530:8:0;-1:-1:-1;;;;;32530:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32586:8;;:33;;-1:-1:-1;;;32586:33:0;;14376:42;32586:33;;;181:51:1;32508:44:0;;-1:-1:-1;32563:20:0;;-1:-1:-1;;;;;32586:8:0;;;;:18;;154::1;;32586:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32699:8;;:33;;-1:-1:-1;;;32699:33:0;;32726:4;32699:33;;;181:51:1;32563:56:0;;-1:-1:-1;32673:23:0;;-1:-1:-1;;;;;32699:8:0;;;;:18;;154::1;;32699:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32673:59;-1:-1:-1;32673:59:0;32750:26;32764:12;32750:11;:26;:::i;:::-;:44;;;;:::i;:::-;32743:51;;;;;32435:367;:::o;20261:486::-;20334:5;20379:19;;;:9;:19;;;;;;;;20352:46;;;;;;;;;-1:-1:-1;;;;;20352:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;;-1:-1:-1;;;20352:46:0;;;;;;;;;;;20563:42;;-1:-1:-1;;;20563:42:0;;20352:46;;;;;;;20334:5;;20563:9;:17;;;;:42;;20352:46;;;;;;20563:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20541:64;;20616:12;20639:11;20616:35;;20665:17;20696:4;-1:-1:-1;;;;;20696:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20662:46:0;;20261:486;-1:-1:-1;;;;;;;;;;;;;;20261:486:0:o;30667:562::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30760:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;::::1;;30752:53;;;::::0;-1:-1:-1;;;30752:53:0;;19839:2:1;30752:53:0::1;::::0;::::1;19821:21:1::0;19878:2;19858:18;;;19851:30;-1:-1:-1;;;19897:18:1;;;19890:49;19956:18;;30752:53:0::1;19637:343:1::0;30752:53:0::1;-1:-1:-1::0;;;;;30816:21:0;::::1;30840:5;30816:21:::0;;;:13:::1;:21;::::0;;;;:29;;-1:-1:-1;;30816:29:0::1;::::0;;30946:276:::1;30970:15;:22:::0;30966:26;::::1;30946:276;;;31040:6;-1:-1:-1::0;;;;;31018:28:0::1;:15;31034:1;31018:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31018:18:0::1;:28:::0;31014:197:::1;;31088:15;31104:22:::0;;:26:::1;::::0;31129:1:::1;::::0;31104:26:::1;:::i;:::-;31088:43;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31067:15:::1;:18:::0;;-1:-1:-1;;;;;31088:43:0;;::::1;::::0;31083:1;;31067:18;::::1;;;;;:::i;:::-;;;;;;;;;:64;;;;;-1:-1:-1::0;;;;;31067:64:0::1;;;;;-1:-1:-1::0;;;;;31067:64:0::1;;;;;;31150:15;:21;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31150:21:0;;;;;-1:-1:-1;;;;;;31150:21:0::1;::::0;;;;;30946:276:::1;30667:562:::0;:::o;31014:197::-:1;30994:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30946:276;;;;30667:562:::0;:::o;19398:332::-;19543:16;;;19557:1;19543:16;;;;;;;;19501:7;;;;19543:16;19557:1;19543:16;;;;;;;;;;-1:-1:-1;19543:16:0;19519:40;;19578:10;19568:4;19573:1;19568:7;;;;;;;;:::i;:::-;;;;;;:20;-1:-1:-1;;;;;19568:20:0;;;-1:-1:-1;;;;;19568:20:0;;;;;19607:11;19597:4;19602:1;19597:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19597:21:0;;;:7;;;;;;;;;:21;19654:42;;-1:-1:-1;;;19654:42:0;;19627:24;;19654:12;:26;;;;:42;;19681:8;;19691:4;;19654:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19654:42:0;;;;;;;;;;;;:::i;:::-;19627:69;;19712:7;19720:1;19712:10;;;;;;;;:::i;:::-;;;;;;;19705:17;;;;19398:332;;;;;:::o;20932:183::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;21056:51:::1;21064:10;21076:11;21089:7;21098:8;21056:7;:51::i;:::-;;20932:183:::0;;;;:::o;6076:103::-;5314:13;:11;:13::i;:::-;6141:30:::1;6168:1;6141:18;:30::i;:::-;6076:103::o:0;28825:1486::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;28974:235:::1;::::0;;::::1;::::0;::::1;::::0;;;;;29092:4:::1;28974:235;::::0;::::1;::::0;-1:-1:-1;;;;;28974:235:0;;;;;;;;;;28925:295;;-1:-1:-1;;;28925:295:0;;-1:-1:-1;;;;;28925:26:0::1;:34;::::0;::::1;::::0;:295:::1;::::0;28974:235;28925:295:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29293:60:0::1;::::0;-1:-1:-1;;;29293:60:0;;::::1;::::0;::::1;4533:25:1::0;;;29264:17:0::1;::::0;29293:26:::1;-1:-1:-1::0;;;;;29293:50:0::1;::::0;::::1;::::0;4506:18:1;;29293:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29249:104;;;;;;;;;;;;;29366:26;-1:-1:-1::0;;;;;29366:44:0::1;;29425:259;;;;;;;;29507:8;29425:259;;;;29545:9;-1:-1:-1::0;;;;;29425:259:0::1;;;;;29585:1;29425:259;;;;29617:1;29425:259;;;;29647:15;29665:3;29647:21;;;;:::i;:::-;29425:259:::0;;29366:329:::1;::::0;;-1:-1:-1;;;;;;29366:329:0::1;::::0;;;;;;24592:13:1;;29366:329:0::1;::::0;::::1;24574:32:1::0;24666:4;24654:17;;24648:24;-1:-1:-1;;;;;24644:65:1;24622:20;;;24615:95;24754:17;;;24748:24;24726:20;;;24719:54;24829:4;24817:17;;24811:24;24789:20;;;24782:54;24892:4;24880:17;;;24874:24;24852:20;;;24845:54;24546:19;;29366:329:0::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29757:235:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;29875:4:::1;29757:235;::::0;::::1;::::0;-1:-1:-1;;;;;29757:235:0;;;;;;;;;;29708:295;;-1:-1:-1;;;29708:295:0;;-1:-1:-1;;;;;29708:26:0::1;:34;::::0;::::1;::::0;:295:::1;::::0;29757:235;29708:295:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30016:41:0::1;::::0;-1:-1:-1;;;30016:41:0;;::::1;::::0;::::1;4533:25:1::0;;;30016:26:0::1;-1:-1:-1::0;;;;;30016:31:0::1;::::0;::::1;::::0;4506:18:1;;30016:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30075:9;30070:234;30094:11;:18:::0;30090:22;::::1;30070:234;;;30152:8;30134:11;30146:1;30134:14;;;;;;;;:::i;:::-;;;;;;;;;:26:::0;30130:163:::1;;30194:11;30206:18:::0;;:22:::1;::::0;30227:1:::1;::::0;30206:22:::1;:::i;:::-;30194:35;;;;;;;;:::i;:::-;;;;;;;;;30177:11;30189:1;30177:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:52:::0;30244:11:::1;:17:::0;;;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30070:234;28888:1423;28825:1486:::0;:::o;30130:163::-:1;30114:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30070:234;;;;28888:1423;28825:1486:::0;:::o;14640:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14640:28:0;:::o;19932:321::-;20025:5;20043:19;20065:9;-1:-1:-1;;;;;20065:17:0;;20083:6;20091;20099:7;20065:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20043:64;;20120:12;20143:11;20120:35;;20171:17;20202:4;-1:-1:-1;;;;;20202:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20168:46:0;;19932:321;-1:-1:-1;;;;;;;;;;;;19932:321:0:o;19738:183::-;19866:47;;-1:-1:-1;;;19866:47:0;;;;;4533:25:1;;;19800:17:0;;19866:26;-1:-1:-1;;;;;19866:36:0;;;;4506:18:1;;19866:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19830:83:0;;19738:183;-1:-1:-1;;;;;;;;;;;;19738:183:0:o;25583:1339::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;25834:75:::1;::::0;-1:-1:-1;;;25834:75:0;;-1:-1:-1;;;;;25834:22:0;::::1;::::0;::::1;::::0;:75:::1;::::0;25865:26:::1;::::0;25894:14;;25834:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25920:75:0::1;::::0;-1:-1:-1;;;25920:75:0;;-1:-1:-1;;;;;25920:22:0;::::1;::::0;::::1;::::0;:75:::1;::::0;25951:26:::1;::::0;25980:14;;25920:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26008:54;26065:453;;;;;;;;26129:6;-1:-1:-1::0;;;;;26065:453:0::1;;;;;26158:6;-1:-1:-1::0;;;;;26065:453:0::1;;;;;26184:3;26065:453;;;;;;26210:9;26065:453;;;;;;26242:9;26065:453;;;;;;26279:14;26065:453;;;;26321:14;26065:453;;;;26359:1;26065:453;;;;26384:1;26065:453;;;;26416:4;-1:-1:-1::0;;;;;26065:453:0::1;;;;;26443:15;26461:3;26443:21;;;;:::i;:::-;26065:453:::0;;26562:39:::1;::::0;-1:-1:-1;;;26562:39:0;;26008:510;;-1:-1:-1;;;;;;26562:26:0::1;:31;::::0;::::1;::::0;:39:::1;::::0;26008:510;;26562:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26531:70;;;26532:7;;26542;;26551;;26531:70;;;;;;;;;;;;;;;;;;26635:237;;;;;;;;26670:4;-1:-1:-1::0;;;;;26635:237:0::1;;;;;26695:7;;26635:237;;;;26721:6;-1:-1:-1::0;;;;;26635:237:0::1;;;;;26746:6;-1:-1:-1::0;;;;;26635:237:0::1;;;;;26772:3;26635:237;;;;;;26797:9;26635:237;;;;;;26828:9;26635:237;;;;;;26855:5;26635:237;;;;::::0;26614:9:::1;:18;26624:7;;26614:18;;;;;;;;;;;:258;;;;;;;;;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;-1:-1:-1::0;;;;;26614:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26889:11;26906:7;;26889:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25767:1155;25583:1339:::0;;;;;;;;:::o;33789:265::-;5314:13;:11;:13::i;:::-;33884:9:::1;::::0;::::1;;33883:10;33875:51;;;::::0;-1:-1:-1;;;33875:51:0;;26734:2:1;33875:51:0::1;::::0;::::1;26716:21:1::0;26773:2;26753:18;;;26746:30;26812;26792:18;;;26785:58;26860:18;;33875:51:0::1;26532:352:1::0;33875:51:0::1;33954:42;::::0;-1:-1:-1;;;33954:42:0;;33990:4:::1;33954:42;::::0;::::1;181:51:1::0;33937:14:0::1;::::0;-1:-1:-1;;;;;33954:27:0;::::1;::::0;::::1;::::0;154:18:1;;33954:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34007:39;::::0;-1:-1:-1;;;34007:39:0;;33937:59;;-1:-1:-1;;;;;;34007:26:0;::::1;::::0;::::1;::::0;:39:::1;::::0;34034:3;;33937:59;;34007:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33864:190;33789:265:::0;;:::o;23062:93::-;2405:21;:19;:21::i;:::-;23130:17:::1;23139:7;23130:8;:17::i;:::-;;;2449:20:::0;1843:1;2969:22;;2786:213;15907:319;5314:13;:11;:13::i;:::-;-1:-1:-1;;;;;15988:21:0;::::1;15980:67;;;::::0;-1:-1:-1;;;15980:67:0;;27091:2:1;15980:67:0::1;::::0;::::1;27073:21:1::0;27130:2;27110:18;;;27103:30;27169:34;27149:18;;;27142:62;-1:-1:-1;;;27220:18:1;;;27213:31;27261:19;;15980:67:0::1;26889:397:1::0;15980:67:0::1;-1:-1:-1::0;;;;;16067:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;16066:29;16058:68;;;::::0;-1:-1:-1;;;16058:68:0;;27493:2:1;16058:68:0::1;::::0;::::1;27475:21:1::0;27532:2;27512:18;;;27505:30;27571:28;27551:18;;;27544:56;27617:18;;16058:68:0::1;27291:350:1::0;16058:68:0::1;-1:-1:-1::0;;;;;16139:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:35;;-1:-1:-1;;16139:35:0::1;16170:4;16139:35;::::0;;16192:26;::::1;::::0;16139:28;16192:26:::1;15907:319:::0;:::o;16302:324::-;5314:13;:11;:13::i;:::-;-1:-1:-1;;;;;16385:21:0;::::1;16377:69;;;::::0;-1:-1:-1;;;16377:69:0;;27848:2:1;16377:69:0::1;::::0;::::1;27830:21:1::0;27887:2;27867:18;;;27860:30;27926:34;27906:18;;;27899:62;-1:-1:-1;;;27977:18:1;;;27970:33;28020:19;;16377:69:0::1;27646:399:1::0;16377:69:0::1;-1:-1:-1::0;;;;;16465:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;16457:66;;;::::0;-1:-1:-1;;;16457:66:0;;28252:2:1;16457:66:0::1;::::0;::::1;28234:21:1::0;28291:2;28271:18;;;28264:30;28330:27;28310:18;;;28303:55;28375:18;;16457:66:0::1;28050:349:1::0;16457:66:0::1;-1:-1:-1::0;;;;;16536:28:0;::::1;16567:5;16536:28:::0;;;:19:::1;:28;::::0;;;;;:36;;-1:-1:-1;;16536:36:0::1;::::0;;16590:28;::::1;::::0;16567:5;16590:28:::1;16302:324:::0;:::o;26930:1887::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;14244:42:::1;27143:15;-1:-1:-1::0;;;;;27197:14:0;::::1;::::0;::::1;:32;;27223:6;27197:32;;;27214:6;27197:32;27178:51;;27257:5;27253:184;;;27281:43;27289:7;27298:8;27308:15;27281:7;:43::i;:::-;;27253:184;;;27371:52;27379:7;27388:8;27398:7;27407:15;27371:7;:52::i;:::-;;27253:184;27470:39;::::0;-1:-1:-1;;;27470:39:0;;27503:4:::1;27470:39;::::0;::::1;181:51:1::0;27449:18:0::1;::::0;-1:-1:-1;;;;;27470:24:0;::::1;::::0;::::1;::::0;154:18:1;;27470:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27541;::::0;-1:-1:-1;;;27541:39:0;;27574:4:::1;27541:39;::::0;::::1;181:51:1::0;27449:60:0;;-1:-1:-1;27520:18:0::1;::::0;-1:-1:-1;;;;;27541:24:0;::::1;::::0;::::1;::::0;154:18:1;;27541:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27520:60;;27591:83;27618:6;27634:26;27663:10;27591:26;:83::i;:::-;27685;27712:6;27728:26;27757:10;27685:26;:83::i;:::-;27783:71;27857:553;;;;;;;;27925:6;-1:-1:-1::0;;;;;27857:553:0::1;;;;;27958:6;-1:-1:-1::0;;;;;27857:553:0::1;;;;;27988:7;27857:553;;;;;;28025:9;27857:553;;;;;;28064:9;27857:553;;;;;;28108:10;27857:553;;;;28153:10;27857:553;;;;28220:12;28207:10;:25;;;;:::i;:::-;28194:38;::::0;:10;:38:::1;:::i;:::-;27857:553:::0;;::::1;;28276:25;28289:12:::0;28276:10;:25:::1;:::i;:::-;28263:38;::::0;:10;:38:::1;:::i;:::-;27857:553:::0;;28339:4:::1;27857:553;::::0;::::1;::::0;;;28373:21:::1;:15;28391:3;28373:21;:::i;:::-;27857:553:::0;;28455:43:::1;::::0;-1:-1:-1;;;28455:43:0;;27783:627;;-1:-1:-1;;;;;;28455:26:0::1;:31;::::0;::::1;::::0;:43:::1;::::0;27783:627;;28455:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28423:75;;;28424:7;;28435;;28444;;28423:75;;;;;;;;;;;;;;;;;;28532:237;;;;;;;;28567:4;-1:-1:-1::0;;;;;28532:237:0::1;;;;;28592:7;;28532:237;;;;28618:6;-1:-1:-1::0;;;;;28532:237:0::1;;;;;28643:6;-1:-1:-1::0;;;;;28532:237:0::1;;;;;28669:7;28532:237;;;;;;28698:9;28532:237;;;;;;28729:9;28532:237;;;;;;28756:5;28532:237;;;;::::0;28511:9:::1;:18;28521:7;;28511:18;;;;;;;;;;;:258;;;;;;;;;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;-1:-1:-1::0;;;;;28511:258:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28782:11;28799:7;;28782:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27122:1695;;;;;26930:1887:::0;;;;;;;;:::o;16825:102::-;16872:16;16908:11;16901:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16825:102;:::o;18685:251::-;5314:13;:11;:13::i;:::-;18756:9:::1;::::0;::::1;;18755:10;18747:48;;;::::0;-1:-1:-1;;;18747:48:0;;28606:2:1;18747:48:0::1;::::0;::::1;28588:21:1::0;28645:2;28625:18;;;28618:30;28684:27;28664:18;;;28657:55;28729:18;;18747:48:0::1;28404:349:1::0;18747:48:0::1;-1:-1:-1::0;;;;;18814:19:0;::::1;18806:59;;;::::0;-1:-1:-1;;;18806:59:0;;28960:2:1;18806:59:0::1;::::0;::::1;28942:21:1::0;28999:2;28979:18;;;28972:30;29038:29;29018:18;;;29011:57;29085:18;;18806:59:0::1;28758:351:1::0;18806:59:0::1;18877:8;:24:::0;;-1:-1:-1;;;;;;18877:24:0::1;-1:-1:-1::0;;;;;18877:24:0;;;::::1;::::0;;;::::1;::::0;;18912:9:::1;:16:::0;;-1:-1:-1;;18912:16:0::1;-1:-1:-1::0;18912:16:0::1;::::0;;18685:251::o;24417:1156::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;24623:25:::1;24651:19:::0;;;:9:::1;:19;::::0;;;;;;24746:15:::1;::::0;::::1;::::0;24739:84;;-1:-1:-1;;;24739:84:0;;24651:19;;-1:-1:-1;;;;;24746:15:0::1;::::0;24739:31:::1;::::0;:84:::1;::::0;24779:26:::1;::::0;24808:14;;24739:84:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24841:15:0::1;::::0;::::1;::::0;24834:84:::1;::::0;-1:-1:-1;;;24834:84:0;;-1:-1:-1;;;;;24841:15:0;;::::1;::::0;24834:31:::1;::::0;:84:::1;::::0;24874:26:::1;::::0;24903:14;;24834:84:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25000:67;25070:342;;;;;;;;25145:8;25070:342;;;;25181:14;25070:342;;;;25224:14;25070:342;;;;25265:10;25070:342;;;;25302:10;25070:342;;;;25337:15;25355:3;25337:21;;;;:::i;:::-;25070:342:::0;;25505:52:::1;::::0;;-1:-1:-1;;;25505:52:0;;29359:13:1;;25505:52:0::1;::::0;::::1;29341:32:1::0;29429:4;29417:17;;29411:24;29389:20;;;29382:54;29480:17;;;29474:24;29452:20;;;29445:54;29555:4;29543:17;;29537:24;29515:20;;;29508:54;29618:4;29606:17;;29600:24;29578:20;;;29571:54;29681:4;29669:17;;29663:24;29641:20;;;29634:54;25000:412:0;;-1:-1:-1;25505:26:0::1;-1:-1:-1::0;;;;;25505:44:0::1;::::0;::::1;::::0;29313:19:1;;25505:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25494:7;25482:75:::0;25485:7:::1;25482:75:::0;-1:-1:-1;;;;;;;;24417:1156:0:o;20764:160::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;20873:43:::1;20881:11;20894;20907:8;20873:7;:43::i;32905:876::-:0;33030:8;;:31;;-1:-1:-1;;;33030:31:0;;-1:-1:-1;;;;;199:32:1;;;33030:31:0;;;181:51:1;32976:23:0;;33008:19;;33030:8;;;:18;;154::1;;33030:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33008:53;;33068:27;33121:22;:20;:22::i;:::-;33099:18;:11;33113:4;33099:18;:::i;:::-;33098:45;;;;:::i;:::-;33216:15;:22;33068:75;;-1:-1:-1;33152:40:0;;33195:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;33195:44:0;;;;;;;;;;;;;;;;33152:87;;33253:9;33248:495;33272:15;:22;33268:26;;33248:495;;;33312:13;33328:15;33344:1;33328:18;;;;;;;;:::i;:::-;;;;;;;;;;33380:38;;-1:-1:-1;;;33380:38:0;;33412:4;33380:38;;;181:51:1;-1:-1:-1;;;;;33328:18:0;;;;-1:-1:-1;33328:18:0;;33380:23;;154:18:1;;33380:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33357:61;-1:-1:-1;33515:23:0;33580:4;33542:34;33557:19;33357:61;33542:34;:::i;:::-;33541:43;;;;:::i;:::-;33515:69;;33627:108;;;;;;;;33671:5;-1:-1:-1;;;;;33627:108:0;;;;;33708:15;33627:108;;;33605:16;33622:1;33605:19;;;;;;;;:::i;:::-;;;;;;:130;;;;33301:442;;;33296:3;;;;;:::i;:::-;;;;33248:495;;;-1:-1:-1;33758:16:0;32905:876;-1:-1:-1;;;;32905:876:0:o;17258:501::-;15008:10;14988:31;;;;:19;:31;;;;;;;;;:56;;-1:-1:-1;5474:7:0;5501:6;-1:-1:-1;;;;;5501:6:0;15023:10;:21;14988:56;14980:83;;;;-1:-1:-1;;;14980:83:0;;;;;;;:::i;:::-;17346:1:::1;17337:6;:10;17329:52;;;::::0;-1:-1:-1;;;17329:52:0;;16393:2:1;17329:52:0::1;::::0;::::1;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:31;16451:18;;;16444:59;16520:18;;17329:52:0::1;16191:353:1::0;17329:52:0::1;17437:29;::::0;-1:-1:-1;;;17437:29:0;;17460:4:::1;17437:29;::::0;::::1;181:51:1::0;14244:42:0::1;::::0;17470:6;;14244:42;;17437:14:::1;::::0;154:18:1;;17437:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;17429:77;;;::::0;-1:-1:-1;;;17429:77:0;;30236:2:1;17429:77:0::1;::::0;::::1;30218:21:1::0;30275:2;30255:18;;;30248:30;30314:27;30294:18;;;30287:55;30359:18;;17429:77:0::1;30034:349:1::0;17429:77:0::1;17594:44;::::0;-1:-1:-1;;;17594:44:0;;17617:4:::1;17594:44;::::0;::::1;30600:34:1::0;14244:42:0::1;30650:18:1::0;;;30643:43;17641:6:0;;-1:-1:-1;;;;;17594:14:0;::::1;::::0;::::1;::::0;30535:18:1;;17594:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;17590:121;;;17664:35;::::0;-1:-1:-1;;;17664:35:0;;-1:-1:-1;;;;;17664:12:0;::::1;::::0;::::1;::::0;:35:::1;::::0;14244:42:::1;::::0;17692:6;;17664:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17590:121;17723:28;::::0;-1:-1:-1;;;17723:28:0;;::::1;::::0;::::1;4533:25:1::0;;;14244:42:0::1;::::0;17723:20:::1;::::0;4506:18:1;;17723:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;6334:201:::0;5314:13;:11;:13::i;:::-;-1:-1:-1;;;;;6423:22:0;::::1;6415:73;;;::::0;-1:-1:-1;;;6415:73:0;;30899:2:1;6415:73:0::1;::::0;::::1;30881:21:1::0;30938:2;30918:18;;;30911:30;30977:34;30957:18;;;30950:62;-1:-1:-1;;;31028:18:1;;;31021:36;31074:19;;6415:73:0::1;30697:402:1::0;6415:73:0::1;6499:28;6518:8;6499:18;:28::i;2485:293::-:0;1887:1;2619:7;;:19;2611:63;;;;-1:-1:-1;;;2611:63:0;;31306:2:1;2611:63:0;;;31288:21:1;31345:2;31325:18;;;31318:30;31384:33;31364:18;;;31357:61;31435:18;;2611:63:0;31104:355:1;2611:63:0;1887:1;2752:7;:18;2485:293::o;22025:1023::-;22206:8;;22135:17;;-1:-1:-1;;;;;22206:8:0;;;22175:40;;;;22167:86;;;;-1:-1:-1;;;22167:86:0;;;;;;;:::i;:::-;22270:8;22282:1;22270:13;22266:50;;-1:-1:-1;22303:1:0;22296:8;;22266:50;22352:59;;-1:-1:-1;;;22352:59:0;;-1:-1:-1;;;;;22352:26:0;;;;;:59;;22387:12;;22402:8;;22352:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22428:54;22485:438;;;;;;;;22564:10;-1:-1:-1;;;;;22485:438:0;;;;;22603:11;-1:-1:-1;;;;;22485:438:0;;;;;22638:7;22485:438;;;;;;22683:4;-1:-1:-1;;;;;22485:438:0;;;;;22717:15;22735:3;22717:21;;;;:::i;:::-;22485:438;;;;;;;;;-1:-1:-1;22485:438:0;;;;;;;;;;;;;;;22966:41;;-1:-1:-1;;;22966:41:0;;32151:13:1;;-1:-1:-1;;;;;32147:22:1;;;22966:41:0;;;32129::1;32218:17;;;32212:24;32208:33;;32186:20;;;32179:63;32290:17;;;32284:24;32310:8;32280:39;32258:20;;;32251:69;32368:17;;;32362:24;32358:33;;32336:20;;;32329:63;32448:4;32436:17;;32430:24;32408:20;;;32401:54;32109:3;32499:17;;32493:24;32471:20;;;32464:54;32574:4;32562:17;;32556:24;32534:20;;;32527:54;32641:4;32629:17;;32623:24;32619:33;;32597:20;;;32590:63;32151:13;;-1:-1:-1;22966:12:0;:29;;;;;;32063:19:1;;22966:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22954:53;22025:1023;-1:-1:-1;;;;;;22025:1023:0:o;5593:132::-;5474:7;5501:6;-1:-1:-1;;;;;5501:6:0;4059:10;5657:23;5649:68;;;;-1:-1:-1;;;5649:68:0;;32866:2:1;5649:68:0;;;32848:21:1;;;32885:18;;;32878:30;32944:34;32924:18;;;32917:62;32996:18;;5649:68:0;32664:356:1;6695:191:0;6769:16;6788:6;;-1:-1:-1;;;;;6805:17:0;;;-1:-1:-1;;;;;;6805:17:0;;;;;;6838:40;;6788:6;;;;;;;6838:40;;6769:16;6838:40;6758:128;6695:191;:::o;23895:514::-;24101:235;;;;;;;;;;;24219:4;24101:235;;;;-1:-1:-1;;;;;24101:235:0;;;;;;;;;;24052:295;;-1:-1:-1;;;24052:295:0;;23949:24;;;;-1:-1:-1;;;;;24052:26:0;:34;;;;:295;;24101:235;24052:295;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24013:334;;;;-1:-1:-1;23895:514:0;-1:-1:-1;;23895:514:0:o;21123:892::-;21293:8;;21217:17;;-1:-1:-1;;;;;21293:8:0;;;21262:40;;;;21254:86;;;;-1:-1:-1;;;21254:86:0;;;;;;;:::i;:::-;21359:8;21371:1;21359:13;21355:50;;-1:-1:-1;21392:1:0;21385:8;;21355:50;21415:59;;-1:-1:-1;;;21415:59:0;;-1:-1:-1;;;;;21415:26:0;;;;;:59;;21450:12;;21465:8;;21415:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21511:16:0;;;21525:1;21511:16;;;;;;;;21487:21;;21511:16;;;;;;;;;;-1:-1:-1;21511:16:0;21487:40;;21548:10;21538:4;21543:1;21538:7;;;;;;;;:::i;:::-;;;;;;:20;-1:-1:-1;;;;;21538:20:0;;;-1:-1:-1;;;;;21538:20:0;;;;;21579:11;21569:4;21574:1;21569:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21569:21:0;;;:7;;;;;;;;;:21;21627:44;;-1:-1:-1;;;21627:44:0;;21665:4;21627:44;;;181:51:1;21603:21:0;;21627:29;;;;;154:18:1;;21627:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21603:68;-1:-1:-1;;;;;;21689:12:0;:66;;21770:8;21793:1;21809:4;21836;21856:20;:15;21874:2;21856:20;:::i;:::-;21689:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21918:44:0;;-1:-1:-1;;;21918:44:0;;21956:4;21918:44;;;181:51:1;21965:13:0;;-1:-1:-1;;;;;;21918:29:0;;;-1:-1:-1;21918:29:0;;154:18:1;;21918:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;7655:314::-;7773:12;7787:17;7808:5;-1:-1:-1;;;;;7808:10:0;7842:23;;;7867:2;7871:5;7819:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7819:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7819:58:0;-1:-1:-1;;;;;;7819:58:0;;;;;;;;;;7808:70;;;;7819:58;7808:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7772:106;;;;7897:7;:57;;;;-1:-1:-1;7909:11:0;;:16;;:44;;;7940:4;7929:24;;;;;;;;;;;;:::i;:::-;7889:72;;;;-1:-1:-1;;;7889:72:0;;34231:2:1;7889:72:0;;;34213:21:1;34270:1;34250:18;;;34243:29;-1:-1:-1;;;34288:18:1;;;34281:32;34330:18;;7889:72:0;34029:325:1;243:180;302:6;355:2;343:9;334:7;330:23;326:32;323:52;;;371:1;368;361:12;323:52;-1:-1:-1;394:23:1;;243:180;-1:-1:-1;243:180:1:o;745:131::-;-1:-1:-1;;;;;820:31:1;;810:42;;800:70;;866:1;863;856:12;881:119;966:8;959:5;955:20;948:5;945:31;935:59;;990:1;987;980:12;1005:669;1090:6;1098;1106;1114;1167:3;1155:9;1146:7;1142:23;1138:33;1135:53;;;1184:1;1181;1174:12;1135:53;1223:9;1210:23;1242:31;1267:5;1242:31;:::i;:::-;1292:5;-1:-1:-1;1349:2:1;1334:18;;1321:32;1362:33;1321:32;1362:33;:::i;:::-;1414:7;-1:-1:-1;1473:2:1;1458:18;;1445:32;1486;1445;1486;:::i;:::-;1537:7;-1:-1:-1;1596:2:1;1581:18;;1568:32;1609:33;1568:32;1609:33;:::i;:::-;1005:669;;;;-1:-1:-1;1005:669:1;;-1:-1:-1;;1005:669:1:o;1679:127::-;1740:10;1735:3;1731:20;1728:1;1721:31;1771:4;1768:1;1761:15;1795:4;1792:1;1785:15;1811:275;1882:2;1876:9;1947:2;1928:13;;-1:-1:-1;;1924:27:1;1912:40;;1982:18;1967:34;;2003:22;;;1964:62;1961:88;;;2029:18;;:::i;:::-;2065:2;2058:22;1811:275;;-1:-1:-1;1811:275:1:o;2091:1108::-;2186:6;2194;2202;2210;2263:3;2251:9;2242:7;2238:23;2234:33;2231:53;;;2280:1;2277;2270:12;2231:53;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2412:2:1;2451:18;;;2438:32;2479:33;2438:32;2479:33;:::i;:::-;2531:7;-1:-1:-1;2585:2:1;2570:18;;2557:32;;-1:-1:-1;2640:2:1;2625:18;;2612:32;2663:18;2693:14;;;2690:34;;;2720:1;2717;2710:12;2690:34;2758:6;2747:9;2743:22;2733:32;;2803:7;2796:4;2792:2;2788:13;2784:27;2774:55;;2825:1;2822;2815:12;2774:55;2861:2;2848:16;2883:2;2879;2876:10;2873:36;;;2889:18;;:::i;:::-;2931:53;2974:2;2955:13;;-1:-1:-1;;2951:27:1;2947:36;;2931:53;:::i;:::-;2918:66;;3007:2;3000:5;2993:17;3047:7;3042:2;3037;3033;3029:11;3025:20;3022:33;3019:53;;;3068:1;3065;3058:12;3019:53;3123:2;3118;3114;3110:11;3105:2;3098:5;3094:14;3081:45;3167:1;3162:2;3157;3150:5;3146:14;3142:23;3135:34;;3188:5;3178:15;;;;;2091:1108;;;;;;;:::o;3603:527::-;3679:6;3687;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3803:9;3790:23;3822:31;3847:5;3822:31;:::i;:::-;3872:5;-1:-1:-1;3929:2:1;3914:18;;3901:32;3942:33;3901:32;3942:33;:::i;:::-;3994:7;-1:-1:-1;4053:2:1;4038:18;;4025:32;4066;4025;4066;:::i;:::-;4117:7;4107:17;;;3603:527;;;;;:::o;4135:247::-;4194:6;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;4302:9;4289:23;4321:31;4346:5;4321:31;:::i;5084:456::-;5161:6;5169;5177;5230:2;5218:9;5209:7;5205:23;5201:32;5198:52;;;5246:1;5243;5236:12;5198:52;5285:9;5272:23;5304:31;5329:5;5304:31;:::i;:::-;5354:5;-1:-1:-1;5411:2:1;5396:18;;5383:32;5424:33;5383:32;5424:33;:::i;:::-;5084:456;;5476:7;;-1:-1:-1;;;5530:2:1;5515:18;;;;5502:32;;5084:456::o;5545:596::-;5630:6;5638;5646;5654;5707:3;5695:9;5686:7;5682:23;5678:33;5675:53;;;5724:1;5721;5714:12;5675:53;5763:9;5750:23;5782:31;5807:5;5782:31;:::i;:::-;5832:5;-1:-1:-1;5889:2:1;5874:18;;5861:32;5902:33;5861:32;5902:33;:::i;:::-;5954:7;-1:-1:-1;6013:2:1;5998:18;;5985:32;6026;5985;6026;:::i;:::-;5545:596;;;;-1:-1:-1;6077:7:1;;6131:2;6116:18;6103:32;;-1:-1:-1;;5545:596:1:o;7486:118::-;7573:5;7570:1;7559:20;7552:5;7549:31;7539:59;;7594:1;7591;7584:12;7609:118;7695:5;7688:13;7681:21;7674:5;7671:32;7661:60;;7717:1;7714;7707:12;7732:1077;7846:6;7854;7862;7870;7878;7886;7894;7902;7955:3;7943:9;7934:7;7930:23;7926:33;7923:53;;;7972:1;7969;7962:12;7923:53;8011:9;7998:23;8030:31;8055:5;8030:31;:::i;:::-;8080:5;-1:-1:-1;8137:2:1;8122:18;;8109:32;8150:33;8109:32;8150:33;:::i;:::-;8202:7;-1:-1:-1;8261:2:1;8246:18;;8233:32;8274;8233;8274;:::i;:::-;8325:7;-1:-1:-1;8384:2:1;8369:18;;8356:32;8397:31;8356:32;8397:31;:::i;:::-;8447:7;-1:-1:-1;8506:3:1;8491:19;;8478:33;8520:31;8478:33;8520:31;:::i;:::-;8570:7;-1:-1:-1;8624:3:1;8609:19;;8596:33;;-1:-1:-1;8676:3:1;8661:19;;8648:33;;-1:-1:-1;8733:3:1;8718:19;;8705:33;8747:30;8705:33;8747:30;:::i;:::-;8796:7;8786:17;;;7732:1077;;;;;;;;;;;:::o;8814:388::-;8882:6;8890;8943:2;8931:9;8922:7;8918:23;8914:32;8911:52;;;8959:1;8956;8949:12;8911:52;8998:9;8985:23;9017:31;9042:5;9017:31;:::i;:::-;9067:5;-1:-1:-1;9124:2:1;9109:18;;9096:32;9137:33;9096:32;9137:33;:::i;:::-;9189:7;9179:17;;;8814:388;;;;;:::o;9677:1077::-;9791:6;9799;9807;9815;9823;9831;9839;9847;9900:3;9888:9;9879:7;9875:23;9871:33;9868:53;;;9917:1;9914;9907:12;9868:53;9956:9;9943:23;9975:31;10000:5;9975:31;:::i;:::-;10025:5;-1:-1:-1;10082:2:1;10067:18;;10054:32;10095:33;10054:32;10095:33;:::i;:::-;10147:7;-1:-1:-1;10206:2:1;10191:18;;10178:32;10219;10178;10219;:::i;:::-;10270:7;-1:-1:-1;10329:2:1;10314:18;;10301:32;10342:31;10301:32;10342:31;:::i;:::-;10392:7;-1:-1:-1;10451:3:1;10436:19;;10423:33;10465:31;10423:33;10465:31;:::i;:::-;10515:7;-1:-1:-1;10569:3:1;10554:19;;10541:33;;-1:-1:-1;10626:3:1;10611:19;;10598:33;10640:30;10598:33;10640:30;:::i;:::-;10689:7;10679:17;;;10743:3;10732:9;10728:19;10715:33;10705:43;;9677:1077;;;;;;;;;;;:::o;10759:632::-;10930:2;10982:21;;;11052:13;;10955:18;;;11074:22;;;10901:4;;10930:2;11153:15;;;;11127:2;11112:18;;;10901:4;11196:169;11210:6;11207:1;11204:13;11196:169;;;11271:13;;11259:26;;11340:15;;;;11305:12;;;;11232:1;11225:9;11196:169;;;-1:-1:-1;11382:3:1;;10759:632;-1:-1:-1;;;;;;10759:632:1:o;11396:454::-;11491:6;11499;11507;11515;11523;11576:3;11564:9;11555:7;11551:23;11547:33;11544:53;;;11593:1;11590;11583:12;11544:53;-1:-1:-1;;11616:23:1;;;11686:2;11671:18;;11658:32;;-1:-1:-1;11737:2:1;11722:18;;11709:32;;11788:2;11773:18;;11760:32;;-1:-1:-1;11839:3:1;11824:19;11811:33;;-1:-1:-1;11396:454:1;-1:-1:-1;11396:454:1:o;11855:828::-;12090:2;12142:21;;;12212:13;;12115:18;;;12234:22;;;12061:4;;12090:2;12275;;12293:18;;;;12334:15;;;12061:4;12377:280;12391:6;12388:1;12385:13;12377:280;;;12450:13;;12492:9;;-1:-1:-1;;;;;12488:35:1;12476:48;;12564:11;;12558:18;12544:12;;;12537:40;12597:12;;;;12632:15;;;;12520:1;12406:9;12377:280;;;-1:-1:-1;12674:3:1;;11855:828;-1:-1:-1;;;;;;;11855:828:1:o;12910:338::-;13112:2;13094:21;;;13151:2;13131:18;;;13124:30;-1:-1:-1;;;13185:2:1;13170:18;;13163:44;13239:2;13224:18;;12910:338::o;13253:388::-;-1:-1:-1;;;;;13509:15:1;;;13491:34;;13561:15;;;;13556:2;13541:18;;13534:43;13625:8;13613:21;;;13608:2;13593:18;;13586:49;13441:2;13426:18;;13253:388::o;13646:138::-;13725:13;;13747:31;13725:13;13747:31;:::i;:::-;13646:138;;;:::o;13789:251::-;13859:6;13912:2;13900:9;13891:7;13887:23;13883:32;13880:52;;;13928:1;13925;13918:12;13880:52;13960:9;13954:16;13979:31;14004:5;13979:31;:::i;14603:134::-;14680:13;;14702:29;14680:13;14702:29;:::i;14742:163::-;14820:13;;14873:6;14862:18;;14852:29;;14842:57;;14895:1;14892;14885:12;14910:927;15025:6;15033;15041;15049;15057;15065;15073;15126:3;15114:9;15105:7;15101:23;15097:33;15094:53;;;15143:1;15140;15133:12;15094:53;15175:9;15169:16;15194:31;15219:5;15194:31;:::i;:::-;15294:2;15279:18;;15273:25;15244:5;;-1:-1:-1;15307:31:1;15273:25;15307:31;:::i;:::-;15357:7;-1:-1:-1;15383:48:1;15427:2;15412:18;;15383:48;:::i;:::-;15373:58;;15450:48;15494:2;15483:9;15479:18;15450:48;:::i;:::-;15440:58;;15517:49;15561:3;15550:9;15546:19;15517:49;:::i;:::-;15507:59;;15611:3;15600:9;15596:19;15590:26;15660:10;15651:7;15647:24;15638:7;15635:37;15625:65;;15686:1;15683;15676:12;15625:65;15761:3;15746:19;;15740:26;15709:7;;-1:-1:-1;15775:30:1;15740:26;15775:30;:::i;:::-;15824:7;15814:17;;;14910:927;;;;;;;;;;:::o;16549:184::-;16619:6;16672:2;16660:9;16651:7;16647:23;16643:32;16640:52;;;16688:1;16685;16678:12;16640:52;-1:-1:-1;16711:16:1;;16549:184;-1:-1:-1;16549:184:1:o;17471:245::-;17538:6;17591:2;17579:9;17570:7;17566:23;17562:32;17559:52;;;17607:1;17604;17597:12;17559:52;17639:9;17633:16;17658:28;17680:5;17658:28;:::i;17721:127::-;17782:10;17777:3;17773:20;17770:1;17763:31;17813:4;17810:1;17803:15;17837:4;17834:1;17827:15;17853:168;17926:9;;;17957;;17974:15;;;17968:22;;17954:37;17944:71;;17995:18;;:::i;:::-;17853:168;;;;:::o;18026:217::-;18066:1;18092;18082:132;;18136:10;18131:3;18127:20;18124:1;18117:31;18171:4;18168:1;18161:15;18199:4;18196:1;18189:15;18082:132;-1:-1:-1;18228:9:1;;18026:217::o;18248:127::-;18309:10;18304:3;18300:20;18297:1;18290:31;18340:4;18337:1;18330:15;18364:4;18361:1;18354:15;18380:274;-1:-1:-1;;;;;18572:32:1;;;;18554:51;;18636:2;18621:18;;18614:34;18542:2;18527:18;;18380:274::o;18659:135::-;18698:3;18719:17;;;18716:43;;18739:18;;:::i;:::-;-1:-1:-1;18786:1:1;18775:13;;18659:135::o;19504:128::-;19571:9;;;19592:11;;;19589:37;;;19606:18;;:::i;19985:127::-;20046:10;20041:3;20037:20;20034:1;20027:31;20077:4;20074:1;20067:15;20101:4;20098:1;20091:15;20117:461;20170:3;20208:5;20202:12;20235:6;20230:3;20223:19;20261:4;20290:2;20285:3;20281:12;20274:19;;20327:2;20320:5;20316:14;20348:1;20358:195;20372:6;20369:1;20366:13;20358:195;;;20437:13;;-1:-1:-1;;;;;20433:39:1;20421:52;;20493:12;;;;20528:15;;;;20469:1;20387:9;20358:195;;;-1:-1:-1;20569:3:1;;20117:461;-1:-1:-1;;;;;20117:461:1:o;20583:332::-;20790:6;20779:9;20772:25;20833:2;20828;20817:9;20813:18;20806:30;20753:4;20853:56;20905:2;20894:9;20890:18;20882:6;20853:56;:::i;20920:936::-;21015:6;21046:2;21089;21077:9;21068:7;21064:23;21060:32;21057:52;;;21105:1;21102;21095:12;21057:52;21138:9;21132:16;21167:18;21208:2;21200:6;21197:14;21194:34;;;21224:1;21221;21214:12;21194:34;21262:6;21251:9;21247:22;21237:32;;21307:7;21300:4;21296:2;21292:13;21288:27;21278:55;;21329:1;21326;21319:12;21278:55;21358:2;21352:9;21380:2;21376;21373:10;21370:36;;;21386:18;;:::i;:::-;21432:2;21429:1;21425:10;21415:20;;21455:28;21479:2;21475;21471:11;21455:28;:::i;:::-;21517:15;;;21587:11;;;21583:20;;;21548:12;;;;21615:19;;;21612:39;;;21647:1;21644;21637:12;21612:39;21671:11;;;;21691:135;21707:6;21702:3;21699:15;21691:135;;;21773:10;;21761:23;;21724:12;;;;21804;;;;21691:135;;;21845:5;20920:936;-1:-1:-1;;;;;;;;20920:936:1:o;21861:572::-;22086:13;;22068:32;;22160:4;22148:17;;;22142:24;-1:-1:-1;;;;;22138:50:1;22116:20;;;22109:80;22236:4;22224:17;;;22218:24;-1:-1:-1;;;;;22333:21:1;;;22311:20;;;22304:51;;;;22415:4;22403:17;;;22397:24;22393:33;22371:20;;;22364:63;;;;22055:3;22040:19;;21861:572::o;22438:245::-;22517:6;22525;22578:2;22566:9;22557:7;22553:23;22549:32;22546:52;;;22594:1;22591;22584:12;22546:52;-1:-1:-1;;22617:16:1;;22673:2;22658:18;;;22652:25;22617:16;;22652:25;;-1:-1:-1;22438:245:1:o;22688:136::-;22766:13;;22788:30;22766:13;22788:30;:::i;22829:192::-;22908:13;;-1:-1:-1;;;;;22950:46:1;;22940:57;;22930:85;;23011:1;23008;23001:12;23026:1186;23189:6;23197;23205;23213;23221;23229;23237;23245;23253;23261;23269:7;23278;23332:3;23320:9;23311:7;23307:23;23303:33;23300:53;;;23349:1;23346;23339:12;23300:53;23381:9;23375:16;23431:26;23424:5;23420:38;23413:5;23410:49;23400:77;;23473:1;23470;23463:12;23400:77;23496:5;-1:-1:-1;23520:49:1;23565:2;23550:18;;23520:49;:::i;:::-;23510:59;;23588:49;23633:2;23622:9;23618:18;23588:49;:::i;:::-;23578:59;;23656:49;23701:2;23690:9;23686:18;23656:49;:::i;:::-;23646:59;;23724:49;23768:3;23757:9;23753:19;23724:49;:::i;:::-;23714:59;;23792:48;23835:3;23824:9;23820:19;23792:48;:::i;:::-;23782:58;;23859:48;23902:3;23891:9;23887:19;23859:48;:::i;:::-;23849:58;;23926:50;23971:3;23960:9;23956:19;23926:50;:::i;:::-;23916:60;;24016:3;24005:9;24001:19;23995:26;23985:36;;24061:3;24050:9;24046:19;24040:26;24030:36;;24086:50;24131:3;24120:9;24116:19;24086:50;:::i;:::-;24075:61;;24156:50;24201:3;24190:9;24186:19;24156:50;:::i;:::-;24145:61;;23026:1186;;;;;;;;;;;;;;:::o;24217:125::-;24282:9;;;24303:10;;;24300:36;;;24316:18;;:::i;24910:1220::-;25130:13;;-1:-1:-1;;;;;494:31:1;482:44;;25098:3;25083:19;;25202:4;25194:6;25190:17;25184:24;25217:54;25265:4;25254:9;25250:20;25236:12;-1:-1:-1;;;;;494:31:1;482:44;;428:104;25217:54;;25320:4;25312:6;25308:17;25302:24;25335:55;25384:4;25373:9;25369:20;25353:14;6671:8;6660:20;6648:33;;6595:92;25335:55;;25439:4;25431:6;25427:17;25421:24;25454:54;25502:4;25491:9;25487:20;25471:14;4644:1;4633:20;4621:33;;4569:91;25454:54;;25557:4;25549:6;25545:17;25539:24;25572:54;25620:4;25609:9;25605:20;25589:14;4644:1;4633:20;4621:33;;4569:91;25572:54;;25682:4;25674:6;25670:17;25664:24;25657:4;25646:9;25642:20;25635:54;25745:4;25737:6;25733:17;25727:24;25720:4;25709:9;25705:20;25698:54;25808:4;25800:6;25796:17;25790:24;25783:4;25772:9;25768:20;25761:54;25834:6;25894:2;25886:6;25882:15;25876:22;25871:2;25860:9;25856:18;25849:50;;25918:6;25973:2;25965:6;25961:15;25955:22;25986:54;26036:2;26025:9;26021:18;26005:14;-1:-1:-1;;;;;494:31:1;482:44;;428:104;25986:54;-1:-1:-1;;26059:6:1;26107:15;;;26101:22;26081:18;;;;26074:50;24910:1220;:::o;26135:392::-;26232:6;26240;26248;26256;26309:3;26297:9;26288:7;26284:23;26280:33;26277:53;;;26326:1;26323;26316:12;26277:53;26355:9;26349:16;26339:26;;26384:49;26429:2;26418:9;26414:18;26384:49;:::i;:::-;26473:2;26458:18;;26452:25;26517:2;26502:18;;;26496:25;26135:392;;26374:59;;-1:-1:-1;26135:392:1;-1:-1:-1;;;26135:392:1:o;29699:330::-;29787:6;29795;29803;29856:2;29844:9;29835:7;29831:23;29827:32;29824:52;;;29872:1;29869;29862:12;29824:52;29895:40;29925:9;29895:40;:::i;:::-;29885:50;;29975:2;29964:9;29960:18;29954:25;29944:35;;30019:2;30008:9;30004:18;29998:25;29988:35;;29699:330;;;;;:::o;31464:397::-;31666:2;31648:21;;;31705:2;31685:18;;;31678:30;31744:34;31739:2;31724:18;;31717:62;-1:-1:-1;;;31810:2:1;31795:18;;31788:31;31851:3;31836:19;;31464:397::o;33025:582::-;33324:6;33313:9;33306:25;33367:6;33362:2;33351:9;33347:18;33340:34;33410:3;33405:2;33394:9;33390:18;33383:31;33287:4;33431:57;33483:3;33472:9;33468:19;33460:6;33431:57;:::i;:::-;-1:-1:-1;;;;;33524:32:1;;;;33519:2;33504:18;;33497:60;-1:-1:-1;33588:3:1;33573:19;33566:35;33423:65;33025:582;-1:-1:-1;;;33025:582:1:o;33612:412::-;33741:3;33779:6;33773:13;33804:1;33814:129;33828:6;33825:1;33822:13;33814:129;;;33926:4;33910:14;;;33906:25;;33900:32;33887:11;;;33880:53;33843:12;33814:129;;;-1:-1:-1;33998:1:1;33962:16;;33987:13;;;-1:-1:-1;33962:16:1;33612:412;-1:-1:-1;33612:412:1:o
Swarm Source
ipfs://8e65e89c6a397554b980dc77ccb027e32b134f9a7425b2d5213630d1f7ef45b1
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.