Overview
Total Supply:
0

Profile Summary
Blockchain:
Mantle (5000)


Decimals:
Contract Source Code Verified (Exact Match)
Contract Name:
StargateFeeLibraryV07

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 14 Nov 2023 22:36:20 GMT
ILayerZeroEndpoint.sol
@layerzerolabs
lz-evm-v1-0.7
contracts
interfaces
ILayerZeroEndpoint.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_factory",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_endpoint",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "poolId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "priceSD",
        "type": "uint256"
      }
    ],
    "name": "PriceUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "_type",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_minDstGas",
        "type": "uint256"
      }
    ],
    "name": "SetMinDstGas",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "precrime",
        "type": "address"
      }
    ],
    "name": "SetPrecrime",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "_remoteChainId",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "_path",
        "type": "bytes"
      }
    ],
    "name": "SetTrustedRemote",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "_remoteChainId",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "_remoteAddress",
        "type": "bytes"
      }
    ],
    "name": "SetTrustedRemoteAddress",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "DELTA_1",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DELTA_2",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "EQ_REWARD_THRESHOLD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LAMBDA_1",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LAMBDA_2",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LP_FEE",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ONE_BPS_PRICE_CHANGE_THRESHOLD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PRICE_DEPEG_THRESHOLD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PRICE_DRIFT_THRESHOLD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PRICE_SHARED_DECIMALS",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PROTOCOL_FEE",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PROTOCOL_FEE_FOR_SAME_TOKEN",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PROTOCOL_SUBSIDY",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "name": "defaultAdapterParams",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "contract Factory",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      }
    ],
    "name": "forceResumeReceive",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_version",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_configType",
        "type": "uint256"
      }
    ],
    "name": "getConfig",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_whitelisted",
        "type": "bool"
      }
    ],
    "name": "getDriftFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_whitelisted",
        "type": "bool"
      }
    ],
    "name": "getEqReward",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "amountSD",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "whitelisted",
        "type": "bool"
      },
      {
        "internalType": "bool",
        "name": "hasEqReward",
        "type": "bool"
      }
    ],
    "name": "getEquilibriumFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      }
    ],
    "name": "getFees",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eqFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eqReward",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lpFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lkbRemove",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.SwapObj",
        "name": "s",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_protocolSubsidy",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_whitelisted",
        "type": "bool"
      }
    ],
    "name": "getProtocolAndLpFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_poolId2",
        "type": "uint256"
      }
    ],
    "name": "getRemoteChains",
    "outputs": [
      {
        "internalType": "uint16[]",
        "name": "",
        "type": "uint16[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getVersion",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_priceSD",
        "type": "uint256"
      }
    ],
    "name": "initTokenPrice",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      }
    ],
    "name": "isTrustedRemote",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "lzEndpoint",
    "outputs": [
      {
        "internalType": "contract ILayerZeroEndpoint",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint64",
        "name": "_nonce",
        "type": "uint64"
      },
      {
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "lzReceive",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "name": "minDstGasLookup",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "poolIdToLpId",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "poolIdToPriceFeed",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "poolIdToPriceSD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "precrime",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_poolId2",
        "type": "uint256"
      }
    ],
    "name": "quoteFeeForPriceUpdate",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_version",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "_chainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_configType",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_config",
        "type": "bytes"
      }
    ],
    "name": "setConfig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_remoteChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_adapterParams",
        "type": "bytes"
      }
    ],
    "name": "setDefaultAdapterParams",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "_packetType",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_minGas",
        "type": "uint256"
      }
    ],
    "name": "setMinDstGas",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_lpId",
        "type": "uint256"
      }
    ],
    "name": "setPoolToLpId",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_precrime",
        "type": "address"
      }
    ],
    "name": "setPrecrime",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_version",
        "type": "uint16"
      }
    ],
    "name": "setReceiveVersion",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_poolId2",
        "type": "uint256"
      },
      {
        "internalType": "uint16[]",
        "name": "_remoteChainIds",
        "type": "uint16[]"
      }
    ],
    "name": "setRemoteChains",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_version",
        "type": "uint16"
      }
    ],
    "name": "setSendVersion",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_lpStaking",
        "type": "address"
      }
    ],
    "name": "setStargatePoolIdToLPStakingAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_priceFeedAddress",
        "type": "address"
      }
    ],
    "name": "setTokenPriceFeed",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_path",
        "type": "bytes"
      }
    ],
    "name": "setTrustedRemote",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_poolId2",
        "type": "uint256"
      }
    ],
    "name": "shouldCallUpdateTokenPrices",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "stargatePoolIdToLPStaking",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "name": "trustedRemoteLookup",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId1",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_poolId2",
        "type": "uint256"
      }
    ],
    "name": "updateTokenPrices",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "_whiteListed",
        "type": "bool"
      }
    ],
    "name": "whiteList",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "whitelist",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
60c06040523480156200001157600080fd5b50604051620044e4380380620044e483398101604081905262000034916200012e565b806000620000416200010d565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060601b6001600160601b0319166080526001600160a01b038216620000cd5760405162461bcd60e51b8152600401620000c49062000165565b60405180910390fd5b6001600160a01b038116620000f65760405162461bcd60e51b8152600401620000c490620001a6565b5060601b6001600160601b03191660a052620001e8565b3390565b80516001600160a01b03811681146200012957600080fd5b919050565b6000806040838503121562000141578182fd5b6200014c8362000111565b91506200015c6020840162000111565b90509250929050565b60208082526021908201527f4665654c6962726172793a20466163746f72792063616e6e6f742062652030786040820152600360fc1b606082015260800190565b60208082526022908201527f4665654c6962726172793a20456e64706f696e742063616e6e6f742062652030604082015261078360f41b606082015260800190565b60805160601c60a05160601c6142a062000244600039806117095280611e2152806122e25250806109b75280610c505280610d7c52806111f452806120ad5280612368528061258c528061298f5280612edb52506142a06000f3fe6080604052600436106103535760003560e01c80637ba5c12f116101c6578063ad7bbfc9116100f7578063d2f68aec11610095578063eb8d72b71161006f578063eb8d72b714610935578063f2fde38b14610955578063f5ecbdbc14610975578063fc6834a1146109955761035a565b8063d2f68aec146108e0578063d7f6bde314610900578063df2a5b3b146109155761035a565b8063baf3292d116100d1578063baf3292d1461086b578063c45a01551461088b578063cbed8b9c146108a0578063d16baeb9146108c05761035a565b8063ad7bbfc914610816578063b353aaa714610836578063b7f5ada31461084b5761035a565b806396e03bf3116101645780639c2f2e251161013e5780639c2f2e251461079e5780639fb2663a146107be578063a1498635146107ec578063a810de6c146108015761035a565b806396e03bf31461073e578063972883c41461075e5780639b19251a1461077e5761035a565b80638cfd8f5c116101a05780638cfd8f5c146106df5780638da5cb5b146106ff578063918f867414610714578063950c8a74146107295761035a565b80637ba5c12f146106aa5780637f1c8bb7146106bf57806380651ee2146106005761035a565b80633c2c3065116102a05780635a208ba31161023e5780636ddc4561116102185780636ddc456114610635578063715018a6146106555780637533d7881461066a5780637b35c2601461068a5761035a565b80635a208ba3146105ed5780635e3f2727146106005780636548c4ac146106155761035a565b806342d65a8d1161027a57806342d65a8d14610583578063518a9f9f146105a357806352863703146105b857806358cbb8ed146105cd5761035a565b80633c2c3065146105215780633d8b38f6146105415780633dad0dd51461056e5761035a565b80630d8e6e2c1161030d5780631738fe38116102e75780631738fe38146104925780631ab62430146104a757806323daf69c146104d457806326cfac66146104f45761035a565b80630d8e6e2c1461043057806310ddb1371461045257806313c6e380146104725761035a565b80621d35671461035f578063012a1c2d14610381578063040d5835146103ac57806307e0db17146103ce578063084285da146103ee5780630b4501fd1461041b5761035a565b3661035a57005b600080fd5b34801561036b57600080fd5b5061037f61037a36600461386d565b6109b5565b005b34801561038d57600080fd5b50610396610bdb565b6040516103a3919061410b565b60405180910390f35b3480156103b857600080fd5b506103c1610be7565b6040516103a3919061413d565b3480156103da57600080fd5b5061037f6103e93660046137fe565b610bec565b3480156103fa57600080fd5b5061040e610409366004613a33565b610cd3565b6040516103a39190613db6565b34801561042757600080fd5b50610396610cee565b34801561043c57600080fd5b50610445610cf9565b6040516103a39190613e1d565b34801561045e57600080fd5b5061037f61046d3660046137fe565b610d18565b34801561047e57600080fd5b5061039661048d366004613a33565b610de4565b34801561049e57600080fd5b50610396610df6565b3480156104b357600080fd5b506104c76104c2366004613b80565b610e01565b6040516103a39190613ff6565b3480156104e057600080fd5b506103966104ef366004613a33565b610f4d565b34801561050057600080fd5b5061051461050f366004613a87565b610f5f565b6040516103a39190613dca565b34801561052d57600080fd5b5061040e61053c366004613a33565b611066565b34801561054d57600080fd5b5061056161055c36600461381a565b611081565b6040516103a39190613e12565b34801561057a57600080fd5b50610396611154565b34801561058f57600080fd5b5061037f61059e36600461381a565b611160565b3480156105af57600080fd5b50610396611275565b3480156105c457600080fd5b50610396611280565b3480156105d957600080fd5b506104456105e83660046137fe565b61128b565b61037f6105fb366004613a87565b611326565b34801561060c57600080fd5b5061039661152b565b34801561062157600080fd5b5061037f610630366004613a87565b611535565b34801561064157600080fd5b5061037f610650366004613a63565b6115a9565b34801561066157600080fd5b5061037f611639565b34801561067657600080fd5b506104456106853660046137fe565b61169d565b34801561069657600080fd5b506103966106a5366004613b48565b611704565b3480156106b657600080fd5b5061039661193f565b3480156106cb57600080fd5b5061037f6106da366004613a63565b611949565b3480156106eb57600080fd5b506103966106fa366004613905565b6119d9565b34801561070b57600080fd5b5061040e6119f6565b34801561072057600080fd5b50610396611a05565b34801561073557600080fd5b5061040e611a11565b34801561074a57600080fd5b5061037f610759366004613a87565b611a20565b34801561076a57600080fd5b50610396610779366004613c86565b611abf565b34801561078a57600080fd5b506105616107993660046136b9565b611b8f565b3480156107aa57600080fd5b5061037f6107b9366004613acb565b611ba4565b3480156107ca57600080fd5b506107de6107d9366004613c37565b611c86565b6040516103a3929190614114565b3480156107f857600080fd5b50610396611ddd565b34801561080d57600080fd5b50610396611de8565b34801561082257600080fd5b506107de610831366004613bd1565b611df3565b34801561084257600080fd5b5061040e6120ab565b34801561085757600080fd5b50610561610866366004613a87565b6120cf565b34801561087757600080fd5b5061037f6108863660046136b9565b61222a565b34801561089757600080fd5b5061040e6122e0565b3480156108ac57600080fd5b5061037f6108bb3660046139c2565b612304565b3480156108cc57600080fd5b5061037f6108db3660046136f1565b61242c565b3480156108ec57600080fd5b506103966108fb366004613a87565b6124b9565b34801561090c57600080fd5b5061039661263c565b34801561092157600080fd5b5061037f610930366004613982565b612647565b34801561094157600080fd5b5061037f61095036600461381a565b61275f565b34801561096157600080fd5b5061037f6109703660046136b9565b612851565b34801561098157600080fd5b50610445610990366004613932565b612953565b3480156109a157600080fd5b5061037f6109b036600461381a565b612acd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109e7612b53565b6001600160a01b031614610a42576040805162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000604482015290519081900360640190fd5b61ffff8616600090815260016020818152604080842080548251600295821615610100026000190190911694909404601f810184900484028501840190925281845291830182828015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b50505050509050805186869050148015610af1575060008151115b8015610b215750808051906020012086866040518083838082843780830192505050925050506040518091039020145b610b5c5760405162461bcd60e51b81526004018080602001828103825260268152602001806142456026913960400191505060405180910390fd5b610bd28787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612b5792505050565b50505050505050565b670dd280b9144a000081565b600881565b610bf4612b53565b6001600160a01b0316610c056119f6565b6001600160a01b031614610c4e576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166307e0db17826040518263ffffffff1660e01b8152600401808261ffff168152602001915050600060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b5050505050565b6006602052600090815260409020546001600160a01b031681565b6603328b944c400081565b6040805180820190915260058152640372e312e360dc1b602082015290565b610d20612b53565b6001600160a01b0316610d316119f6565b6001600160a01b031614610d7a576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166310ddb137826040518263ffffffff1660e01b8152600401808261ffff168152602001915050600060405180830381600087803b158015610cb857600080fd5b60056020526000908152604090205481565b66354a6ba7a1800081565b610e096134d5565b6001600160a01b03831660009081526004602052604090205460ff16610e30878483611704565b6040830181905215156000610e49898989888787611df3565b60208601919091529050610e61898989888588611c86565b6060860152608085015282610ec8576000610e8d85606001518660800151612bed90919063ffffffff16565b90508085604001511115610ec6576040850151600090610ead9083612c47565b6080870151909150610ebf9082612bed565b6080870152505b505b6000610ed68a8a8887611abf565b6080860151909150610ee89082612bed565b6080860181905260208601516060870151610f0e9291610f089190612bed565b90612bed565b861015610f4057610f3a8560200151610f34876060015189612c4790919063ffffffff16565b90612c47565b60808601525b5050505095945050505050565b60086020526000908152604090205481565b606081831015610ff957600083815260076020908152604080832085845282529182902080548351818402810184019094528084529091830182828015610fed57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610fb45790505b50505050509050611060565b600082815260076020908152604080832086845282529182902080548351818402810184019094528084529091830182828015610fed576000918252602091829020805461ffff168452908202830192909160029101808411610fb4579050505050505090505b92915050565b600a602052600090815260409020546001600160a01b031681565b61ffff8316600090815260016020818152604080842080548251600295821615610100026000190190911694909404601f810184900484028501840190925281845284939290919083018282801561111a5780601f106110ef5761010080835404028352916020019161111a565b820191906000526020600020905b8154815290600101906020018083116110fd57829003601f168201915b50505050509050838360405180838380828437808301925050509250505060405180910390208180519060200120149150505b9392505050565b670853a0d2313c000081565b611168612b53565b6001600160a01b03166111796119f6565b6001600160a01b0316146111c2576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b604080516342d65a8d60e01b815261ffff85166004820190815260248201928352604482018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926342d65a8d92879287928792606401848480828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561126157600080fd5b505af1158015610bd2573d6000803e3d6000fd5b66b1a2bc2ec5000081565b6601c6bf5263400081565b60096020908152600091825260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452909183018282801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b8181808214156113515760405162461bcd60e51b815260040161134890613ee5565b60405180910390fd5b600061135c85612ca4565b9050600061136985612ca4565b600087815260086020526040808220859055878252908190208290555190915086906000805160206141b4833981519152906113a690859061410b565b60405180910390a2846000805160206141b4833981519152826040516113cc919061410b565b60405180910390a260006113e08787610f5f565b905060008151116114035760405162461bcd60e51b815260040161134890613f51565b60008784888560405160200161141c9493929190614122565b604051602081830303815290604052905060005b825181101561152057600083828151811061144757fe5b602002602001015190506000600185510383146114645730611466565b335b61ffff831660009081526009602090815260408083208054825160026001831615610100026000190190921691909104601f81018590048502820185019093528281529495506115169487948a9488949193919083018282801561150b5780601f106114e05761010080835404028352916020019161150b565b820191906000526020600020905b8154815290600101906020018083116114ee57829003601f168201915b505050505047612dfd565b5050600101611430565b505050505050505050565b655af3107a400081565b61153d612b53565b6001600160a01b031661154e6119f6565b6001600160a01b031614611597576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b60009182526005602052604090912055565b6115b1612b53565b6001600160a01b03166115c26119f6565b6001600160a01b03161461160b576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b6000918252600a602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b611641612b53565b6001600160a01b03166116526119f6565b6001600160a01b03161461169b576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835291929083018282801561131e5780601f106112f35761010080835404028352916020019161131e565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663068bcd8d866040518263ffffffff1660e01b8152600401611753919061410b565b60206040518083038186803b15801561176b57600080fd5b505afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a391906136d5565b905060006117b0826130bf565b90506000826001600160a01b03166315770f926040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ed57600080fd5b505afa158015611801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118259190613a4b565b90506000836001600160a01b0316639bb811196040518163ffffffff1660e01b815260040160206040518083038186803b15801561186257600080fd5b505afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189a9190613a4b565b90508282116118b057600094505050505061114d565b60006118bc8385612c47565b905060006118dc826118d685670de0b6b3a7640000613221565b9061327a565b9050660221b262dd800081111580156118f3575087155b15611907576000965050505050505061114d565b600061191f670de0b6b3a76400006118d68c85613221565b905083811161192e5780611930565b835b9b9a5050505050505050505050565b651b48eb57e00081565b611951612b53565b6001600160a01b03166119626119f6565b6001600160a01b0316146119ab576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b60009182526006602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b600260209081526000928352604080842090915290825290205481565b6000546001600160a01b031690565b670de0b6b3a764000081565b6003546001600160a01b031681565b611a28612b53565b6001600160a01b0316611a396119f6565b6001600160a01b031614611a82576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b600082815260086020526040908190208290555182906000805160206141b483398151915290611ab390849061410b565b60405180910390a25050565b600083851415611ad157506000611b87565b6000858152600860205260408082205486835290822054909180611af584846132e1565b9250509150801580611b1257506000826002811115611b1057fe5b145b15611b24576000945050505050611b87565b6002826002811115611b3257fe5b1415611b505760405162461bcd60e51b815260040161134890613fbf565b8515611b63576000945050505050611b87565b6000611b73846118d68a88613221565b9050611b7f8882612c47565b955050505050505b949350505050565b60046020526000908152604090205460ff1681565b611bac612b53565b6001600160a01b0316611bbd6119f6565b6001600160a01b031614611c06576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b838380821415611c285760405162461bcd60e51b815260040161134890613ee5565b84861015611c5a5760008681526007602090815260408083208884529091529020611c5490858561350b565b50611c7e565b60008581526007602090815260408083208984529091529020610bd290858561350b565b505050505050565b6000808215611c9a57506000905080611dd2565b6000878914611cb0576603328b944c4000611cb9565b6601c6bf526340005b905085896000611cd988610f34670de0b6b3a76400006118d68789613221565b90506000611cf9670de0b6b3a76400006118d686655af3107a4000613221565b6000848152600a60205260409020549091506001600160a01b03168015611dc857600084815260056020526040808220549051631526fe2760e01b81528392916001600160a01b03841691631526fe2791611d569160040161410b565b60806040518083038186803b158015611d6e57600080fd5b505afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190613729565b50509150506000811115611dc557611dbe8585612bed565b9450600093505b50505b5090955093505050505b965096945050505050565b660221b262dd800081565b660e35fa931a000081565b6000808315611e0757506000905080611dd2565b60405163068bcd8d60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063068bcd8d90611e56908c9060040161410b565b60206040518083038186803b158015611e6e57600080fd5b505afa158015611e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea691906136d5565b6001600160a01b031663159f6add888a6040518363ffffffff1660e01b8152600401611ed39291906140f7565b6101006040518083038186803b158015611eec57600080fd5b505afa158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190613767565b60e081015160808201519192509087811015611f525760405162461bcd60e51b815260040161134890613f88565b6000611f5e828a612c47565b90506000611f80670de0b6b3a76400006118d686670853a0d2313c0000613221565b90506000611fa1670de0b6b3a76400006118d68766b1a2bc2ec50000613221565b90506000808c848610611fda57611fca670de0b6b3a76400006118d683651b48eb57e000613221565b92508b611fd5578291505b612095565b838610612012576000858810611ff05785611ff2565b875b905061200a660e35fa931a000060008888858c613335565b935050612095565b83871061206f576000858810612028578561202a565b875b905061204c612045660e35fa931a000060008989868b613335565b8590612bed565b935061200a612045670dd280b9144a0000660e35fa931a00008860008a8d613335565b86612091612045670dd280b9144a0000660e35fa931a0000886000868d613335565b9350505b50909f909e509c50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008282808214156120f35760405162461bcd60e51b815260040161134890613ee5565b60008581526008602052604080822054868352908220549091808061211885856132e1565b92509250925060006121298b612ca4565b905060006121368b612ca4565b9050600080600061214785856132e1565b92509250925082600281111561215957fe5b88600281111561216557fe5b1461217d5760019c5050505050505050505050612222565b600083600281111561218b57fe5b14156121a45760009c5050505050505050505050612222565b801515861515146121c25760019c5050505050505050505050612222565b60028360028111156121d057fe5b14156121e95760009c5050505050505050505050612222565b6000878311612201576121fc8884612c47565b61220b565b61220b8389612c47565b655af3107a400011159d5050505050505050505050505b505092915050565b612232612b53565b6001600160a01b03166122436119f6565b6001600160a01b03161461228c576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b600380546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b61230c612b53565b6001600160a01b031661231d6119f6565b6001600160a01b031614612366576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbed8b9c86868686866040518663ffffffff1660e01b8152600401808661ffff1681526020018561ffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561241857600080fd5b505af1158015611520573d6000803e3d6000fd5b612434612b53565b6001600160a01b03166124456119f6565b6001600160a01b03161461248e576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b60008282808214156124dd5760405162461bcd60e51b815260040161134890613ee5565b6000806124ea8787610f5f565b9050600081511161250d5760405162461bcd60e51b815260040161134890613f51565b60008760008860006040516020016125289493929190614122565b604051602081830303815290604052905060005b825181101561262f57600083828151811061255357fe5b60209081029190910181015161ffff8116600090815260099092526040808320905163040a7bb160e41b81529193506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916340a7bb10916125c791869130918a91889160040161403a565b604080518083038186803b1580156125de57600080fd5b505afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190613aa8565b5090506126238682612bed565b9550505060010161253c565b5091979650505050505050565b66038d7ea4c6800081565b61264f612b53565b6001600160a01b03166126606119f6565b6001600160a01b0316146126a9576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b600081116126f6576040805162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b604482015290519081900360640190fd5b61ffff808416600081815260026020908152604080832094871680845294825291829020859055815192835282019290925280820183905290517f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac09181900360600190a1505050565b612767612b53565b6001600160a01b03166127786119f6565b6001600160a01b0316146127c1576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b61ffff831660009081526001602052604090206127df9083836135b8565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051808461ffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b612859612b53565b6001600160a01b031661286a6119f6565b6001600160a01b0316146128b3576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b6001600160a01b0381166128f85760405162461bcd60e51b815260040180806020018281038252602681526020018061418e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60408051633d7b2f6f60e21b815261ffff8087166004830152851660248201523060448201526064810183905290516060916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f5ecbdbc91608480820192600092909190829003018186803b1580156129d657600080fd5b505afa1580156129ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612a1357600080fd5b8101908080516040519392919084640100000000821115612a3357600080fd5b908301906020820185811115612a4857600080fd5b8251640100000000811182820188101715612a6257600080fd5b82525081516020918201929091019080838360005b83811015612a8f578181015183820152602001612a77565b50505050905090810190601f168015612abc5780820380516001836020036101000a031916815260200191505b506040525050509050949350505050565b612ad5612b53565b6001600160a01b0316612ae66119f6565b6001600160a01b031614612b2f576040805162461bcd60e51b81526020600482018190526024820152600080516020614225833981519152604482015290519081900360640190fd5b61ffff83166000908152600960205260409020612b4d9083836135b8565b50505050565b3390565b60008060008084806020019051810190612b719190613cc6565b60008481526008602052604080822085905583825290819020829055519397509195509350915084906000805160206141b483398151915290612bb590869061410b565b60405180910390a2816000805160206141b483398151915282604051612bdb919061410b565b60405180910390a25050505050505050565b60008282018381101561114d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082821115612c9e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000818152600660205260408120546001600160a01b031680612cd95760405162461bcd60e51b815260040161134890613f1a565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1457600080fd5b505afa158015612d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4c9190613d4a565b90506000826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015612d8957600080fd5b505afa158015612d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc19190613cfb565b5050509150506000811215612de85760405162461bcd60e51b815260040161134890613eae565b612df281836133d6565b93505050505b919050565b61ffff8616600090815260016020818152604080842080548251600295821615610100026000190190911694909404601f810184900484028501840190925281845291830182828015612e915780601f10612e6657610100808354040283529160200191612e91565b820191906000526020600020905b815481529060010190602001808311612e7457829003601f168201915b50505050509050805160001415612ed95760405162461bcd60e51b81526004018080602001828103825260308152602001806141d46030913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c58031008389848a8a8a8a6040518863ffffffff1660e01b8152600401808761ffff1681526020018060200180602001866001600160a01b03168152602001856001600160a01b0316815260200180602001848103845289818151815260200191508051906020019080838360005b83811015612f8b578181015183820152602001612f73565b50505050905090810190601f168015612fb85780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b83811015612feb578181015183820152602001612fd3565b50505050905090810190601f1680156130185780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561304b578181015183820152602001613033565b50505050905090810190601f1680156130785780820380516001836020036101000a031916815260200191505b5099505050505050505050506000604051808303818588803b15801561309d57600080fd5b505af11580156130b1573d6000803e3d6000fd5b505050505050505050505050565b6000611060826001600160a01b031663feb56b156040518163ffffffff1660e01b815260040160206040518083038186803b1580156130fd57600080fd5b505afa158015613111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131359190613a4b565b836001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561316e57600080fd5b505afa158015613182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a691906136d5565b6001600160a01b03166370a08231856040518263ffffffff1660e01b81526004016131d19190613db6565b60206040518083038186803b1580156131e957600080fd5b505afa1580156131fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d69190613a4b565b60008261323057506000611060565b8282028284828161323d57fe5b041461114d5760405162461bcd60e51b81526004018080602001828103825260218152602001806142046021913960400191505060405180910390fd5b60008082116132d0576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816132d957fe5b049392505050565b60008060008060006132f3878761341e565b91509150600066038d7ea4c68000831161330f57506000613329565b66354a6ba7a18000831061332557506002613329565b5060015b97919650945092505050565b60008382101580156133475750848311155b6133635760405162461bcd60e51b815260040161134890613e30565b600061336f8686612c47565b9050600061338f88610f08846118d68d6133898d8c612c47565b90613221565b905060006133a989610f08856118d68e6133898e8c612c47565b905060006133b78787612c47565b9050611930670de0b6b3a76400006118d6600281856133898989612bed565b600060ff8216600814156133eb575081611060565b60006133f8836008613489565b9050600860ff8416106134145761340f848261327a565b611b87565b611b878482613221565b6000808284111561344e57613443846118d6670de0b6b3a76400006133898388612c47565b600091509150613482565b8284141561346157506000905080613482565b61347b836118d6670de0b6b3a76400006133898389612c47565b6001915091505b9250929050565b6000808260ff168460ff16116134a1578383036134a5565b8284035b60ff16905060148111156134cb5760405162461bcd60e51b815260040161134890613e65565b600a0a9392505050565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b82805482825590600052602060002090600f016010900481019282156135a85791602002820160005b8382111561357857833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613534565b80156135a65782816101000a81549061ffff0219169055600201602081600101049283019260010302613578565b505b506135b4929150613634565b5090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826135ee57600085556135a8565b82601f106136075782800160ff198235161785556135a8565b828001600101855582156135a8579182015b828111156135a8578235825591602001919060010190613619565b5b808211156135b45760008155600101613635565b8051612df88161416f565b60008083601f840112613665578182fd5b50813567ffffffffffffffff81111561367c578182fd5b60208301915083602082850101111561348257600080fd5b8051612df88161417d565b805169ffffffffffffffffffff81168114612df857600080fd5b6000602082840312156136ca578081fd5b813561114d81614157565b6000602082840312156136e6578081fd5b815161114d81614157565b60008060408385031215613703578081fd5b823561370e81614157565b9150602083013561371e8161416f565b809150509250929050565b6000806000806080858703121561373e578182fd5b845161374981614157565b60208601516040870151606090970151919890975090945092505050565b600061010080838503121561377a578182fd5b6040519081019067ffffffffffffffff8211818310171561379757fe5b816040526137a484613649565b81526137b260208501613694565b602082015260408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160c082015260e084015160e0820152809250505092915050565b60006020828403121561380f578081fd5b813561114d8161417d565b60008060006040848603121561382e578283fd5b83356138398161417d565b9250602084013567ffffffffffffffff811115613854578283fd5b61386086828701613654565b9497909650939450505050565b60008060008060008060808789031215613885578182fd5b86356138908161417d565b9550602087013567ffffffffffffffff808211156138ac578384fd5b6138b88a838b01613654565b90975095506040890135915080821682146138d1578384fd5b909350606088013590808211156138e6578384fd5b506138f389828a01613654565b979a9699509497509295939492505050565b60008060408385031215613917578182fd5b82356139228161417d565b9150602083013561371e8161417d565b60008060008060808587031215613947578182fd5b84356139528161417d565b935060208501356139628161417d565b9250604085013561397281614157565b9396929550929360600135925050565b600080600060608486031215613996578081fd5b83356139a18161417d565b925060208401356139b18161417d565b929592945050506040919091013590565b6000806000806000608086880312156139d9578283fd5b85356139e48161417d565b945060208601356139f48161417d565b935060408601359250606086013567ffffffffffffffff811115613a16578182fd5b613a2288828901613654565b969995985093965092949392505050565b600060208284031215613a44578081fd5b5035919050565b600060208284031215613a5c578081fd5b5051919050565b60008060408385031215613a75578182fd5b82359150602083013561371e81614157565b60008060408385031215613a99578182fd5b50508035926020909101359150565b60008060408385031215613aba578182fd5b505080516020909101519092909150565b60008060008060608587031215613ae0578182fd5b8435935060208501359250604085013567ffffffffffffffff80821115613b05578384fd5b818701915087601f830112613b18578384fd5b813581811115613b26578485fd5b8860208083028501011115613b39578485fd5b95989497505060200194505050565b600080600060608486031215613b5c578081fd5b83359250602084013591506040840135613b758161416f565b809150509250925092565b600080600080600060a08688031215613b97578283fd5b85359450602086013593506040860135613bb08161417d565b92506060860135613bc081614157565b949793965091946080013592915050565b60008060008060008060c08789031215613be9578384fd5b86359550602087013594506040870135613c028161417d565b9350606087013592506080870135613c198161416f565b915060a0870135613c298161416f565b809150509295509295509295565b60008060008060008060c08789031215613c4f578384fd5b86359550602087013594506040870135613c688161417d565b9350606087013592506080870135915060a0870135613c298161416f565b60008060008060808587031215613c9b578182fd5b8435935060208501359250604085013591506060850135613cbb8161416f565b939692955090935050565b60008060008060808587031215613cdb578182fd5b505082516020840151604085015160609095015191969095509092509050565b600080600080600060a08688031215613d12578283fd5b613d1b8661369f565b9450602086015193506040860151925060608601519150613d3e6080870161369f565b90509295509295909350565b600060208284031215613d5b578081fd5b815160ff8116811461114d578182fd5b60008151808452815b81811015613d9057602081850181015186830182015201613d74565b81811115613da15782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015613e0657835161ffff1683529284019291840191600101613de6565b50909695505050505050565b901515815260200190565b60006020825261114d6020830184613d6b565b6020808252818101527f4665654c6962726172793a2062616c616e6365206f7574206f6620626f756e64604082015260600190565b60208082526029908201527f4665654c6962726172793a2064696666206f6620646563696d616c7320697320604082015268746f6f206c6172676560b81b606082015260800190565b6020808252601d908201527f4665654c6962726172793a207072696365206973206e65676174697665000000604082015260600190565b6020808252818101527f4665654c6962726172793a205f706f6f6c496431203d3d205f706f6f6c496432604082015260600190565b6020808252601e908201527f4665654c6962726172793a2070726963652066656564206e6f74207365740000604082015260600190565b6020808252601d908201527f4665654c6962726172793a20696e76616c696420706f6f6c2070616972000000604082015260600190565b6020808252601e908201527f4665654c6962726172793a206e6f7420656e6f7567682062616c616e63650000604082015260600190565b6020808252601c908201527f4665654c6962726172793a205f737263506f6f6c496420646570656700000000604082015260600190565b600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600061ffff87168252602060018060a01b0387168184015260a0604084015261406660a0840187613d6b565b8515156060850152838103608085015282855460018082166000811461409357600181146140b0576140e6565b60028304607f16855260ff198316868601526040850193506140e6565b600283048086526140c08a61414b565b885b828110156140dd5781548882018a01529084019088016140c2565b87018801955050505b50919b9a5050505050505050505050565b61ffff929092168252602082015260400190565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60009081526020902090565b6001600160a01b038116811461416c57600080fd5b50565b801515811461416c57600080fd5b61ffff8116811461416c57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd6968384c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742061207472757374656420736f75726365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6e7472616374a26469706673582212203d296d47e86657b30357cd8302131e7cd8f30aeb83f9662faf1f5f1551e7c57464736f6c63430007060033000000000000000000000000af54be5b6eec24d6bfacf1cce4eaf680a8239398000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7