Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
0 vLS2-WETH/SUSF2

Holders:
1
Profile Summary
Blockchain:
Base (8453)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
LeetSwapV2Pair

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Created At:
Sun, 30 Jul 2023 14:18:41 GMT
IERC20.sol
IERC20.sol
IERC20.sol
IERC20Metadata.sol
ILeetSwapV2Callee.sol
ILeetSwapV2Factory.sol
ILeetSwapV2Pair.sol
LeetSwapV2Fees.sol
LeetSwapV2Pair.sol
Math.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "DEXPaused",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "DeadlineExpired",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientInputAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientLiquidity",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientLiquidityBurned",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientLiquidityMinted",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientOutputAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidSignature",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidSwapRecipient",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvariantNotRespected",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReentrancyGuard",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TransferFailed",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "Burn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1",
        "type": "uint256"
      }
    ],
    "name": "Claim",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1",
        "type": "uint256"
      }
    ],
    "name": "Fees",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1",
        "type": "uint256"
      }
    ],
    "name": "Mint",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0In",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1In",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0Out",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1Out",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "Swap",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "reserve0",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "reserve1",
        "type": "uint256"
      }
    ],
    "name": "Sync",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "MINIMUM_LIQUIDITY",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "_transferFeesSupportingTaxTokens",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "blockTimestampLast",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "burn",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amount0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount1",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "claimFees",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "claimed0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "claimed1",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "claimFeesFor",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "claimed0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "claimed1",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "claimable0",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "claimable1",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "claimableFees",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_claimable0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_claimable1",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "claimableFeesFor",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_claimable0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_claimable1",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "tokenIn",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      }
    ],
    "name": "current",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "currentCumulativePrices",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "reserve0Cumulative",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "reserve1Cumulative",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "blockTimestamp",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "fees",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "tokenIn",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "getAmountOut",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "tokenIn",
        "type": "address"
      }
    ],
    "name": "getAmountOut",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getReserves",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_reserve0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_reserve1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_blockTimestampLast",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "index0",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "index1",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "lastObservation",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "reserve0Cumulative",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "reserve1Cumulative",
            "type": "uint256"
          }
        ],
        "internalType": "struct LeetSwapV2Pair.Observation",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "metadata",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "dec0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dec1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "r0",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "r1",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "st",
        "type": "bool"
      },
      {
        "internalType": "address",
        "name": "t0",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "t1",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "mint",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "liquidity",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "observationLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "observations",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "reserve0Cumulative",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "reserve1Cumulative",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "tokenIn",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "points",
        "type": "uint256"
      }
    ],
    "name": "prices",
    "outputs": [
      {
        "internalType": "uint256[]",
        "name": "",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "tokenIn",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "granularity",
        "type": "uint256"
      }
    ],
    "name": "quote",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "reserve0",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "reserve0CumulativeLast",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "reserve1",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "reserve1CumulativeLast",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "tokenIn",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "points",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "window",
        "type": "uint256"
      }
    ],
    "name": "sample",
    "outputs": [
      {
        "internalType": "uint256[]",
        "name": "",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "skim",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "stable",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "supplyIndex0",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "supplyIndex1",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount0Out",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount1Out",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "swap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "sync",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "token0",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "token1",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tokens",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dst",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "src",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dst",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
610120604052600080556000600b556000600c5560016011553480156200002557600080fd5b50336001600160a01b0316610100816001600160a01b0316815250506000806000336001600160a01b031663eb13c4cf6040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620001f3565b8015156080526001600160a01b0380831660c052831660a052604051929550909350915083908390620000de90620001c8565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000112573d6000803e3d6000fd5b506001600160a01b031660e05250506040805160608101825242815260006020820181815292820181815260058054600181018255925291517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060039092029182015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1830155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909101555062000245565b610321806200457983390190565b80516001600160a01b0381168114620001ee57600080fd5b919050565b6000806000606084860312156200020957600080fd5b6200021484620001d6565b92506200022460208501620001d6565b9150604084015180151581146200023a57600080fd5b809150509250925092565b60805160a05160c05160e05161010051614191620003e8600039600081816107370152818161083201528181610c1701528181611665015281816129ba01528181612a4001528181612bc50152612c4b0152600081816105fa015281816119f70152818161264c015281816126cb015261270701526000818161064f015281816107670152818161095301528181610bf201528181610efe0152818161102f01528181611517015281816117ea01528181611b0f01528181611eee0152818161200b0152818161227f0152818161286901528181612ced01528181612d2301526134260152600081816103760152818161062a0152818161093201528181610bd001528181610e7801528181610fa9015281816114f40152818161175401528181611aed01528181611e6801528181611f850152818161225d015281816127e101528181612ae201528181612b18015281816130f70152818161313e015281816131f101528181613261015261339201526000818161041401528181610e52015281816114d101528181611e4201528181612dc6015261307401526141916000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806389afcb441161019d578063bf944dbc116100e9578063d294f093116100a2578063ebeb31db1161007c578063ebeb31db146107cf578063ec7e683d146107d7578063f140a35a146107ea578063fff6cae9146107fd57600080fd5b8063d294f09314610789578063d505accf14610791578063dd62ed3e146107a457600080fd5b8063bf944dbc14610718578063c245febc14610721578063c3192f141461072a578063c45a015514610732578063c5700a0214610759578063d21220a71461076257600080fd5b80639f767c8811610156578063a9059cbb11610130578063a9059cbb146106e0578063ba9a7a56146106f3578063bc25cf77146106fc578063bda39cad1461070f57600080fd5b80639f767c881461068d578063a1ac4d13146106ad578063a88684b0146106cd57600080fd5b806389afcb44146105b05780638a7b8cf2146105c357806395d89b41146105ed5780639af1d35a146105f55780639d63848a1461061c5780639e8cc04b1461067a57600080fd5b8063313ce5671161025c5780635881c475116102155780636a627842116101ef5780636a6278421461053557806370a082311461054857806374522292146105685780637ecebe001461059057600080fd5b80635881c475146105065780635a76f25e146105195780635e1e63251461052257600080fd5b8063313ce5671461045c57806332c0defd14610476578063392f37e91461047f578063443cb4bc146104ca5780634d5a9f8a146104d3578063517b3f82146104f357600080fd5b806318160ddd116102ae57806318160ddd146103d05780631df8c717146103e7578063205aabf1146103ef57806322be3de11461040f57806323b872dd14610436578063252c09d71461044957600080fd5b8063022c0d9f146102f657806306fdde031461030b5780630902f1ac14610329578063095ea7b31461034e5780630dfe16811461037157806313345fe1146103b0575b600080fd5b6103096103043660046139b0565b610805565b005b610313610e4e565b6040516103209190613a6a565b60405180910390f35b6006546007546008545b60408051938452602084019290925290820152606001610320565b61036161035c366004613a9d565b6110c4565b6040519015158152602001610320565b6103987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610320565b6103c36103be366004613ac9565b611131565b6040516103209190613b04565b6103d960005481565b604051908152602001610320565b610333611339565b6103d96103fd366004613b48565b600e6020526000908152604090205481565b6103617f000000000000000000000000000000000000000000000000000000000000000081565b610361610444366004613b65565b6113a8565b610333610457366004613ba6565b611471565b610464601281565b60405160ff9091168152602001610320565b6103d9600b5481565b6104876114a4565b604080519788526020880196909652948601939093526060850191909152151560808401526001600160a01b0390811660a08401521660c082015260e001610320565b6103d960065481565b6103d96104e1366004613b48565b600f6020526000908152604090205481565b6103d9610501366004613a9d565b61153c565b6103c3610514366004613bbf565b611624565b6103d960075481565b6103d9610530366004613bf4565b611633565b6103d9610543366004613b48565b61170c565b6103d9610556366004613b48565b60026020526000908152604090205481565b61057b610576366004613b48565b61196b565b60408051928352602083019190915201610320565b6103d961059e366004613b48565b60046020526000908152604090205481565b61057b6105be366004613b48565b611aa7565b6105cb611dbe565b6040805182518152602080840151908201529181015190820152606001610320565b610313611e3e565b6103987f000000000000000000000000000000000000000000000000000000000000000081565b604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f000000000000000000000000000000000000000000000000000000000000000016602082015201610320565b6103d9610688366004613bbf565b6120a0565b6103d961069b366004613b48565b600d6020526000908152604090205481565b6103d96106bb366004613b48565b60106020526000908152604090205481565b61057b6106db366004613b48565b61210d565b6103616106ee366004613a9d565b612207565b6103d96103e881565b61030961070a366004613b48565b61221d565b6103d9600c5481565b6103d960095481565b6103d9600a5481565b61057b61234f565b6103987f000000000000000000000000000000000000000000000000000000000000000081565b6103d960085481565b6103987f000000000000000000000000000000000000000000000000000000000000000081565b61057b612363565b61030961079f366004613c45565b61236f565b6103d96107b2366004613cb6565b600160209081526000928352604080842090915290825290205481565b6005546103d9565b6103d96107e5366004613a9d565b612623565b6103d96107f8366004613cef565b612793565b6103096127a0565b601154600114610828576040516345f5ce8b60e11b815260040160405180910390fd5b60026011819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b29190613d14565b156108d057604051639153568960e01b815260040160405180910390fd5b841580156108dc575083155b156108fa576040516342301c2360e01b815260040160405180910390fd5b600654600754818710158061090f5750808610155b1561092d5760405163bb55fd2760e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03898116908316148061099d5750806001600160a01b0316896001600160a01b0316145b156109bb5760405163d4f6398f60e01b815260040160405180910390fd5b8a156109cc576109cc828a8d6128ee565b89156109dd576109dd818a8c6128ee565b8615610a4a57604051639a7bff7960e01b81526001600160a01b038a1690639a7bff7990610a179033908f908f908e908e90600401613d36565b600060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab29190613d82565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190613d82565b9250505060008985610b2f9190613db1565b8311610b3c576000610b50565b610b468a86613db1565b610b509084613db1565b90506000610b5e8a86613db1565b8311610b6b576000610b7f565b610b758a86613db1565b610b7f9084613db1565b905081158015610b8d575080155b15610bab5760405163098fb56160e01b815260040160405180910390fd5b604051630b9ee62160e31b81523060048201526001600160a01b038a811660248301527f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000916000917f000000000000000000000000000000000000000000000000000000000000000090911690635cf7310890604401602060405180830381865afa158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c849190613d82565b90508415610cab57610cab612710610c9c8388613dc4565b610ca69190613ddb565b6129b6565b8315610cd057610cd0612710610cc18387613dc4565b610ccb9190613ddb565b612bc1565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d389190613d82565b6040516370a0823160e01b81523060048201529097506001600160a01b038316906370a0823190602401602060405180830381865afa158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190613d82565b9550610daf8989612dc2565b610db98888612dc2565b1015610dd857604051636458e09f60e11b815260040160405180910390fd5b505050610de784848888612edc565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001601155505050505050505050565b60607f000000000000000000000000000000000000000000000000000000000000000015610fa7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ed4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610efc9190810190613e13565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f829190810190613e13565b604051602001610f93929190613eb5565b604051602081830303815290604052905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611005573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261102d9190810190613e13565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561108b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110b39190810190613e13565b604051602001610f93929190613f1a565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061111f9086815260200190565b60405180910390a35060015b92915050565b606060008367ffffffffffffffff81111561114e5761114e613dfd565b604051908082528060200260200182016040528015611177578160200160208202803683370190505b5060055490915060009061118d90600190613db1565b9050600061119b8587613dc4565b6111a59083613db1565b90506000805b83831015611329576111bd8784613f7f565b91506000600584815481106111d4576111d4613f92565b906000526020600020906003020160000154600584815481106111f9576111f9613f92565b9060005260206000209060030201600001546112159190613db1565b90506000816005868154811061122d5761122d613f92565b9060005260206000209060030201600101546005868154811061125257611252613f92565b90600052602060002090600302016001015461126e9190613db1565b6112789190613ddb565b90506000826005878154811061129057611290613f92565b906000526020600020906003020160020154600587815481106112b5576112b5613f92565b9060005260206000209060030201600201546112d19190613db1565b6112db9190613ddb565b90506112e98c8e8484613070565b8885815181106112fb576112fb613f92565b6020908102919091010152611311846001613f7f565b935050505086836113229190613f7f565b92506111ab565b509293505050505b949350505050565b600954600a5442600080806113576006546007546008549192909190565b9250925092508381146113a05760006113708286613db1565b905061137c8185613dc4565b6113869088613f7f565b96506113928184613dc4565b61139c9087613f7f565b9550505b505050909192565b6001600160a01b0383166000818152600160209081526040808320338085529252822054919290919082148015906113e257506000198114155b156114585760006113f38583613db1565b6001600160a01b038881166000818152600160209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6114638686866132ce565b6001925050505b9392505050565b6005818154811061148157600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b60008060008060008060006114b761338e565b6114bf613422565b600654600754929a91995097509095507f000000000000000000000000000000000000000000000000000000000000000094507f000000000000000000000000000000000000000000000000000000000000000093507f000000000000000000000000000000000000000000000000000000000000000092509050565b600080611547611dbe565b9050600080611554611339565b508451919350915042036115bc576005805461157290600290613db1565b8154811061158257611582613f92565b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505092505b82516000906115cb9042613db1565b90506000818560200151856115e09190613db1565b6115ea9190613ddb565b90506000828660400151856115ff9190613db1565b6116099190613ddb565b9050611617888a8484613070565b9998505050505050505050565b60606113318484846001611131565b600654600754604051630b9ee62160e31b81523060048201526001600160a01b038481166024830152600093929184917f00000000000000000000000000000000000000000000000000000000000000001690635cf7310890604401602060405180830381865afa1580156116ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d09190613d82565b90506127106116df8289613dc4565b6116e99190613ddb565b6116f39088613db1565b965061170187878585613070565b979650505050505050565b6000601154600114611731576040516345f5ce8b60e11b815260040160405180910390fd5b60026011556006546007546040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190613d82565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118559190613d82565b905060006118638584613db1565b905060006118718584613db1565b600080549192508190036118b2576103e861189461188f8486613dc4565b613482565b61189e9190613db1565b97506118ad60006103e86134f2565b6118e7565b6118e4876118c08386613dc4565b6118ca9190613ddb565b876118d58486613dc4565b6118df9190613ddb565b613584565b97505b6000881161190857604051633489be7560e21b815260040160405180910390fd5b61191289896134f2565b61191e85858989612edc565b604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001601155509395945050505050565b600080601154600114611991576040516345f5ce8b60e11b815260040160405180910390fd5b600260115561199f8361359a565b50506001600160a01b038181166000818152600f6020908152604080832080546010909352818420805491859055939093555163299e7ae760e11b8152600481019390935260248301819052604483018290529290917f00000000000000000000000000000000000000000000000000000000000000009091169063533cf5ce90606401600060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b505060408051858152602081018590526001600160a01b03871693503392507f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645910160405180910390a360016011559092909150565b600080601154600114611acd576040516345f5ce8b60e11b815260040160405180910390fd5b60026011556006546007546040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b879190613d82565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf59190613d82565b3060009081526002602052604081205490549192509080611c168584613dc4565b611c209190613ddb565b995080611c2d8484613dc4565b611c379190613ddb565b9850891580611c44575088155b15611c625760405163749383ad60e01b815260040160405180910390fd5b611c6c30836136fa565b611c77868c8c6128ee565b611c82858c8b6128ee565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea9190613d82565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190613d82565b9250611d6384848a8a612edc565b604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a350505050505050506001601181905550915091565b611de260405180606001604052806000815260200160008152602001600081525090565b60058054611df290600190613db1565b81548110611e0257611e02613f92565b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905090565b60607f000000000000000000000000000000000000000000000000000000000000000015611f83577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190613e13565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f729190810190613e13565b604051602001610f93929190613fa8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611fe1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120099190810190613e13565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261208f9190810190613e13565b604051602001610f93929190613ff5565b6000806120b08585856001611131565b90506000805b82518110156120f8578281815181106120d1576120d1613f92565b6020026020010151826120e49190613f7f565b9150806120f081614015565b9150506120b6565b506121038482613ddb565b9695505050505050565b6001600160a01b038116600090815260026020908152604080832054600f835281842054601090935292205490918015612201576001600160a01b0384166000908152600d6020526040812054600b546121679190613db1565b6001600160a01b0386166000908152600e6020526040812054600c5492935090916121929190613db1565b905081156121c9576000670de0b6b3a76400006121af8486613dc4565b6121b99190613ddb565b90506121c58187613f7f565b9550505b80156121fe576000670de0b6b3a76400006121e48386613dc4565b6121ee9190613ddb565b90506121fa8186613f7f565b9450505b50505b50915091565b60006122143384846132ce565b50600192915050565b601154600114612240576040516345f5ce8b60e11b815260040160405180910390fd5b60026011556006546040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009161230d9184918691906001600160a01b038416906370a08231906024015b602060405180830381865afa1580156122da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fe9190613d82565b6123089190613db1565b6128ee565b6007546040516370a0823160e01b81523060048201526123459183918691906001600160a01b038416906370a08231906024016122bd565b5050600160115550565b60008061235b3361210d565b915091509091565b60008061235b3361196b565b4284101561239057604051631ab7da6b60e01b815260040160405180910390fd5b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123b9610e4e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f19818403018152918152815160209283012060038190556001600160a01b038a166000908152600490935290822080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761248583614015565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016124fe92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612569573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158061259e5750886001600160a01b0316816001600160a01b031614155b156125bc57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b038981166000818152600160209081526040808320948d16808452948252918290208b905590518a81527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b6000816000036126355750600061112b565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600091908516906370a0823190602401602060405180830381865afa15801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c39190613d82565b90506126f0847f0000000000000000000000000000000000000000000000000000000000000000856128ee565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600091908616906370a0823190602401602060405180830381865afa15801561275a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277e9190613d82565b905061278a8282613db1565b95945050505050565b600061146a838333611633565b6011546001146127c3576040516345f5ce8b60e11b815260040160405180910390fd5b60026011556040516370a0823160e01b81523060048201526128e7907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128549190613d82565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190613d82565b600654600754612edc565b6001601155565b826001600160a01b03163b6000036129195760405163c1ab6dc160e01b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af115801561296c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129909190613d14565b9050806129b0576040516312171d8360e31b815260040160405180910390fd5b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663afda13e96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3a9190613d82565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663689306376040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac0919061402e565b90506000612710612ad18486613dc4565b612adb9190613ddb565b9050612b0b7f00000000000000000000000000000000000000000000000000000000000000006107e58387613db1565b93508015612b3e57612b3e7f000000000000000000000000000000000000000000000000000000000000000083836128ee565b60008054612b5486670de0b6b3a7640000613dc4565b612b5e9190613ddb565b90508015612b7e5780600b6000828254612b789190613f7f565b90915550505b604080518681526000602082015233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291015b60405180910390a25050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663afda13e96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c459190613d82565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663689306376040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccb919061402e565b90506000612710612cdc8486613dc4565b612ce69190613ddb565b9050612d167f00000000000000000000000000000000000000000000000000000000000000006107e58387613db1565b93508015612d4957612d497f000000000000000000000000000000000000000000000000000000000000000083836128ee565b60008054612d5f86670de0b6b3a7640000613dc4565b612d699190613ddb565b90508015612d895780600c6000828254612d839190613f7f565b90915550505b60408051600081526020810187905233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a86029101612bb2565b60007f000000000000000000000000000000000000000000000000000000000000000015612ecb576000612df461338e565b612e0685670de0b6b3a7640000613dc4565b612e109190613ddb565b90506000612e1c613422565b612e2e85670de0b6b3a7640000613dc4565b612e389190613ddb565b90506000670de0b6b3a7640000612e4f8385613dc4565b612e599190613ddb565b90506000670de0b6b3a7640000612e708480613dc4565b612e7a9190613ddb565b670de0b6b3a7640000612e8d8680613dc4565b612e979190613ddb565b612ea19190613f7f565b9050670de0b6b3a7640000612eb68284613dc4565b612ec09190613ddb565b94505050505061112b565b612ed58284613dc4565b905061112b565b6008544290600090612eee9083613db1565b9050600081118015612eff57508315155b8015612f0a57508215155b15612f5157612f198185613dc4565b60096000828254612f2a9190613f7f565b90915550612f3a90508184613dc4565b600a6000828254612f4b9190613f7f565b90915550505b6000612f5b611dbe565b8051909150612f6a9084613db1565b915061070882111561301f576040805160608101825284815260095460208201908152600a549282019283526005805460018101825560009190915291517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600390930292830155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015590517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909101555b60068790556007869055600883905560408051888152602081018890527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a150505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000001561325c5760006130a48484612dc2565b90506130ae61338e565b6130c085670de0b6b3a7640000613dc4565b6130ca9190613ddb565b93506130d4613422565b6130e684670de0b6b3a7640000613dc4565b6130f09190613ddb565b92506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614613135578486613138565b85855b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161461319e5761317d613422565b61318f89670de0b6b3a7640000613dc4565b6131999190613ddb565b6131c2565b6131a661338e565b6131b889670de0b6b3a7640000613dc4565b6131c29190613ddb565b975060006131da6131d3848b613f7f565b8584613784565b6131e49083613db1565b9050670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b0316146132355761323061338e565b61323d565b61323d613422565b6132479083613dc4565b6132519190613ddb565b945050505050611331565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161461329f5783856132a2565b84845b90925090506132b18783613f7f565b6132bb8289613dc4565b6132c59190613ddb565b92505050611331565b6132d78361359a565b6132e08261359a565b6001600160a01b03831660009081526002602052604081208054839290613308908490613db1565b90915550506001600160a01b03821660009081526002602052604081208054839290613335908490613f7f565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161338191815260200190565b60405180910390a3505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613412919061404b565b61341d90600a61414c565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b600060038211156134e3575080600061349c600283613ddb565b6134a7906001613f7f565b90505b818110156134dd579050806002816134c28186613ddb565b6134cc9190613f7f565b6134d69190613ddb565b90506134aa565b50919050565b81156134ed575060015b919050565b6134fb8261359a565b8060008082825461350c9190613f7f565b90915550506001600160a01b03821660009081526002602052604081208054839290613539908490613f7f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6000818310613593578161146a565b5090919050565b6001600160a01b03811660009081526002602052604090205480156136c8576001600160a01b0382166000908152600d602090815260408083208054600e8085529285208054600b54600c549481905594909552829055936135fc8584613db1565b9050600061360a8584613db1565b90508115613665576000670de0b6b3a7640000613627848a613dc4565b6136319190613ddb565b6001600160a01b038a166000908152600f602052604081208054929350839290919061365e908490613f7f565b9091555050505b80156136be576000670de0b6b3a7640000613680838a613dc4565b61368a9190613ddb565b6001600160a01b038a166000908152601060205260408120805492935083929091906136b7908490613f7f565b9091555050505b5050505050505050565b600b546001600160a01b0383166000908152600d6020908152604080832093909355600c54600e909152919020555050565b6137038261359a565b806000808282546137149190613db1565b90915550506001600160a01b03821660009081526002602052604081208054839290613741908490613db1565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613578565b6000805b60ff81101561388a5782600061379e8783613893565b9050858110156137ee5760006137b48887613930565b6137be8389613db1565b6137d090670de0b6b3a7640000613dc4565b6137da9190613ddb565b90506137e68187613f7f565b955050613830565b60006137fa8887613930565b6138048884613db1565b61381690670de0b6b3a7640000613dc4565b6138209190613ddb565b905061382c8187613db1565b9550505b818511156138595760016138448387613db1565b116138545784935050505061146a565b613875565b60016138658684613db1565b116138755784935050505061146a565b5050808061388290614015565b915050613788565b50909392505050565b6000670de0b6b3a7640000828185816138ac8280613dc4565b6138b69190613ddb565b6138c09190613dc4565b6138ca9190613ddb565b6138d49190613dc4565b6138de9190613ddb565b670de0b6b3a76400008084816138f48280613dc4565b6138fe9190613ddb565b6139089190613dc4565b6139129190613ddb565b61391c9086613dc4565b6139269190613ddb565b61146a9190613f7f565b6000670de0b6b3a764000083816139478280613dc4565b6139519190613ddb565b61395b9190613dc4565b6139659190613ddb565b670de0b6b3a7640000806139798580613dc4565b6139839190613ddb565b61398e866003613dc4565b61391c9190613dc4565b6001600160a01b03811681146139ad57600080fd5b50565b6000806000806000608086880312156139c857600080fd5b853594506020860135935060408601356139e181613998565b9250606086013567ffffffffffffffff808211156139fe57600080fd5b818801915088601f830112613a1257600080fd5b813581811115613a2157600080fd5b896020828501011115613a3357600080fd5b9699959850939650602001949392505050565b60005b83811015613a61578181015183820152602001613a49565b50506000910152565b6020815260008251806020840152613a89816040850160208701613a46565b601f01601f19169190910160400192915050565b60008060408385031215613ab057600080fd5b8235613abb81613998565b946020939093013593505050565b60008060008060808587031215613adf57600080fd5b8435613aea81613998565b966020860135965060408601359560600135945092505050565b6020808252825182820181905260009190848201906040850190845b81811015613b3c57835183529284019291840191600101613b20565b50909695505050505050565b600060208284031215613b5a57600080fd5b813561146a81613998565b600080600060608486031215613b7a57600080fd5b8335613b8581613998565b92506020840135613b9581613998565b929592945050506040919091013590565b600060208284031215613bb857600080fd5b5035919050565b600080600060608486031215613bd457600080fd5b8335613bdf81613998565b95602085013595506040909401359392505050565b600080600060608486031215613c0957600080fd5b833592506020840135613c1b81613998565b91506040840135613c2b81613998565b809150509250925092565b60ff811681146139ad57600080fd5b600080600080600080600060e0888a031215613c6057600080fd5b8735613c6b81613998565b96506020880135613c7b81613998565b955060408801359450606088013593506080880135613c9981613c36565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613cc957600080fd5b8235613cd481613998565b91506020830135613ce481613998565b809150509250929050565b60008060408385031215613d0257600080fd5b823591506020830135613ce481613998565b600060208284031215613d2657600080fd5b8151801515811461146a57600080fd5b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b600060208284031215613d9457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561112b5761112b613d9b565b808202811582820484141761112b5761112b613d9b565b600082613df857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613e2557600080fd5b815167ffffffffffffffff80821115613e3d57600080fd5b818401915084601f830112613e5157600080fd5b815181811115613e6357613e63613dfd565b604051601f8201601f19908116603f01168101908382118183101715613e8b57613e8b613dfd565b81604052828152876020848701011115613ea457600080fd5b611701836020830160208801613a46565b7f4c65657453776170563220537461626c6556312050616972202d200000000000815260008351613eed81601b850160208801613a46565b602f60f81b601b918401918201528351613f0e81601c840160208801613a46565b01601c01949350505050565b7f4c65657453776170563220566f6c6174696c6556312050616972202d20000000815260008351613f5281601d850160208801613a46565b602f60f81b601d918401918201528351613f7381601e840160208801613a46565b01601e01949350505050565b8082018082111561112b5761112b613d9b565b634e487b7160e01b600052603260045260246000fd5b64734c53322d60d81b815260008351613fc8816005850160208801613a46565b602f60f81b6005918401918201528351613fe9816006840160208801613a46565b01600601949350505050565b64764c53322d60d81b815260008351613fc8816005850160208801613a46565b60006001820161402757614027613d9b565b5060010190565b60006020828403121561404057600080fd5b815161146a81613998565b60006020828403121561405d57600080fd5b815161146a81613c36565b600181815b808511156140a357816000190482111561408957614089613d9b565b8085161561409657918102915b93841c939080029061406d565b509250929050565b6000826140ba5750600161112b565b816140c75750600061112b565b81600181146140dd57600281146140e757614103565b600191505061112b565b60ff8411156140f8576140f8613d9b565b50506001821b61112b565b5060208310610133831016604e8410600b8410161715614126575081810a61112b565b6141308383614068565b806000190482111561414457614144613d9b565b029392505050565b600061146a60ff8416836140ab56fea264697066735822122004f589f9c0880cb44ed95321cb7c212c6b2b68fb2702bf4b81cc545a683cebf464736f6c6343000811003360e060405234801561001057600080fd5b5060405161032138038061032183398101604081905261002f91610066565b336080526001600160a01b0391821660a0521660c052610099565b80516001600160a01b038116811461006157600080fd5b919050565b6000806040838503121561007957600080fd5b6100828361004a565b91506100906020840161004a565b90509250929050565b60805160a05160c05161025c6100c5600039600060c9015260006098015260006050015261025c6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063533cf5ce14610030575b600080fd5b61004361003e3660046101bc565b610045565b005b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461008d576040516282b42960e81b815260040160405180910390fd5b81156100be576100be7f000000000000000000000000000000000000000000000000000000000000000084846100f4565b80156100ef576100ef7f000000000000000000000000000000000000000000000000000000000000000084836100f4565b505050565b826001600160a01b03163b60000361011f5760405163c1ab6dc160e01b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af1158015610172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019691906101fd565b9050806101b6576040516312171d8360e31b815260040160405180910390fd5b50505050565b6000806000606084860312156101d157600080fd5b83356001600160a01b03811681146101e857600080fd5b95602085013595506040909401359392505050565b60006020828403121561020f57600080fd5b8151801515811461021f57600080fd5b939250505056fea2646970667358221220dc778242d15758937c23a3da526868d4daa725d62e0fc4e62840da8e0634038764736f6c63430008110033