{
  "_format": "hh-sol-artifact-1",
  "contractName": "TradeMint",
  "sourceName": "contracts/mainContracts/TradeMint.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int24",
          "name": "_tick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "_nextTick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidityVolumeGrowth",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidityIncentiveGrowth",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tickliquidityVolumeGrowth",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tickliquidityIncentiveGrowth",
          "type": "uint256"
        }
      ],
      "name": "Cross",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tradeAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidityVolumeGrowth",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tradeVolume",
          "type": "uint256"
        }
      ],
      "name": "Snapshot",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "_tickLower",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "_tickUpper",
          "type": "int24"
        }
      ],
      "name": "SnapshotLiquidity",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "PUBLIC_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "_positions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastRewardGrowthInside",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastRewardVolumeGrowth",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastRewardSettlementedBlock",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokensOwed",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "changeOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "_tick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "_nextTick",
          "type": "int24"
        }
      ],
      "name": "cross",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "bool",
          "name": "_isReward",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "_rewardShare",
          "type": "uint256"
        }
      ],
      "name": "enableReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_poolAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isReward",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "_rewardShare",
          "type": "uint256"
        }
      ],
      "name": "enableReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tradeAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "_tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "_tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        }
      ],
      "name": "getLiquidityIncentiveGrowthInPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "feeGrowthInside",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockSettlementVolume",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getPendingSummaByTokenId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "userAddess",
          "type": "address"
        }
      ],
      "name": "getPledge",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        }
      ],
      "name": "getPoolNewLiquidityIncentiveGrowth",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newLiquidityIncentiveGrowth",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockSettlementVolume",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNum",
          "type": "uint256"
        }
      ],
      "name": "getPoolReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lpReward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tradeReward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "usderAddress",
          "type": "address"
        }
      ],
      "name": "getReduceFeeByUserAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tradeAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "getRelation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSuperFee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "_tick",
          "type": "int24"
        }
      ],
      "name": "getTickLiquidityIncentiveGrowthOutside",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "liquidityIncentiveGrowthOutside",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidityVolumeGrowthOutside",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "settlementBlock",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNum",
          "type": "uint256"
        }
      ],
      "name": "getTradeSettlementAmountGrowth",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tradeSettlementAmountGrowth",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "iSummaSwapV3Manager",
      "outputs": [
        {
          "internalType": "contract ISummaSwapV3Manager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isReward",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastWithdrawBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "massUpdatePools",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minPledge",
      "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": "address",
          "name": "userAddress",
          "type": "address"
        }
      ],
      "name": "pendingSumma",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "userAddress",
          "type": "address"
        }
      ],
      "name": "pendingTradeSumma",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pledgeRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "poolInfoByPoolAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastSettlementBlock",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidityVolumeGrowth",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidityIncentiveGrowth",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rewardShare",
          "type": "uint256"
        },
        {
          "internalType": "int24",
          "name": "currentTick",
          "type": "int24"
        },
        {
          "internalType": "uint256",
          "name": "unSettlementAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reduceFee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "router",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "routerAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        }
      ],
      "name": "setFactory",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISummaSwapV3Manager",
          "name": "_ISummaSwapV3Manager",
          "type": "address"
        }
      ],
      "name": "setISummaSwapV3Manager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minPledge",
          "type": "uint256"
        }
      ],
      "name": "setMinPledge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pledgeRate",
          "type": "uint256"
        }
      ],
      "name": "setPledgeRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_priAddress",
          "type": "address"
        }
      ],
      "name": "setPriAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "_reduceFee",
          "type": "uint24"
        }
      ],
      "name": "setReduceFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_routerAddress",
          "type": "address"
        }
      ],
      "name": "setRouterAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_settlementBlock",
          "type": "uint256"
        }
      ],
      "name": "setSettlementBlock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_summaAddress",
          "type": "address"
        }
      ],
      "name": "setSummaAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24",
          "name": "_superFee",
          "type": "uint24"
        }
      ],
      "name": "setSuperFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ITokenIssue",
          "name": "_tokenIssue",
          "type": "address"
        }
      ],
      "name": "setTokenIssue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_totalIssueRate",
          "type": "uint256"
        }
      ],
      "name": "setTotalIssueRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tradeShare",
          "type": "uint256"
        }
      ],
      "name": "setTradeShare",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "settlementBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "uint256",
          "name": "liquidityVolumeGrowth",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tradeVolume",
          "type": "uint256"
        }
      ],
      "name": "snapshot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "int24",
          "name": "_tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "_tickUpper",
          "type": "int24"
        }
      ],
      "name": "snapshotLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "int24",
          "name": "_tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "_tickUpper",
          "type": "int24"
        }
      ],
      "name": "snapshotMintLiquidity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "summaAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "superFee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenIssue",
      "outputs": [
        {
          "internalType": "contract ITokenIssue",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalIssueRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalRewardShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tradeShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pid",
          "type": "uint256"
        }
      ],
      "name": "updatePool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tradeSettlementedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tradeUnSettlementedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastTradeBlock",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "withdrawByTokenId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawSumma",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawTrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526103e860035534801561001657600080fd5b50600080546001600160a01b0319163317905561639880620000396000396000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c80637d4d0fd7116101ff578063b1bba4ac1161011a578063d65bd07f116100ad578063ebe62aad1161007c578063ebe62aad146107c3578063efa2681a146107cb578063f887ea40146107de578063fb02fc89146107e6576103c5565b8063d65bd07f14610777578063da9da5261461078a578063e90ff9f91461079d578063ea2d8a05146107b0576103c5565b8063bda29cfe116100e9578063bda29cfe1461072e578063c45a015514610754578063d47ccfa01461075c578063d6554ae11461076f576103c5565b8063b1bba4ac146106ed578063b27d0dde14610700578063b3944d5214610713578063b66b2b221461071b576103c5565b8063986e8016116101925780639e0796d0116101615780639e0796d0146106c2578063a6a04355146106ca578063a6f9dae1146106d2578063a70419d2146106e5576103c5565b8063986e8016146106815780639907ccab146106945780639b4b1786146106a75780639db49ed5146106af576103c5565b80638b12d7da116101ce5780638b12d7da146106305780638da5cb5b1461064357806390769e0e1461064b57806397d6958d1461065e576103c5565b80637d4d0fd7146105e15780638240c400146105f457806383cd75b1146105fc578063852feeb71461061d576103c5565b80634d5ce038116102ef578063630b5ba1116102825780636c2536d1116102515780636c2536d1146105ab5780636f3980b0146105b357806370dfb307146105c657806371ac3a7d146105d9576103c5565b8063630b5ba114610575578063694c7a051461057d5780636aa1f07b146105905780636b29657f14610598576103c5565b806354ea83d0116102be57806354ea83d014610534578063559ab6e4146105475780635bb478081461055a578063607feec21461056d576103c5565b80634d5ce038146104e6578063512d76061461050657806351eb05a614610519578063529ffe031461052c576103c5565b80631a65476d116103675780633ca7c02a116103365780633ca7c02a146104bb5780633ccfd60b146104c35780633d0aa386146104cb57806341cb87fc146104d3576103c5565b80631a65476d1461047a5780633268cc561461048d5780633310fd3a146104955780633b588351146104a8576103c5565b8063179d27af116103a3578063179d27af1461041f57806318bfb8bc14610432578063190d46f61461045257806319a18b5514610465576103c5565b80630a19fabc146103ca5780630f208beb146103e857806315330d271461040a575b600080fd5b6103d26107f9565b6040516103df919061601e565b60405180910390f35b6103fb6103f6366004615a74565b610815565b6040516103df93929190616234565b61041d610418366004615a3c565b610841565b005b61041d61042d366004615f0f565b61090e565b610445610440366004615a3c565b6109bb565b6040516103df91906160a6565b61041d610460366004615c35565b610aa0565b61046d610c03565b6040516103df91906161df565b61041d610488366004615f0f565b610c15565b6103d2610ca0565b6103d26104a3366004615b4f565b610cbc565b61041d6104b6366004615f0f565b610e3e565b610445610ed3565b61041d610ef7565b61046d61104c565b61041d6104e1366004615a3c565b61105e565b6104f96104f4366004615a3c565b61112b565b6040516103df919061609b565b610445610514366004615c9c565b611140565b61041d610527366004615f0f565b611178565b6103d2611279565b610445610542366004615f0f565b611295565b61041d610555366004615f0f565b611550565b61041d610568366004615a3c565b6115db565b6104456116a8565b61041d6116ae565b61041d61058b366004615aac565b6116cd565b6103d2611a32565b6104456105a6366004615a3c565b611a4e565b61041d611dc2565b61041d6105c1366004615f0f565b611dd4565b61041d6105d4366004615cc7565b611f1d565b61044561206f565b6103fb6105ef366004615c08565b612075565b6104456120c4565b61060f61060a366004615c9c565b6120ca565b6040516103df929190616226565b61060f61062b366004615dac565b612153565b61044561063e366004615a3c565b6123cc565b6103d26125eb565b610445610659366004615a3c565b612607565b61067161066c366004615f0f565b612648565b6040516103df949392919061624a565b61041d61068f366004615ef3565b61266f565b61041d6106a2366004615ef3565b61272b565b6104456127ee565b61041d6106bd366004615a3c565b6127f4565b6104456128c1565b6103d26128c7565b61041d6106e0366004615a3c565b6128e3565b61046d612a58565b61041d6106fb366004615a3c565b612a63565b61041d61070e366004615d8f565b612b30565b610445612d2a565b61041d610729366004615a3c565b612d30565b61074161073c366004615a3c565b612dfd565b6040516103df9796959493929190616265565b6103d2612e51565b61046d61076a366004615ba2565b612e6d565b610445613074565b61041d610785366004615d2a565b61307a565b6103d2610798366004615f0f565b613380565b61041d6107ab366004615f0f565b6133b7565b61041d6107be366004615f0f565b613442565b6104456134cd565b61041d6107d9366004615b0f565b6134d3565b6103d261380d565b61060f6107f4366004615a3c565b613829565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b601160209081526000928352604080842090915290825290208054600182015460029092015490919083565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461099457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600d546109b89073ffffffffffffffffffffffffffffffffffffffff1633836138a6565b50565b600e546040517f91d1485400000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906391d1485490610a34907fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa379086906004016160af565b60206040518083038186803b158015610a4c57600080fd5b505afa158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a849190615d0e565b15610a97575060095462ffffff16610a9b565b5060005b919050565b60025473ffffffffffffffffffffffffffffffffffffffff16610ac1613933565b73ffffffffffffffffffffffffffffffffffffffff1614610ae157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260126020908152604080832060059092529091205460ff1615610bfb57600084815260106020526040902060045482544391610b399190613937565b11158015610b4b575060008260060154115b15610baf578154600454600090610b63908390613937565b90506000610b8b600654610b858760040154610b7f87876139b4565b90613ac2565b90613b35565b9050610bab8a610ba660085484613b3590919063ffffffff16565b613b77565b5050505b610bbc8588888787613bf1565b7fc42fcee814e48ea79cb656f74d33c9acf93facf0c54b78c901f50256ccfc9bb785888686604051610bf194939291906161ef565b60405180910390a1505b505050505050565b6009546301000000900462ffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c9b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600455565b600f5473ffffffffffffffffffffffffffffffffffffffff1690565b6000610cc784613cbf565b15610d8e576000610cda83850185615df3565b600e5460408083015190517f1f532b3900000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691631f532b3991610d369160040161601e565b60206040518083038186803b158015610d4e57600080fd5b505afa158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190615a58565b915050610e37565b600e546040517f1f532b3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631f532b3990610de490879060040161601e565b60206040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190615a58565b90505b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ec457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b670de0b6b3a764000002600c55565b7fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa3781565b610eff613cc5565b6000610f09613d85565b90506000610f276064610b85600b5485613ac290919063ffffffff16565b9050600c54811015610f385750600c545b801561102457600d546040517f70a08231000000000000000000000000000000000000000000000000000000008152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610f9490339060040161601e565b60206040518083038186803b158015610fac57600080fd5b505afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190615f27565b11611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616103565b60405180910390fd5b600d546110489073ffffffffffffffffffffffffffffffffffffffff1633846138a6565b5050565b6009546301000000900462ffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60056020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260126020908152604080832093835260099093019052205490565b6000600a828154811061118757fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352601290915260409091206004548154929350909143916111ce9190613937565b111580156111e0575060008160060154115b156112745780546004546000906111f8908390613937565b90506000611214600654610b858660040154610b7f87876139b4565b60088086015490549192506112479173ffffffffffffffffffffffffffffffffffffffff90911690610ba6908490613b35565b600884015461126b9073ffffffffffffffffffffffffffffffffffffffff16614113565b50610bfb613cc5565b505050565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b6002546040517f99fbab88000000000000000000000000000000000000000000000000000000008152600091829182918291829182918291829173ffffffffffffffffffffffffffffffffffffffff909116906399fbab88906112fc908c906004016160a6565b6101806040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134d9190615f3f565b505050509750975097509750975097505050600061138f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888886141e7565b6002546040517f6352211e00000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff90911690636352211e906113eb908e906004016160a6565b60206040518083038186803b15801561140357600080fd5b505afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190615a58565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205490915060ff16156115415760008061147b87878f87612153565b60008f815260106020908152604091829020825160808101845281548082526001830154938201849052600283015494820194909452600390910154606082015293955091935090156114ea576114e8826020015184700100000000000000000000000000000000614311565b015b808411156115345760006114fe85836143de565b905061152e81896fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614311565b8e019d50505b50606001519a909a019950505b50969998505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115d657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600855565b60005473ffffffffffffffffffffffffffffffffffffffff16331461166157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60035481565b600a5460005b81811015611048576116c581611178565b6001016116b4565b60005473ffffffffffffffffffffffffffffffffffffffff16331461175357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b60006004541161178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906161a8565b6007546000906117b79073ffffffffffffffffffffffffffffffffffffffff168787876141e7565b90506117c16116ae565b82156119455760008211611801576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061613a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601260205260409020600a546118425760045461183e90610b7f4382613b35565b6013555b600881015473ffffffffffffffffffffffffffffffffffffffff166118e55760045461187290610b7f4382613b35565b8155600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b600680548401808255600483018054909103909155600890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558290556119da565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff166119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616171565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601260205260408120600401805460068054919091039055555b73ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169215159290921790915550505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b600a546000908190815b81811015611c42576000600a8281548110611a6f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452601283526040808520928b168552601184528085208286529093529190922060028101549193509015611c3457815460028201541015611b3957611b308160010154836009016000611b0a600454610b7f6001611b046004548a60020154613b3590919063ffffffff16565b90613937565b815260200190815260200160002054700100000000000000000000000000000000614311565b86019550611c2c565b43611b5e600454610b7f6001611b046004548760020154613b3590919063ffffffff16565b11158015611b70575060008260060154115b15611c2c576004546002820154600091611b8e91610b7f9082613b35565b90506000611ba76004548361393790919063ffffffff16565b90506000611bc3600654610b858760040154610b7f87876139b4565b90506000611bdc60085483613b3590919063ffffffff16565b90506000611c00827001000000000000000000000000000000008960060154614311565b9050611c22818760010154700100000000000000000000000000000000614311565b8b019a5050505050505b805495909501945b505050806001019050611a58565b506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611c9a90889060040161601e565b60206040518083038186803b158015611cb257600080fd5b505afa158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea9190615f27565b905060005b81811015611db8576002546040517f2f745c5900000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff1690632f745c5990611d50908a90869060040161603f565b60206040518083038186803b158015611d6857600080fd5b505afa158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190615f27565b9050611dab81611295565b9094019350600101611cef565b5091949350505050565b611dca613cc5565b6000610f09614420565b611ddc613cc5565b6000611de78261461b565b90506000611e056064610b85600b5485613ac290919063ffffffff16565b9050600c54811015611e165750600c545b8015611ef957600d546040517f70a08231000000000000000000000000000000000000000000000000000000008152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611e7290339060040161601e565b60206040518083038186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190615f27565b11611ef9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616103565b600d546112749073ffffffffffffffffffffffffffffffffffffffff1633846138a6565b60025473ffffffffffffffffffffffffffffffffffffffff16611f3e613933565b73ffffffffffffffffffffffffffffffffffffffff1614611f5e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260126020908152604080832060059092529091205460ff161561206857600084815260106020526040902060045482544391611fb69190613937565b11158015611fc8575060008260060154115b1561201b578154600454600090611fe0908390613937565b90506000611ffc600654610b858760040154610b7f87876139b4565b905061201789610ba660085484613b3590919063ffffffff16565b5050505b612029858760008787613bf1565b7fc42fcee814e48ea79cb656f74d33c9acf93facf0c54b78c901f50256ccfc9bb78587868660405161205e94939291906161ef565b60405180910390a1505b5050505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601260209081526040808320600294850b850b8452600190810190925290912090810154815491909201549192909190565b60045481565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260126020526040812060045482919082906121029086906143de565b905060008590506000612123600654610b858660040154610b7f87876139b4565b905061213a60085482613b3590919063ffffffff16565b945061214681866143de565b9550505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081206003810154600454825484939291439161219191613937565b111580156121a3575060008260060154115b156121be576000806121b487613829565b9550929092019150505b600288810b900b60009081526001808401602052604090912090810154815415612270576002820154600090815260078501602052604090205415612237578154600283015460009081526007860160205260409020546122319190700100000000000000000000000000000000614311565b01612270565b600454845461224591613937565b8260020154141561227057815461226e9086700100000000000000000000000000000000614311565b015b600289810b900b600090815260018086016020526040909120908101548154156123225760028201546000908152600787016020526040902054156122e9578154600283015460009081526007880160205260409020546122e39190700100000000000000000000000000000000614311565b01612322565b60045486546122f791613937565b826002015414156123225781546123209088700100000000000000000000000000000000614311565b015b600586015460009060028e810b91810b900b12612340575082612345565b508285035b600587015460009060028e810b91810b900b1215612364575081612369565b508186035b60008c815260106020908152604080832060020154835260078b019091529020548288038290039a50156123bb5760008c815260106020908152604080832060020154835260078b0190915290205498505b505050505050505094509492505050565b600a546000908190815b818110156125e2576000600a82815481106123ed57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452601283526040808520928b1685526011909352918320600a8054939550919392909183918790811061244457fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190206002810154909150156125d4578154600282015410156124ca576124c18160010154836009016000611b0a600454610b7f6001611b046004548a60020154613b3590919063ffffffff16565b860195506125cc565b436124ef600454610b7f6001611b046004548760020154613b3590919063ffffffff16565b11158015612501575060008260060154115b156125cc57600454600282015460009161251f91610b7f9082613b35565b90506000612547600454610b7f6001611b046004548860020154613b3590919063ffffffff16565b90506000612563600654610b858760040154610b7f87876139b4565b9050600061257c60085483613b3590919063ffffffff16565b905060006125a0827001000000000000000000000000000000008960060154614311565b90506125c2818760010154700100000000000000000000000000000000614311565b8b019a5050505050505b805495909501945b5050508060010190506123d6565b50909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60008061261383611a4e565b905060006126316064610b85600b5485613ac290919063ffffffff16565b9050600c54811015610e375750600c549392505050565b60106020526000908152604090208054600182015460028301546003909301549192909184565b60005473ffffffffffffffffffffffffffffffffffffffff1633146126f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146127b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b6009805462ffffff9092166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff909216919091179055565b600c5481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461287a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60135481565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461296957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166129eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a250565b60095462ffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314612ae957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612b40612b3b613933565b613cbf565b612b4957600080fd5b600060126000612b57613933565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060056000612b9f613933565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561127457600581018054600284810b62ffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092169190911790915583810b900b60009081526001820160205260409020805415801590612c4257506002810154600090815260078301602052604090205415155b15612c8b57600281015460009081526007830160205260409020548154612c7b9190700100000000000000000000000000000000614311565b6001820180549091019055600081555b60018101546003830154612c9e916143de565b600182015580546002830154612cb3916143de565b8155600454612ccb90610b7f6001611b044384613b35565b81600201819055507f2adb4b67cbae2c098371e7c630d02ca7d2270c2c2fbc05cd49ee330ed00a0cbc84848460020154856003015485600001548660010154604051612d1c969594939291906160d3565b60405180910390a150505050565b600a5490565b60005473ffffffffffffffffffffffffffffffffffffffff163314612db657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6012602052600090815260409020805460028083015460038401546004850154600586015460068701546008909701549596939592949193910b9173ffffffffffffffffffffffffffffffffffffffff1687565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b600080612e7986613cbf565b15612f83576000612e8c85870187615df3565b600e5460408083015190517f91d1485400000000000000000000000000000000000000000000000000000000815287955092935073ffffffffffffffffffffffffffffffffffffffff909116916391d1485491612f0e917fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa3791906004016160af565b60206040518083038186803b158015612f2657600080fd5b505afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e9190615d0e565b15612f7d5760095462ffffff90811690851681612f7757fe5b04840391505b5061306b565b50600e546040517f91d14854000000000000000000000000000000000000000000000000000000008152839173ffffffffffffffffffffffffffffffffffffffff16906391d1485490612ffc907fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa37908a906004016160af565b60206040518083038186803b15801561301457600080fd5b505afa158015613028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304c9190615d0e565b1561306b5760095462ffffff9081169084168161306557fe5b04830390505b95945050505050565b600b5481565b613085612b3b613933565b61308e57600080fd5b600061309c85870187615df3565b90506000601260006130ac613933565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060116000846040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000613137613933565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506005600061317f613933565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561337657600454825443916131bf9190613937565b111580156131d1575060008260060154115b156132435781546004546000906131e9908390613937565b90506000613205600654610b858760040154610b7f87876139b4565b905061322a8660400151613217613933565b600854613225908590613b35565b61481b565b61323a613235613933565b614113565b505050506132c9565b6000826009016000613270600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b8152602001908152602001600020549050816001015460001415801561329557508015155b156132c7576132ba826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b505b600181018054850190554360028083018290556005840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff8a840b1617905583018054870190556006830180548601905560045461333291610b7f9082613b35565b825560408084015190517f7c77e656b9ac404b27ce87e2dfdf91995fb9154a3d407802ca72815c83059f8c9161336d91899089908990616065565b60405180910390a15b5050505050505050565b600a818154811061339057600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461343d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600b55565b60005473ffffffffffffffffffffffffffffffffffffffff1633146134c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600355565b60085481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461355957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600060045411613595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906161a8565b61359d6116ae565b811561372157600081116135dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061613a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601260205260409020600a5461361e5760045461361a90610b7f4382613b35565b6013555b600881015473ffffffffffffffffffffffffffffffffffffffff166136c15760045461364e90610b7f4382613b35565b8155600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b600680548301808255600483018054909103909155600890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790558190556137b6565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205460ff16613780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616171565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601260205260408120600401805460068054919091039055555b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260126020526040812081908161385a856148f0565b905061387b8260060154610b85846002015484613ac290919063ffffffff16565b935061389d817001000000000000000000000000000000008460060154614311565b92505050915091565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611274908490614980565b3390565b6000828201838110156139ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d24af666040518163ffffffff1660e01b815260040160206040518083038186803b158015613a1f57600080fd5b505afa158015613a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a579190615f27565b905080831015613a6b5760009150506139ae565b80841015613a9157613a89612710610b85600354610b7f8588614a58565b9150506139ae565b613aba612710610b85600354610b7f613aaa868a614a58565b613ab4878a614a58565b906143de565b949350505050565b600082613ad1575060006139ae565b82820282848281613ade57fe5b04146139ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806163416021913960400191505060405180910390fd5b60006139ab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061518a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526012602052604090206006810154613bbf90839070010000000000000000000000000000000090614311565b60045482546009840191600091613bd591613937565b8152602081019190915260400160002080549091019055505050565b600085815260106020526040812090613c0b848488615246565b90506000613c19878961541e565b905080821115613c85576000613c2f83836143de565b90506fffffffffffffffffffffffffffffffff871615613c8357613c7781886fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614311565b60038501805490910190555b505b818355613c938585896154cf565b6001840155600454613cad90611b0481610b7f4382613b35565b83600201819055505050505050505050565b3b151590565b600454600090613cd990610b7f4382613b35565b9050601354811115613d80576000613cf3601354836139b4565b6001546040517f2fe5e3a600000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632fe5e3a690613d4c903090859060040161603f565b600060405180830381600087803b158015613d6657600080fd5b505af1158015613d7a573d6000803e3d6000fd5b50505050505b601355565b600a546000908190815b81811015613f94576000600a8281548110613da657fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260128252604080842033855260119093528320600a8054929550929392909183919087908110613df957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902060045483549192504391613e3d91613937565b11158015613e4f575060008260060154115b15613ef9578154600454600090613e67908390613937565b90506000613e83600654610b858760040154610b7f87876139b4565b9050613eb9613e9d60085483613b3590919063ffffffff16565b7001000000000000000000000000000000008760060154614311565b60008381526009870160205260409020805490910190556008850154613ef49073ffffffffffffffffffffffffffffffffffffffff16614113565b505050505b6000826009016000613f26600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b81526020019081526020016000205490508160010154600014158015613f4b57508015155b15613f7d57613f70826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b508054600090915594909401935050600101613d8f565b506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190613fec90339060040161601e565b60206040518083038186803b15801561400457600080fd5b505afa158015614018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403c9190615f27565b905060005b8181101561410a576002546040517f2f745c5900000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff1690632f745c59906140a2903390869060040161603f565b60206040518083038186803b1580156140ba57600080fd5b505afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190615f27565b90506140fd8161558f565b9094019350600101614041565b50919250505090565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260126020526040812081614142846148f0565b90506141638260060154610b85846002015484613ac290919063ffffffff16565b600383018054909101905560006002830155600682015461419890829070010000000000000000000000000000000090614311565b600454835460078501916000916141ae91613937565b8152602081019190915260400160009081209190915560068301556004546141da90610b7f4382613b35565b8255506003015492915050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061422157600080fd5b506040805173ffffffffffffffffffffffffffffffffffffffff948516602080830191909152939094168482015262ffffff919091166060808501919091528151808503820181526080850183528051908401207fff0000000000000000000000000000000000000000000000000000000000000060a086015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a184015260b58301939093527faf8dc78ed6578b2701c317308cd8f379451229b6bbeb4ce4c214d96aeb334f7b60d5808401919091528351808403909101815260f5909201909252805191012090565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870986860292508281109083900303905080614365576000841161435a57600080fd5b508290049050610e37565b80841161437157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006139ab83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615770565b600a546000908190815b81811015614613576000600a828154811061444157fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260128252604080842033855260119093528320600a805492955092939290918391908790811061449457fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020600454835491925043916144d891613937565b111580156144ea575060008260060154115b15614578578154600454600090614502908390613937565b9050600061451e600654610b858760040154610b7f87876139b4565b9050614538613e9d60085483613b3590919063ffffffff16565b600083815260098701602052604090208054909101905560088501546145739073ffffffffffffffffffffffffffffffffffffffff16614113565b505050505b60008260090160006145a5600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b815260200190815260200160002054905081600101546000141580156145ca57508015155b156145fc576145ef826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b50805460009091559490940193505060010161442a565b509091505090565b600a546000908190815b81811015614806576000600a828154811061463c57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260128252604080842033855260119093528320600a805492955092939290918391908790811061468f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020600454835491925043916146d391613937565b111580156146e5575060008260060154115b156147735781546004546000906146fd908390613937565b90506000614719600654610b858760040154610b7f87876139b4565b9050614733613e9d60085483613b3590919063ffffffff16565b6000838152600987016020526040902080549091019055600885015461476e9073ffffffffffffffffffffffffffffffffffffffff16614113565b505050505b60008260090160006147a0600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b815260200190815260200160002054905081600101546000141580156147c557508015155b156147f7576147ea826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b50505050806001019050614625565b506148108461558f565b909101915050919050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260116020908152604080832093861683529281528282206012909152919020600681015461487a90849070010000000000000000000000000000000090614311565b6004548254600984019160009161489091613937565b8152602001908152602001600020600082825401925050819055506148dd8260010154826009016000611b0a600454610b7f6001611b046004548b60020154613b3590919063ffffffff16565b8254018255506000600190910155505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260126020526040812080546004548390614927908390613937565b9050600061493583836139b4565b9050600061497561495260016008546143de90919063ffffffff16565b610b7f600854610b85600654610b858b6004015489613ac290919063ffffffff16565b979650505050505050565b60006149e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166157e49092919063ffffffff16565b80519091501561127457808060200190516020811015614a0157600080fd5b5051611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180616362602a913960400191505060405180910390fd5b60008282111580614a67575082155b15614a74575060006139ae565b600083830390506000614b27600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614ae857600080fd5b505afa158015614afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b209190615f27565b8390613b35565b90506001811015614c8e57614c85614c7e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba057600080fd5b505afa158015614bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd89190615f27565b6001546040517fb626975700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063b626975790614c2e9087906004016160a6565b60206040518083038186803b158015614c4657600080fd5b505afa158015614c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190615f27565b8390613ac2565b925050506139ae565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a2d34906040518163ffffffff1660e01b815260040160206040518083038186803b158015614cf657600080fd5b505afa158015614d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d2e9190615f27565b81101561517f576000805b82811015614dfa576001546040517fb6269757000000000000000000000000000000000000000000000000000000008152614df09173ffffffffffffffffffffffffffffffffffffffff169063b626975790614d999085906004016160a6565b60206040518083038186803b158015614db157600080fd5b505afa158015614dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614de99190615f27565b8390613937565b9150600101614d39565b506000614fb182611b04614efd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614e6f57600080fd5b505afa158015614e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ea79190615f27565b6001546040517fb626975700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063b626975790614c2e908b906004016160a6565b610b7f614faa600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614f6b57600080fd5b505afa158015614f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa39190615f27565b8990613ac2565b89906143de565b90506150f6600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345138eb86040518163ffffffff1660e01b815260040160206040518083038186803b15801561501e57600080fd5b505afa158015615032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150569190615f27565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d7f5e36040518163ffffffff1660e01b815260040160206040518083038186803b1580156150be57600080fd5b505afa1580156150d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab49190615f27565b81111561517457600154604080517f45138eb800000000000000000000000000000000000000000000000000000000815290516151699273ffffffffffffffffffffffffffffffffffffffff16916345138eb8916004808301926020929190829003018186803b15801561501e57600080fd5b9450505050506139ae565b93506139ae92505050565b6000925050506139ae565b60008183615230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156151f55781810151838201526020016151dd565b50505050905090810190601f1680156152225780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161523c57fe5b0495945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081206003810154600454825443916152819190613937565b11158015615293575060008260060154115b156152a4576152a184614113565b90505b806152b457600092505050610e37565b600286810b810b6000908152600184016020908152604080832093840154835260078601909152902054158015906152ec5750805415155b15615335578054600282015460009081526007850160205260409020546153259190700100000000000000000000000000000000614311565b6001820180549091019055600081555b600180820154600288810b810b6000908152928601602090815260408085209283015485526007880190915290922054909190158015906153765750805415155b156153bf578054600282015460009081526007870160205260409020546153af9190700100000000000000000000000000000000614311565b6001820180549091019055600081555b6001810154600586015460009060028c810b91810b900b126153e25750826153e7565b508285035b600587015460009060028c810b91810b900b121561540657508161540b565b508186035b9503949094039998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601260209081526040808320848452601083528184208054600290910154855260078201909352922054909190156154c85760008381526010602090815260408083206001810154600290910154845260078501909252909120546154b19190700100000000000000000000000000000000614311565b600084815260106020526040812060010155909101905b5092915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081206002810154615507576000915050610e37565b600285810b80820b600090815260018401602052604080822088850b850b835290822060058601549194909391810b900b126155455750815461554f565b5081546002840154035b6005840154600090600289810b91810b900b121561556f57508154615579565b5081546002850154035b6002909401540392909203925050509392505050565b6002546040517f99fbab8800000000000000000000000000000000000000000000000000000000815260009182918291829182918291829173ffffffffffffffffffffffffffffffffffffffff16906399fbab88906155f2908b906004016160a6565b6101806040518083038186803b15801561560b57600080fd5b505afa15801561561f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156439190615f3f565b5050505097509750975097509750975050506000615685600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888886141e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120549192509060ff16156157635760006156c4868685615246565b905060006156d2848d61541e565b60008d81526010602052604081206003018054919055939093019290508082111561574e57600061570383836143de565b60008e81526010602052604090208490559050615744816fffffffffffffffffffffffffffffffff8816700100000000000000000000000000000000614311565b8401935050615760565b60008c81526010602052604090208290555b50505b9998505050505050505050565b600081848411156157dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156151f55781810151838201526020016151dd565b505050900390565b6060610e348484600085856157f885613cbf565b61586357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106158cc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161588f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461592e576040519150601f19603f3d011682016040523d82523d6000602084013e615933565b606091505b50915091506149758282866060831561594d575081610e37565b82511561595d5782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156151f55781810151838201526020016151dd565b8035610a9b816162d2565b8051610a9b816162d2565b60008083601f8401126159e5578182fd5b50813567ffffffffffffffff8111156159fc578182fd5b602083019150836020828501011115615a1457600080fd5b9250929050565b8051610a9b81616302565b8051610a9b81616311565b8051610a9b8161632f565b600060208284031215615a4d578081fd5b81356139ab816162d2565b600060208284031215615a69578081fd5b81516139ab816162d2565b60008060408385031215615a86578081fd5b8235615a91816162d2565b91506020830135615aa1816162d2565b809150509250929050565b600080600080600060a08688031215615ac3578081fd5b8535615ace816162d2565b94506020860135615ade816162d2565b93506040860135615aee8161632f565b92506060860135615afe816162f4565b949793965091946080013592915050565b600080600060608486031215615b23578283fd5b8335615b2e816162d2565b92506020840135615b3e816162f4565b929592945050506040919091013590565b600080600060408486031215615b63578283fd5b8335615b6e816162d2565b9250602084013567ffffffffffffffff811115615b89578283fd5b615b95868287016159d4565b9497909650939450505050565b60008060008060608587031215615bb7578384fd5b8435615bc2816162d2565b9350602085013567ffffffffffffffff811115615bdd578384fd5b615be9878288016159d4565b9094509250506040850135615bfd8161632f565b939692955090935050565b60008060408385031215615c1a578182fd5b8235615c25816162d2565b91506020830135615aa181616302565b600080600080600060a08688031215615c4c578283fd5b8535615c57816162d2565b94506020860135615c6781616311565b9350604086013592506060860135615c7e81616302565b91506080860135615c8e81616302565b809150509295509295909350565b60008060408385031215615cae578182fd5b8235615cb9816162d2565b946020939093013593505050565b60008060008060808587031215615cdc578182fd5b8435615ce7816162d2565b9350602085013592506040850135615cfe81616302565b91506060850135615bfd81616302565b600060208284031215615d1f578081fd5b81516139ab816162f4565b600080600080600060808688031215615d41578283fd5b853567ffffffffffffffff811115615d57578384fd5b615d63888289016159d4565b9096509450506020860135615d7781616302565b94979396509394604081013594506060013592915050565b60008060408385031215615da1578182fd5b8235615c2581616302565b60008060008060808587031215615dc1578182fd5b8435615dcc81616302565b93506020850135615ddc81616302565b9250604085013591506060850135615bfd816162d2565b60006020808385031215615e05578182fd5b823567ffffffffffffffff80821115615e1c578384fd5b9084019060608287031215615e2f578384fd5b604051606081018181108382111715615e4457fe5b604052823582811115615e55578586fd5b8301601f81018813615e65578586fd5b803583811115615e7157fe5b615ea1867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016162ae565b93508084528886828401011115615eb6578687fd5b80868301878601378301850186905250818152615ed48385016159be565b84820152615ee4604084016159be565b60408201529695505050505050565b600060208284031215615f04578081fd5b81356139ab8161632f565b600060208284031215615f20578081fd5b5035919050565b600060208284031215615f38578081fd5b5051919050565b6000806000806000806000806000806000806101808d8f031215615f6157898afd5b8c516bffffffffffffffffffffffff81168114615f7c578a8bfd5b9b50615f8a60208e016159c9565b9a50615f9860408e016159c9565b9950615fa660608e016159c9565b9850615fb460808e01615a31565b9750615fc260a08e01615a1b565b9650615fd060c08e01615a1b565b9550615fde60e08e01615a26565b94506101008d015193506101208d01519250615ffd6101408e01615a26565b915061600c6101608e01615a26565b90509295989b509295989b509295989b565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff94909416845260029290920b60208401526040830152606082015260800190565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600296870b81529490950b602085015260408401929092526060830152608082015260a081019190915260c00190565b60208082526013908201527f496e73756666696369656e7420706c6564676500000000000000000000000000604082015260600190565b60208082526011908201527f6572726f72207265776172645368617265000000000000000000000000000000604082015260600190565b60208082526012908201527f706f6f6c206973206e6f74207265776172640000000000000000000000000000604082015260600190565b60208082526015908201527f6572726f7220736574746c656d656e74426c6f636b0000000000000000000000604082015260600190565b62ffffff91909116815260200190565b93845273ffffffffffffffffffffffffffffffffffffffff929092166020840152600290810b60408401520b606082015260800190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b96875260208701959095526040860193909352606085019190915260020b608084015260a083015273ffffffffffffffffffffffffffffffffffffffff1660c082015260e00190565b60405181810167ffffffffffffffff811182821017156162ca57fe5b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109b857600080fd5b80151581146109b857600080fd5b8060020b81146109b857600080fd5b6fffffffffffffffffffffffffffffffff811681146109b857600080fd5b62ffffff811681146109b857600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103c55760003560e01c80637d4d0fd7116101ff578063b1bba4ac1161011a578063d65bd07f116100ad578063ebe62aad1161007c578063ebe62aad146107c3578063efa2681a146107cb578063f887ea40146107de578063fb02fc89146107e6576103c5565b8063d65bd07f14610777578063da9da5261461078a578063e90ff9f91461079d578063ea2d8a05146107b0576103c5565b8063bda29cfe116100e9578063bda29cfe1461072e578063c45a015514610754578063d47ccfa01461075c578063d6554ae11461076f576103c5565b8063b1bba4ac146106ed578063b27d0dde14610700578063b3944d5214610713578063b66b2b221461071b576103c5565b8063986e8016116101925780639e0796d0116101615780639e0796d0146106c2578063a6a04355146106ca578063a6f9dae1146106d2578063a70419d2146106e5576103c5565b8063986e8016146106815780639907ccab146106945780639b4b1786146106a75780639db49ed5146106af576103c5565b80638b12d7da116101ce5780638b12d7da146106305780638da5cb5b1461064357806390769e0e1461064b57806397d6958d1461065e576103c5565b80637d4d0fd7146105e15780638240c400146105f457806383cd75b1146105fc578063852feeb71461061d576103c5565b80634d5ce038116102ef578063630b5ba1116102825780636c2536d1116102515780636c2536d1146105ab5780636f3980b0146105b357806370dfb307146105c657806371ac3a7d146105d9576103c5565b8063630b5ba114610575578063694c7a051461057d5780636aa1f07b146105905780636b29657f14610598576103c5565b806354ea83d0116102be57806354ea83d014610534578063559ab6e4146105475780635bb478081461055a578063607feec21461056d576103c5565b80634d5ce038146104e6578063512d76061461050657806351eb05a614610519578063529ffe031461052c576103c5565b80631a65476d116103675780633ca7c02a116103365780633ca7c02a146104bb5780633ccfd60b146104c35780633d0aa386146104cb57806341cb87fc146104d3576103c5565b80631a65476d1461047a5780633268cc561461048d5780633310fd3a146104955780633b588351146104a8576103c5565b8063179d27af116103a3578063179d27af1461041f57806318bfb8bc14610432578063190d46f61461045257806319a18b5514610465576103c5565b80630a19fabc146103ca5780630f208beb146103e857806315330d271461040a575b600080fd5b6103d26107f9565b6040516103df919061601e565b60405180910390f35b6103fb6103f6366004615a74565b610815565b6040516103df93929190616234565b61041d610418366004615a3c565b610841565b005b61041d61042d366004615f0f565b61090e565b610445610440366004615a3c565b6109bb565b6040516103df91906160a6565b61041d610460366004615c35565b610aa0565b61046d610c03565b6040516103df91906161df565b61041d610488366004615f0f565b610c15565b6103d2610ca0565b6103d26104a3366004615b4f565b610cbc565b61041d6104b6366004615f0f565b610e3e565b610445610ed3565b61041d610ef7565b61046d61104c565b61041d6104e1366004615a3c565b61105e565b6104f96104f4366004615a3c565b61112b565b6040516103df919061609b565b610445610514366004615c9c565b611140565b61041d610527366004615f0f565b611178565b6103d2611279565b610445610542366004615f0f565b611295565b61041d610555366004615f0f565b611550565b61041d610568366004615a3c565b6115db565b6104456116a8565b61041d6116ae565b61041d61058b366004615aac565b6116cd565b6103d2611a32565b6104456105a6366004615a3c565b611a4e565b61041d611dc2565b61041d6105c1366004615f0f565b611dd4565b61041d6105d4366004615cc7565b611f1d565b61044561206f565b6103fb6105ef366004615c08565b612075565b6104456120c4565b61060f61060a366004615c9c565b6120ca565b6040516103df929190616226565b61060f61062b366004615dac565b612153565b61044561063e366004615a3c565b6123cc565b6103d26125eb565b610445610659366004615a3c565b612607565b61067161066c366004615f0f565b612648565b6040516103df949392919061624a565b61041d61068f366004615ef3565b61266f565b61041d6106a2366004615ef3565b61272b565b6104456127ee565b61041d6106bd366004615a3c565b6127f4565b6104456128c1565b6103d26128c7565b61041d6106e0366004615a3c565b6128e3565b61046d612a58565b61041d6106fb366004615a3c565b612a63565b61041d61070e366004615d8f565b612b30565b610445612d2a565b61041d610729366004615a3c565b612d30565b61074161073c366004615a3c565b612dfd565b6040516103df9796959493929190616265565b6103d2612e51565b61046d61076a366004615ba2565b612e6d565b610445613074565b61041d610785366004615d2a565b61307a565b6103d2610798366004615f0f565b613380565b61041d6107ab366004615f0f565b6133b7565b61041d6107be366004615f0f565b613442565b6104456134cd565b61041d6107d9366004615b0f565b6134d3565b6103d261380d565b61060f6107f4366004615a3c565b613829565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b601160209081526000928352604080842090915290825290208054600182015460029092015490919083565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461099457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600d546109b89073ffffffffffffffffffffffffffffffffffffffff1633836138a6565b50565b600e546040517f91d1485400000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906391d1485490610a34907fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa379086906004016160af565b60206040518083038186803b158015610a4c57600080fd5b505afa158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a849190615d0e565b15610a97575060095462ffffff16610a9b565b5060005b919050565b60025473ffffffffffffffffffffffffffffffffffffffff16610ac1613933565b73ffffffffffffffffffffffffffffffffffffffff1614610ae157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8516600090815260126020908152604080832060059092529091205460ff1615610bfb57600084815260106020526040902060045482544391610b399190613937565b11158015610b4b575060008260060154115b15610baf578154600454600090610b63908390613937565b90506000610b8b600654610b858760040154610b7f87876139b4565b90613ac2565b90613b35565b9050610bab8a610ba660085484613b3590919063ffffffff16565b613b77565b5050505b610bbc8588888787613bf1565b7fc42fcee814e48ea79cb656f74d33c9acf93facf0c54b78c901f50256ccfc9bb785888686604051610bf194939291906161ef565b60405180910390a1505b505050505050565b6009546301000000900462ffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c9b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600455565b600f5473ffffffffffffffffffffffffffffffffffffffff1690565b6000610cc784613cbf565b15610d8e576000610cda83850185615df3565b600e5460408083015190517f1f532b3900000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff90911691631f532b3991610d369160040161601e565b60206040518083038186803b158015610d4e57600080fd5b505afa158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190615a58565b915050610e37565b600e546040517f1f532b3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631f532b3990610de490879060040161601e565b60206040518083038186803b158015610dfc57600080fd5b505afa158015610e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e349190615a58565b90505b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ec457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b670de0b6b3a764000002600c55565b7fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa3781565b610eff613cc5565b6000610f09613d85565b90506000610f276064610b85600b5485613ac290919063ffffffff16565b9050600c54811015610f385750600c545b801561102457600d546040517f70a08231000000000000000000000000000000000000000000000000000000008152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610f9490339060040161601e565b60206040518083038186803b158015610fac57600080fd5b505afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe49190615f27565b11611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616103565b60405180910390fd5b600d546110489073ffffffffffffffffffffffffffffffffffffffff1633846138a6565b5050565b6009546301000000900462ffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60056020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260126020908152604080832093835260099093019052205490565b6000600a828154811061118757fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352601290915260409091206004548154929350909143916111ce9190613937565b111580156111e0575060008160060154115b156112745780546004546000906111f8908390613937565b90506000611214600654610b858660040154610b7f87876139b4565b60088086015490549192506112479173ffffffffffffffffffffffffffffffffffffffff90911690610ba6908490613b35565b600884015461126b9073ffffffffffffffffffffffffffffffffffffffff16614113565b50610bfb613cc5565b505050565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b6002546040517f99fbab88000000000000000000000000000000000000000000000000000000008152600091829182918291829182918291829173ffffffffffffffffffffffffffffffffffffffff909116906399fbab88906112fc908c906004016160a6565b6101806040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134d9190615f3f565b505050509750975097509750975097505050600061138f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888886141e7565b6002546040517f6352211e00000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff90911690636352211e906113eb908e906004016160a6565b60206040518083038186803b15801561140357600080fd5b505afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190615a58565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205490915060ff16156115415760008061147b87878f87612153565b60008f815260106020908152604091829020825160808101845281548082526001830154938201849052600283015494820194909452600390910154606082015293955091935090156114ea576114e8826020015184700100000000000000000000000000000000614311565b015b808411156115345760006114fe85836143de565b905061152e81896fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614311565b8e019d50505b50606001519a909a019950505b50969998505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115d657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600855565b60005473ffffffffffffffffffffffffffffffffffffffff16331461166157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60035481565b600a5460005b81811015611048576116c581611178565b6001016116b4565b60005473ffffffffffffffffffffffffffffffffffffffff16331461175357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b60006004541161178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906161a8565b6007546000906117b79073ffffffffffffffffffffffffffffffffffffffff168787876141e7565b90506117c16116ae565b82156119455760008211611801576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061613a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601260205260409020600a546118425760045461183e90610b7f4382613b35565b6013555b600881015473ffffffffffffffffffffffffffffffffffffffff166118e55760045461187290610b7f4382613b35565b8155600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b600680548401808255600483018054909103909155600890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558290556119da565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff166119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616171565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601260205260408120600401805460068054919091039055555b73ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169215159290921790915550505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b600a546000908190815b81811015611c42576000600a8281548110611a6f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452601283526040808520928b168552601184528085208286529093529190922060028101549193509015611c3457815460028201541015611b3957611b308160010154836009016000611b0a600454610b7f6001611b046004548a60020154613b3590919063ffffffff16565b90613937565b815260200190815260200160002054700100000000000000000000000000000000614311565b86019550611c2c565b43611b5e600454610b7f6001611b046004548760020154613b3590919063ffffffff16565b11158015611b70575060008260060154115b15611c2c576004546002820154600091611b8e91610b7f9082613b35565b90506000611ba76004548361393790919063ffffffff16565b90506000611bc3600654610b858760040154610b7f87876139b4565b90506000611bdc60085483613b3590919063ffffffff16565b90506000611c00827001000000000000000000000000000000008960060154614311565b9050611c22818760010154700100000000000000000000000000000000614311565b8b019a5050505050505b805495909501945b505050806001019050611a58565b506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611c9a90889060040161601e565b60206040518083038186803b158015611cb257600080fd5b505afa158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea9190615f27565b905060005b81811015611db8576002546040517f2f745c5900000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff1690632f745c5990611d50908a90869060040161603f565b60206040518083038186803b158015611d6857600080fd5b505afa158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190615f27565b9050611dab81611295565b9094019350600101611cef565b5091949350505050565b611dca613cc5565b6000610f09614420565b611ddc613cc5565b6000611de78261461b565b90506000611e056064610b85600b5485613ac290919063ffffffff16565b9050600c54811015611e165750600c545b8015611ef957600d546040517f70a08231000000000000000000000000000000000000000000000000000000008152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611e7290339060040161601e565b60206040518083038186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190615f27565b11611ef9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616103565b600d546112749073ffffffffffffffffffffffffffffffffffffffff1633846138a6565b60025473ffffffffffffffffffffffffffffffffffffffff16611f3e613933565b73ffffffffffffffffffffffffffffffffffffffff1614611f5e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260126020908152604080832060059092529091205460ff161561206857600084815260106020526040902060045482544391611fb69190613937565b11158015611fc8575060008260060154115b1561201b578154600454600090611fe0908390613937565b90506000611ffc600654610b858760040154610b7f87876139b4565b905061201789610ba660085484613b3590919063ffffffff16565b5050505b612029858760008787613bf1565b7fc42fcee814e48ea79cb656f74d33c9acf93facf0c54b78c901f50256ccfc9bb78587868660405161205e94939291906161ef565b60405180910390a1505b5050505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601260209081526040808320600294850b850b8452600190810190925290912090810154815491909201549192909190565b60045481565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260126020526040812060045482919082906121029086906143de565b905060008590506000612123600654610b858660040154610b7f87876139b4565b905061213a60085482613b3590919063ffffffff16565b945061214681866143de565b9550505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081206003810154600454825484939291439161219191613937565b111580156121a3575060008260060154115b156121be576000806121b487613829565b9550929092019150505b600288810b900b60009081526001808401602052604090912090810154815415612270576002820154600090815260078501602052604090205415612237578154600283015460009081526007860160205260409020546122319190700100000000000000000000000000000000614311565b01612270565b600454845461224591613937565b8260020154141561227057815461226e9086700100000000000000000000000000000000614311565b015b600289810b900b600090815260018086016020526040909120908101548154156123225760028201546000908152600787016020526040902054156122e9578154600283015460009081526007880160205260409020546122e39190700100000000000000000000000000000000614311565b01612322565b60045486546122f791613937565b826002015414156123225781546123209088700100000000000000000000000000000000614311565b015b600586015460009060028e810b91810b900b12612340575082612345565b508285035b600587015460009060028e810b91810b900b1215612364575081612369565b508186035b60008c815260106020908152604080832060020154835260078b019091529020548288038290039a50156123bb5760008c815260106020908152604080832060020154835260078b0190915290205498505b505050505050505094509492505050565b600a546000908190815b818110156125e2576000600a82815481106123ed57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452601283526040808520928b1685526011909352918320600a8054939550919392909183918790811061244457fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190206002810154909150156125d4578154600282015410156124ca576124c18160010154836009016000611b0a600454610b7f6001611b046004548a60020154613b3590919063ffffffff16565b860195506125cc565b436124ef600454610b7f6001611b046004548760020154613b3590919063ffffffff16565b11158015612501575060008260060154115b156125cc57600454600282015460009161251f91610b7f9082613b35565b90506000612547600454610b7f6001611b046004548860020154613b3590919063ffffffff16565b90506000612563600654610b858760040154610b7f87876139b4565b9050600061257c60085483613b3590919063ffffffff16565b905060006125a0827001000000000000000000000000000000008960060154614311565b90506125c2818760010154700100000000000000000000000000000000614311565b8b019a5050505050505b805495909501945b5050508060010190506123d6565b50909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60008061261383611a4e565b905060006126316064610b85600b5485613ac290919063ffffffff16565b9050600c54811015610e375750600c549392505050565b60106020526000908152604090208054600182015460028301546003909301549192909184565b60005473ffffffffffffffffffffffffffffffffffffffff1633146126f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146127b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b6009805462ffffff9092166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff909216919091179055565b600c5481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461287a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60135481565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461296957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166129eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3691a250565b60095462ffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314612ae957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612b40612b3b613933565b613cbf565b612b4957600080fd5b600060126000612b57613933565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060056000612b9f613933565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561127457600581018054600284810b62ffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092169190911790915583810b900b60009081526001820160205260409020805415801590612c4257506002810154600090815260078301602052604090205415155b15612c8b57600281015460009081526007830160205260409020548154612c7b9190700100000000000000000000000000000000614311565b6001820180549091019055600081555b60018101546003830154612c9e916143de565b600182015580546002830154612cb3916143de565b8155600454612ccb90610b7f6001611b044384613b35565b81600201819055507f2adb4b67cbae2c098371e7c630d02ca7d2270c2c2fbc05cd49ee330ed00a0cbc84848460020154856003015485600001548660010154604051612d1c969594939291906160d3565b60405180910390a150505050565b600a5490565b60005473ffffffffffffffffffffffffffffffffffffffff163314612db657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6012602052600090815260409020805460028083015460038401546004850154600586015460068701546008909701549596939592949193910b9173ffffffffffffffffffffffffffffffffffffffff1687565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b600080612e7986613cbf565b15612f83576000612e8c85870187615df3565b600e5460408083015190517f91d1485400000000000000000000000000000000000000000000000000000000815287955092935073ffffffffffffffffffffffffffffffffffffffff909116916391d1485491612f0e917fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa3791906004016160af565b60206040518083038186803b158015612f2657600080fd5b505afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e9190615d0e565b15612f7d5760095462ffffff90811690851681612f7757fe5b04840391505b5061306b565b50600e546040517f91d14854000000000000000000000000000000000000000000000000000000008152839173ffffffffffffffffffffffffffffffffffffffff16906391d1485490612ffc907fee244ef9da0b2f89a74b208ea9fe1a639ebdf634027d9e1f092b58c39954fa37908a906004016160af565b60206040518083038186803b15801561301457600080fd5b505afa158015613028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304c9190615d0e565b1561306b5760095462ffffff9081169084168161306557fe5b04830390505b95945050505050565b600b5481565b613085612b3b613933565b61308e57600080fd5b600061309c85870187615df3565b90506000601260006130ac613933565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060116000846040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000613137613933565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506005600061317f613933565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561337657600454825443916131bf9190613937565b111580156131d1575060008260060154115b156132435781546004546000906131e9908390613937565b90506000613205600654610b858760040154610b7f87876139b4565b905061322a8660400151613217613933565b600854613225908590613b35565b61481b565b61323a613235613933565b614113565b505050506132c9565b6000826009016000613270600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b8152602001908152602001600020549050816001015460001415801561329557508015155b156132c7576132ba826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b505b600181018054850190554360028083018290556005840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff8a840b1617905583018054870190556006830180548601905560045461333291610b7f9082613b35565b825560408084015190517f7c77e656b9ac404b27ce87e2dfdf91995fb9154a3d407802ca72815c83059f8c9161336d91899089908990616065565b60405180910390a15b5050505050505050565b600a818154811061339057600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461343d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600b55565b60005473ffffffffffffffffffffffffffffffffffffffff1633146134c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600355565b60085481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461355957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b600060045411613595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b906161a8565b61359d6116ae565b811561372157600081116135dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061613a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601260205260409020600a5461361e5760045461361a90610b7f4382613b35565b6013555b600881015473ffffffffffffffffffffffffffffffffffffffff166136c15760045461364e90610b7f4382613b35565b8155600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b600680548301808255600483018054909103909155600890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790558190556137b6565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205460ff16613780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90616171565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601260205260408120600401805460068054919091039055555b5073ffffffffffffffffffffffffffffffffffffffff91909116600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260126020526040812081908161385a856148f0565b905061387b8260060154610b85846002015484613ac290919063ffffffff16565b935061389d817001000000000000000000000000000000008460060154614311565b92505050915091565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611274908490614980565b3390565b6000828201838110156139ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d24af666040518163ffffffff1660e01b815260040160206040518083038186803b158015613a1f57600080fd5b505afa158015613a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a579190615f27565b905080831015613a6b5760009150506139ae565b80841015613a9157613a89612710610b85600354610b7f8588614a58565b9150506139ae565b613aba612710610b85600354610b7f613aaa868a614a58565b613ab4878a614a58565b906143de565b949350505050565b600082613ad1575060006139ae565b82820282848281613ade57fe5b04146139ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806163416021913960400191505060405180910390fd5b60006139ab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061518a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526012602052604090206006810154613bbf90839070010000000000000000000000000000000090614311565b60045482546009840191600091613bd591613937565b8152602081019190915260400160002080549091019055505050565b600085815260106020526040812090613c0b848488615246565b90506000613c19878961541e565b905080821115613c85576000613c2f83836143de565b90506fffffffffffffffffffffffffffffffff871615613c8357613c7781886fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614311565b60038501805490910190555b505b818355613c938585896154cf565b6001840155600454613cad90611b0481610b7f4382613b35565b83600201819055505050505050505050565b3b151590565b600454600090613cd990610b7f4382613b35565b9050601354811115613d80576000613cf3601354836139b4565b6001546040517f2fe5e3a600000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632fe5e3a690613d4c903090859060040161603f565b600060405180830381600087803b158015613d6657600080fd5b505af1158015613d7a573d6000803e3d6000fd5b50505050505b601355565b600a546000908190815b81811015613f94576000600a8281548110613da657fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260128252604080842033855260119093528320600a8054929550929392909183919087908110613df957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902060045483549192504391613e3d91613937565b11158015613e4f575060008260060154115b15613ef9578154600454600090613e67908390613937565b90506000613e83600654610b858760040154610b7f87876139b4565b9050613eb9613e9d60085483613b3590919063ffffffff16565b7001000000000000000000000000000000008760060154614311565b60008381526009870160205260409020805490910190556008850154613ef49073ffffffffffffffffffffffffffffffffffffffff16614113565b505050505b6000826009016000613f26600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b81526020019081526020016000205490508160010154600014158015613f4b57508015155b15613f7d57613f70826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b508054600090915594909401935050600101613d8f565b506002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190613fec90339060040161601e565b60206040518083038186803b15801561400457600080fd5b505afa158015614018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403c9190615f27565b905060005b8181101561410a576002546040517f2f745c5900000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff1690632f745c59906140a2903390869060040161603f565b60206040518083038186803b1580156140ba57600080fd5b505afa1580156140ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f29190615f27565b90506140fd8161558f565b9094019350600101614041565b50919250505090565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260126020526040812081614142846148f0565b90506141638260060154610b85846002015484613ac290919063ffffffff16565b600383018054909101905560006002830155600682015461419890829070010000000000000000000000000000000090614311565b600454835460078501916000916141ae91613937565b8152602081019190915260400160009081209190915560068301556004546141da90610b7f4382613b35565b8255506003015492915050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061422157600080fd5b506040805173ffffffffffffffffffffffffffffffffffffffff948516602080830191909152939094168482015262ffffff919091166060808501919091528151808503820181526080850183528051908401207fff0000000000000000000000000000000000000000000000000000000000000060a086015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a184015260b58301939093527faf8dc78ed6578b2701c317308cd8f379451229b6bbeb4ce4c214d96aeb334f7b60d5808401919091528351808403909101815260f5909201909252805191012090565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870986860292508281109083900303905080614365576000841161435a57600080fd5b508290049050610e37565b80841161437157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60006139ab83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615770565b600a546000908190815b81811015614613576000600a828154811061444157fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260128252604080842033855260119093528320600a805492955092939290918391908790811061449457fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020600454835491925043916144d891613937565b111580156144ea575060008260060154115b15614578578154600454600090614502908390613937565b9050600061451e600654610b858760040154610b7f87876139b4565b9050614538613e9d60085483613b3590919063ffffffff16565b600083815260098701602052604090208054909101905560088501546145739073ffffffffffffffffffffffffffffffffffffffff16614113565b505050505b60008260090160006145a5600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b815260200190815260200160002054905081600101546000141580156145ca57508015155b156145fc576145ef826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b50805460009091559490940193505060010161442a565b509091505090565b600a546000908190815b81811015614806576000600a828154811061463c57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1680835260128252604080842033855260119093528320600a805492955092939290918391908790811061468f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff1683528201929092526040019020600454835491925043916146d391613937565b111580156146e5575060008260060154115b156147735781546004546000906146fd908390613937565b90506000614719600654610b858760040154610b7f87876139b4565b9050614733613e9d60085483613b3590919063ffffffff16565b6000838152600987016020526040902080549091019055600885015461476e9073ffffffffffffffffffffffffffffffffffffffff16614113565b505050505b60008260090160006147a0600454611b04600454610b7f6004548960020154613b3590919063ffffffff16565b815260200190815260200160002054905081600101546000141580156147c557508015155b156147f7576147ea826001015482700100000000000000000000000000000000614311565b8254018255600060018301555b50505050806001019050614625565b506148108461558f565b909101915050919050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260116020908152604080832093861683529281528282206012909152919020600681015461487a90849070010000000000000000000000000000000090614311565b6004548254600984019160009161489091613937565b8152602001908152602001600020600082825401925050819055506148dd8260010154826009016000611b0a600454610b7f6001611b046004548b60020154613b3590919063ffffffff16565b8254018255506000600190910155505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260126020526040812080546004548390614927908390613937565b9050600061493583836139b4565b9050600061497561495260016008546143de90919063ffffffff16565b610b7f600854610b85600654610b858b6004015489613ac290919063ffffffff16565b979650505050505050565b60006149e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166157e49092919063ffffffff16565b80519091501561127457808060200190516020811015614a0157600080fd5b5051611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180616362602a913960400191505060405180910390fd5b60008282111580614a67575082155b15614a74575060006139ae565b600083830390506000614b27600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614ae857600080fd5b505afa158015614afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b209190615f27565b8390613b35565b90506001811015614c8e57614c85614c7e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba057600080fd5b505afa158015614bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd89190615f27565b6001546040517fb626975700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063b626975790614c2e9087906004016160a6565b60206040518083038186803b158015614c4657600080fd5b505afa158015614c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190615f27565b8390613ac2565b925050506139ae565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a2d34906040518163ffffffff1660e01b815260040160206040518083038186803b158015614cf657600080fd5b505afa158015614d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d2e9190615f27565b81101561517f576000805b82811015614dfa576001546040517fb6269757000000000000000000000000000000000000000000000000000000008152614df09173ffffffffffffffffffffffffffffffffffffffff169063b626975790614d999085906004016160a6565b60206040518083038186803b158015614db157600080fd5b505afa158015614dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614de99190615f27565b8390613937565b9150600101614d39565b506000614fb182611b04614efd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614e6f57600080fd5b505afa158015614e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ea79190615f27565b6001546040517fb626975700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063b626975790614c2e908b906004016160a6565b610b7f614faa600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4a814fd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614f6b57600080fd5b505afa158015614f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fa39190615f27565b8990613ac2565b89906143de565b90506150f6600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345138eb86040518163ffffffff1660e01b815260040160206040518083038186803b15801561501e57600080fd5b505afa158015615032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150569190615f27565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d7f5e36040518163ffffffff1660e01b815260040160206040518083038186803b1580156150be57600080fd5b505afa1580156150d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab49190615f27565b81111561517457600154604080517f45138eb800000000000000000000000000000000000000000000000000000000815290516151699273ffffffffffffffffffffffffffffffffffffffff16916345138eb8916004808301926020929190829003018186803b15801561501e57600080fd5b9450505050506139ae565b93506139ae92505050565b6000925050506139ae565b60008183615230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156151f55781810151838201526020016151dd565b50505050905090810190601f1680156152225780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161523c57fe5b0495945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081206003810154600454825443916152819190613937565b11158015615293575060008260060154115b156152a4576152a184614113565b90505b806152b457600092505050610e37565b600286810b810b6000908152600184016020908152604080832093840154835260078601909152902054158015906152ec5750805415155b15615335578054600282015460009081526007850160205260409020546153259190700100000000000000000000000000000000614311565b6001820180549091019055600081555b600180820154600288810b810b6000908152928601602090815260408085209283015485526007880190915290922054909190158015906153765750805415155b156153bf578054600282015460009081526007870160205260409020546153af9190700100000000000000000000000000000000614311565b6001820180549091019055600081555b6001810154600586015460009060028c810b91810b900b126153e25750826153e7565b508285035b600587015460009060028c810b91810b900b121561540657508161540b565b508186035b9503949094039998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601260209081526040808320848452601083528184208054600290910154855260078201909352922054909190156154c85760008381526010602090815260408083206001810154600290910154845260078501909252909120546154b19190700100000000000000000000000000000000614311565b600084815260106020526040812060010155909101905b5092915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081206002810154615507576000915050610e37565b600285810b80820b600090815260018401602052604080822088850b850b835290822060058601549194909391810b900b126155455750815461554f565b5081546002840154035b6005840154600090600289810b91810b900b121561556f57508154615579565b5081546002850154035b6002909401540392909203925050509392505050565b6002546040517f99fbab8800000000000000000000000000000000000000000000000000000000815260009182918291829182918291829173ffffffffffffffffffffffffffffffffffffffff16906399fbab88906155f2908b906004016160a6565b6101806040518083038186803b15801561560b57600080fd5b505afa15801561561f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156439190615f3f565b5050505097509750975097509750975050506000615685600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888886141e7565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120549192509060ff16156157635760006156c4868685615246565b905060006156d2848d61541e565b60008d81526010602052604081206003018054919055939093019290508082111561574e57600061570383836143de565b60008e81526010602052604090208490559050615744816fffffffffffffffffffffffffffffffff8816700100000000000000000000000000000000614311565b8401935050615760565b60008c81526010602052604090208290555b50505b9998505050505050505050565b600081848411156157dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156151f55781810151838201526020016151dd565b505050900390565b6060610e348484600085856157f885613cbf565b61586357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106158cc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161588f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461592e576040519150601f19603f3d011682016040523d82523d6000602084013e615933565b606091505b50915091506149758282866060831561594d575081610e37565b82511561595d5782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156151f55781810151838201526020016151dd565b8035610a9b816162d2565b8051610a9b816162d2565b60008083601f8401126159e5578182fd5b50813567ffffffffffffffff8111156159fc578182fd5b602083019150836020828501011115615a1457600080fd5b9250929050565b8051610a9b81616302565b8051610a9b81616311565b8051610a9b8161632f565b600060208284031215615a4d578081fd5b81356139ab816162d2565b600060208284031215615a69578081fd5b81516139ab816162d2565b60008060408385031215615a86578081fd5b8235615a91816162d2565b91506020830135615aa1816162d2565b809150509250929050565b600080600080600060a08688031215615ac3578081fd5b8535615ace816162d2565b94506020860135615ade816162d2565b93506040860135615aee8161632f565b92506060860135615afe816162f4565b949793965091946080013592915050565b600080600060608486031215615b23578283fd5b8335615b2e816162d2565b92506020840135615b3e816162f4565b929592945050506040919091013590565b600080600060408486031215615b63578283fd5b8335615b6e816162d2565b9250602084013567ffffffffffffffff811115615b89578283fd5b615b95868287016159d4565b9497909650939450505050565b60008060008060608587031215615bb7578384fd5b8435615bc2816162d2565b9350602085013567ffffffffffffffff811115615bdd578384fd5b615be9878288016159d4565b9094509250506040850135615bfd8161632f565b939692955090935050565b60008060408385031215615c1a578182fd5b8235615c25816162d2565b91506020830135615aa181616302565b600080600080600060a08688031215615c4c578283fd5b8535615c57816162d2565b94506020860135615c6781616311565b9350604086013592506060860135615c7e81616302565b91506080860135615c8e81616302565b809150509295509295909350565b60008060408385031215615cae578182fd5b8235615cb9816162d2565b946020939093013593505050565b60008060008060808587031215615cdc578182fd5b8435615ce7816162d2565b9350602085013592506040850135615cfe81616302565b91506060850135615bfd81616302565b600060208284031215615d1f578081fd5b81516139ab816162f4565b600080600080600060808688031215615d41578283fd5b853567ffffffffffffffff811115615d57578384fd5b615d63888289016159d4565b9096509450506020860135615d7781616302565b94979396509394604081013594506060013592915050565b60008060408385031215615da1578182fd5b8235615c2581616302565b60008060008060808587031215615dc1578182fd5b8435615dcc81616302565b93506020850135615ddc81616302565b9250604085013591506060850135615bfd816162d2565b60006020808385031215615e05578182fd5b823567ffffffffffffffff80821115615e1c578384fd5b9084019060608287031215615e2f578384fd5b604051606081018181108382111715615e4457fe5b604052823582811115615e55578586fd5b8301601f81018813615e65578586fd5b803583811115615e7157fe5b615ea1867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016162ae565b93508084528886828401011115615eb6578687fd5b80868301878601378301850186905250818152615ed48385016159be565b84820152615ee4604084016159be565b60408201529695505050505050565b600060208284031215615f04578081fd5b81356139ab8161632f565b600060208284031215615f20578081fd5b5035919050565b600060208284031215615f38578081fd5b5051919050565b6000806000806000806000806000806000806101808d8f031215615f6157898afd5b8c516bffffffffffffffffffffffff81168114615f7c578a8bfd5b9b50615f8a60208e016159c9565b9a50615f9860408e016159c9565b9950615fa660608e016159c9565b9850615fb460808e01615a31565b9750615fc260a08e01615a1b565b9650615fd060c08e01615a1b565b9550615fde60e08e01615a26565b94506101008d015193506101208d01519250615ffd6101408e01615a26565b915061600c6101608e01615a26565b90509295989b509295989b509295989b565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff94909416845260029290920b60208401526040830152606082015260800190565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600296870b81529490950b602085015260408401929092526060830152608082015260a081019190915260c00190565b60208082526013908201527f496e73756666696369656e7420706c6564676500000000000000000000000000604082015260600190565b60208082526011908201527f6572726f72207265776172645368617265000000000000000000000000000000604082015260600190565b60208082526012908201527f706f6f6c206973206e6f74207265776172640000000000000000000000000000604082015260600190565b60208082526015908201527f6572726f7220736574746c656d656e74426c6f636b0000000000000000000000604082015260600190565b62ffffff91909116815260200190565b93845273ffffffffffffffffffffffffffffffffffffffff929092166020840152600290810b60408401520b606082015260800190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b96875260208701959095526040860193909352606085019190915260020b608084015260a083015273ffffffffffffffffffffffffffffffffffffffff1660c082015260e00190565b60405181810167ffffffffffffffff811182821017156162ca57fe5b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146109b857600080fd5b80151581146109b857600080fd5b8060020b81146109b857600080fd5b6fffffffffffffffffffffffffffffffff811681146109b857600080fd5b62ffffff811681146109b857600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
