{
  "_format": "hh-sol-artifact-1",
  "contractName": "BalancerV3PoolSwapper",
  "sourceName": "contracts/swap/BalancerV3PoolSwapper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        },
        {
          "internalType": "uint256[]",
          "name": "how",
          "type": "uint256[]"
        }
      ],
      "name": "AuthSenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "BytesOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "TaskSlippageAboveMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSlippageAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "smartVault",
          "type": "address"
        }
      ],
      "name": "TaskSmartVaultPriceOracleNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskThresholdTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "TaskTimeLockActive",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenOutNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskTokenThresholdNotMet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTxCostLimitPctAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCostPct",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitPctExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskUnpaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "volume",
          "type": "uint256"
        }
      ],
      "name": "TaskVolumeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskVolumeLimitTokenZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "BalanceConnectorsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connector",
          "type": "address"
        }
      ],
      "name": "ConnectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "CustomTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "DefaultTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBuffer",
              "type": "bool"
            }
          ],
          "internalType": "struct IBalancerV3BatchRouter.SwapPathStep[]",
          "name": "steps",
          "type": "tuple[]"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTaskAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTimeLock",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTokensSource",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomTokenOut[]",
                  "name": "customTokensOut",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "smartVault",
                          "type": "address"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "previousBalanceConnectorId",
                          "type": "bytes32"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "nextBalanceConnectorId",
                          "type": "bytes32"
                        }
                      ],
                      "internalType": "struct BaseTask.BaseConfig",
                      "name": "baseConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256",
                          "name": "gasPriceLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "priorityFeeLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimitPct",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct GasLimitedTask.GasLimitConfig",
                      "name": "gasLimitConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "mode",
                          "type": "uint8"
                        },
                        {
                          "internalType": "uint256",
                          "name": "frequency",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "allowedAt",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "window",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct TimeLockedTask.TimeLockConfig",
                      "name": "timeLockConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
                          "name": "acceptanceType",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address[]",
                          "name": "tokens",
                          "type": "address[]"
                        }
                      ],
                      "internalType": "struct TokenIndexedTask.TokenIndexConfig",
                      "name": "tokenIndexConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "min",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "max",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.Threshold",
                          "name": "defaultThreshold",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "min",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "max",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct TokenThresholdTask.Threshold",
                              "name": "threshold",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.CustomThresholdConfig[]",
                          "name": "customThresholdConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct TokenThresholdTask.TokenThresholdConfig",
                      "name": "tokenThresholdConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "amount",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "period",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                          "name": "defaultVolumeLimit",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "amount",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "period",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                              "name": "volumeLimit",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.CustomVolumeLimitConfig[]",
                          "name": "customVolumeLimitConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct VolumeLimitedTask.VolumeLimitConfig",
                      "name": "volumeLimitConfig",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct Task.TaskConfig",
                  "name": "taskConfig",
                  "type": "tuple"
                }
              ],
              "internalType": "struct BaseSwapTask.BaseSwapConfig",
              "name": "baseSwapConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct BalancerV3PoolSwapper.BalancerV3SwapConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setCustomTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setCustomTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setCustomVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setDefaultTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6152ea80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80637125590a11610186578063b187bd26116100e3578063d3feb60211610097578063e427298711610071578063e4272987146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d3feb60214610777578063d45a76cf1461078a578063d86483e11461079d57600080fd5b8063c267621e116100c8578063c267621e1461073a578063c47590e41461074b578063d09edf311461075e57600080fd5b8063b187bd2614610714578063b96e422c1461073157600080fd5b80639eebe7cd1161013a578063a2c456441161011f578063a2c4564414610674578063a337417714610687578063a5900c4d146106ba57600080fd5b80639eebe7cd14610642578063a0c3774f1461066157600080fd5b80638456cb591161016b5780638456cb59146106145780638a5215861461061c57806390333ba81461062f57600080fd5b80637125590a146105ee57806383f3084f1461060157600080fd5b8063423a4b401161023f57806351a424b1116101f357806363560086116101cd578063635600861461056657806363e133bc146105795780636aacaad8146105a257600080fd5b806351a424b1146104e75780635670e2ce1461051f5780635ea54eee1461053a57600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f1366004614389565b6107e9565b005b6102f66103063660046143e2565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a3660046145a1565b610886565b6103c161035d3660046143e2565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f6610401366004614665565b610936565b6102f66104143660046146ab565b610965565b6102f66104273660046146f3565b610990565b6102f661043a366004614b3d565b6109cd565b6102f6610af3565b6102f6610455366004614665565b610b7a565b600f546104679060ff1681565b6040516103339190614c62565b6104876104823660046143e2565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f705cf274ecf345b36038d7169e27741a6610b4e904781886c7a003a031a8e09c81565b604051908152602001610333565b600154610487906001600160a01b031681565b6104fa6104f53660046143e2565b610be6565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f66105743660046143e2565b610c0f565b6104876105873660046143e2565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f66105fc366004614c8a565b610c38565b601c54610487906001600160a01b031681565b6102f6610c63565b601d54610487906001600160a01b031681565b6102f661063d366004614cac565b610cd5565b6104c66106503660046143e2565b602080526000908152604090205481565b6104c661066f3660046143e2565b610d08565b6102f6610682366004614ce1565b610d9f565b6104fa604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6104fa6106c83660046143e2565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107219060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f6610759366004614cfa565b610dc8565b600054610487906201000090046001600160a01b031681565b6102f6610785366004614cac565b610df3565b6103c16107983660046143e2565b610e20565b6104c66107ab3660046143e2565b610e8f565b6102f66107be366004614d26565b610ebd565b6102f66107d1366004614e23565b611069565b6107216107e43660046143e2565b611098565b6107f88460ff168484846110cd565b61080f336000356001600160e01b03191683611178565b61081b858585856111bf565b5050505050565b61082b81611464565b610842336000356001600160e01b03191683611178565b61084b82611478565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614c4c565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b031916611502565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8614e55565b602002602001015183838151811061091257610912614e55565b602002602001015161151e565b8061092981614e81565b9150506108da565b505050565b610942848484846115c8565b610959336000356001600160e01b03191683611178565b61081b85858585611631565b61096f82826116ea565b610986336000356001600160e01b03191683611178565b6109318383611762565b6109ad8160018111156109a5576109a5614c4c565b60ff166117e9565b6109c4336000356001600160e01b03191683611178565b61084b82611830565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa8261188d565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b031916611502565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b86848484846115c8565b610b9d336000356001600160e01b03191683611178565b61081b858585856118fd565b6001600160a01b038082166000908152601f60205260408120549091168015610bd25780610bdf565b601d546001600160a01b03165b9392505050565b600080600080610bf5856119bd565b805160208201516040909201519097919650945092505050565b610c1881611464565b610c2f336000356001600160e01b03191683611178565b61084b82611a48565b610c428282611a92565b610c59336000356001600160e01b03191683611178565b6109318383611aec565b610c79336000356001600160e01b031916611502565b60045460ff1615610c9d5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610ce0838383611b6f565b610cf7336000356001600160e01b03191683611178565b610d02848484611c01565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d999190614e9a565b92915050565b610da8816117e9565b610dbf336000356001600160e01b03191683611178565b61084b82611c57565b610dd28282611cb5565b610de9336000356001600160e01b03191683611178565b6109318383611d12565b610dfe838383611b6f565b610e15336000356001600160e01b03191683611178565b610d02848484611dac565b600080600080600080610e3287611e08565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b03811660009081526020805260408120548015610eb35780610bdf565b601e549392505050565b610ec8848484611b6f565b610edf336000356001600160e01b03191683611178565b83600003610ef357610ef085610d08565b93505b610efe858585611e3c565b6000610f0986610ba9565b90506000610f178783611e47565b90506000610f40610f3087670de0b6b3a7640000614eb3565b610f3a8985611e53565b90611e53565b9050600063569158fa60e01b89858a858a604051602401610f65959493929190614ec6565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610fff9216908690600401614fa1565b6000604051808303816000875af115801561101e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110469190810190614fc3565b905061105d8a8a8a8861105886611ec6565b611ed3565b50505050505050505050565b611075848484846110cd565b61108c336000356001600160e01b03191683611178565b61081b85858585611ee0565b6000806110a6601084611f7b565b90506001600f5460ff1660018111156110c1576110c1614c4c565b14610d99578015610bdf565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061110457611104614e55565b602002602001018181525050838160018151811061112457611124614e55565b602002602001018181525050828160028151811061114457611144614e55565b602002602001018181525050818160038151811061116457611164614e55565b602002602001018181525050949350505050565b611183838383611f9d565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a7593929190615092565b60ff84166112705760008111806111d65750600082115b1561126b57826000036112085760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061121457508281115b1561123e57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361126b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6113cd565b8260000361129d5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b8015806112b557506112b26224ea00846150c4565b81115b156112df57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361130c57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff85160161134e57601c61132383612033565b111561126b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff851601611396576113638261204a565b61136c83612033565b1461126b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff1660028111156113e2576113e2614c4c565b600a805460ff191660018360028111156113fe576113fe614c4c565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610d99826001600160a01b03166117e9565b6001600160a01b0381166114b8576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b9083908390611178565b6001600160a01b03821661155e576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806115735761156e60108361206d565b61157e565b61157e601083612082565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516115bc911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061160857611608614e55565b602002602001018181525050836001600160a01b03168160018151811061112457611124614e55565b6001600160a01b038416611671576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061169590848484612097565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061172757611727614e55565b602002602001018181525050816001600160a01b03168160018151811061175057611750614e55565b60200260200101818152505092915050565b6001600160a01b03821661178957604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016115bc565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061181f5761181f614e55565b602002602001018181525050919050565b600f805482919060ff19166001838181111561184e5761184e614c4c565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516118829190614c62565b60405180910390a150565b600054610100900460ff166118e65760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80516118f190612167565b6118fa816121d6565b50565b6001600160a01b03841661193d576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119619084848461222f565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e144884846040516119af929190918252602082015260400190565b60405180910390a350505050565b6119ea604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611a135780611a16565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611ac957611ac9614e55565b6020026020010181815250508160001c8160018151811061175057611750614e55565b8082148015611afa57508115155b15611b34576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611bae57611bae614e55565b6020026020010181815250508281600181518110611bce57611bce614e55565b6020026020010181815250508181600281518110611bee57611bee614e55565b6020026020010181815250509392505050565b611c0e601684848461222f565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611c805760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611882565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611cf257611cf2614e55565b602002602001018181525050818160018151811061175057611750614e55565b6001600160a01b038216611d3957604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611d625760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016115bc565b611db96012848484612097565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611e335780610bdf565b60169392505050565b61093183838361238e565b6000610bdf8383612495565b60008282028315801590611e76575082848281611e7257611e726150db565b0414155b15611e9e57604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611ebb57670de0b6b3a7640000600019820104600101611ebe565b60005b949350505050565b6000610d99826000612694565b61081b85858585856126f1565b670de0b6b3a7640000811115611f22576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611456565b6001600160a01b03811660009081526001830160205260408120541515610bdf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611ff29087903090889088906004016150f1565b602060405180830381865afa15801561200f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190615137565b6000611ebe6120456201518084615154565b612705565b6000808061205e6120456201518086615154565b5091509150611ebe82826127a1565b6000610bdf836001600160a01b038416612827565b6000610bdf836001600160a01b038416612921565b60006001600160a01b0384161580156120ae575082155b80156120b8575081155b905060006001600160a01b038516158015906120dc57508215806120dc5750838310155b9050811580156120ea575080155b1561213a576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166121c05760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6121cd8160a00151612970565b6118fa81612a1d565b600054610100900460ff166118fa5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b038416158015612246575082155b8015612250575081155b905060006001600160a01b0385161580159061226c5750600084115b80156122785750600083115b905081158015612286575080155b156122d6576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156122fd576000600287018190556004870155612369565b8560040154600003612324576000600287015561231a8342615168565b6004870155612369565b85546001600160a01b03868116911614612369578554600090612350906001600160a01b031687611e47565b60028801549091506123629082612b78565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6123988383612bd5565b6001600160a01b0383166123bf57604051636070789160e11b815260040160405180910390fd5b816000036123f9576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061240484610ba9565b6001600160a01b031603612444576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061244f84610e8f565b905080821115610d02576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250f919061517b565b90506001600160a01b038116612560576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b600061256a612c1b565b905080516000146125fb57816001600160a01b031663355efdd961258d87612c9b565b61259687612c9b565b846040518463ffffffff1660e01b81526004016125b593929190615198565b602060405180830381865afa1580156125d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f69190614e9a565b61268b565b816001600160a01b031663ac41865a61261387612c9b565b61261c87612c9b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268b9190614e9a565b95945050505050565b60006126a1826020615168565b835110156126e85782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b6126fb8282612ccf565b61081b8585612d55565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612762576127626150db565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806127b25750816003145b806127bd5750816005145b806127c85750816007145b806127d35750816008145b806127de575081600a145b806127e9575081600c145b156127f65750601f610d99565b816002146128065750601e610d99565b61280f83612d7d565b61281a57601c61281d565b601d5b60ff169392505050565b6000818152600183016020526040812054801561291057600061284b600183614eb3565b855490915060009061285f90600190614eb3565b90508181146128c457600086600001828154811061287f5761287f614e55565b90600052602060002001549050808760000184815481106128a2576128a2614e55565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806128d5576128d56151c4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d99565b6000915050610d99565b5092915050565b600081815260018301602052604081205461296857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d99565b506000610d99565b600054610100900460ff166129c95760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80516129d490612db9565b6129dc612e89565b6129e98160200151612eec565b6129f68160400151612f4e565b612a038160600151612fb0565b612a108160800151613012565b6118f18160a00151613074565b600054610100900460ff16612a765760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612a8190611478565b612a8e8160200151611a48565b612a9b8160400151611c57565b60005b816060015151811015612b0957612af782606001518281518110612ac457612ac4614e55565b60200260200101516000015183606001518381518110612ae657612ae6614e55565b602002602001015160200151611762565b80612b0181614e81565b915050612a9e565b5060005b81608001515181101561084b57612b6682608001518281518110612b3357612b33614e55565b60200260200101516000015183608001518381518110612b5557612b55614e55565b602002602001015160200151611d12565b80612b7081614e81565b915050612b0d565b60008282028315801590612b9b575082848281612b9757612b976150db565b0414155b15612bc357604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612bdf82826130d6565b612be982826130e0565b612bf38282613104565b612bfd82826131f0565b612c0782826133df565b612c118282613429565b61084b8282613516565b60606000612c2761362c565b905036811115612c4557505060408051600081526020810190915290565b8067ffffffffffffffff811115612c5e57612c5e6143ff565b6040519080825280601f01601f191660200182016040528015612c88576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612cc75781610d99565b610d99613647565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612d3957600080fd5b505af1158015612d4d573d6000803e3d6000fd5b505050505050565b612d5f82826136d3565b612d698282613775565b612d738282613797565b61084b82826139e1565b6000612d8a6004836151da565b158015612da05750612d9d6064836151da565b15155b80610d995750612db2610190836151da565b1592915050565b600054610100900460ff16612e125760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612e8081600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b919061517b565b613a0e565b6118fa81613a70565b600054610100900460ff16612ee25760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612eea613afe565b565b600054610100900460ff16612f455760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613b57565b600054610100900460ff16612fa75760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613bcc565b600054610100900460ff166130095760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613c41565b600054610100900460ff1661306b5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613cef565b600054610100900460ff166130cd5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613dcd565b61084b8282613eab565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580613143575081513a11155b9050806131885781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b602082015115610d0257600061319e483a614eb3565b602084015190915081111580612d4d5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff909316924282111561322c5760405163013ce60b60e01b815242600482015260248101839052604401610a75565b600084600281111561324057613240614c4c565b036132f9578260000361325557505050505050565b8060000361326f576132678342615168565b600d55612d4d565b600061327b8342614eb3565b905060006132898583615154565b9050600061329786836150c4565b6132a19084614eb3565b9050838111156132cd5760405163013ce60b60e01b815242600482015260248101869052604401610a75565b856132d9836001615168565b6132e391906150c4565b6132ed9086615168565b600d5550612d4d915050565b814210158015613312575061330e8183615168565b4211155b15613321576132678284613efe565b6000600185600281111561333757613337614c4c565b1461334a576133454261204a565b613353565b61335383612033565b905060006133618483613f96565b90508042101561338d5760405163013ce60b60e01b815242600482015260248101829052604401610a75565b60006133998483615168565b905042811080156133c65760405163013ce60b60e01b815242600482015260248101839052604401610a75565b6133d08388613efe565b600d5550505050505050505050565b6133e882611098565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b6000613434836119bd565b80519091506001600160a01b031661344b57505050565b6000836001600160a01b031682600001516001600160a01b0316146134875761348261347b858460000151611e47565b8490612b78565b613489565b825b90506000826020015182101580156134b15750604083015115806134b1575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b600061352183611e08565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061357057505050565b6000836001600160a01b031682600001516001600160a01b0316146135a5576135a061347b858460000151611e47565b6135a7565b825b90506000826080015142106135bd5760006135c3565b82604001515b6135cd9083615168565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b6000602436101561363d5750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce919061517b565b905090565b60006136de83611e08565b80549091506001600160a01b03166136f557505050565b80546000906001600160a01b0385811691161461372b5781546137269061347b9086906001600160a01b0316611e47565b61372d565b825b905081600401544210613756576000600283015560038201546137509042615168565b60048301555b8082600201600082825461376a9190615168565b909155505050505050565b600d54600003613783575050565b61378e600d54613fb5565b50506000600d55565b6005546000036137d3576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461380c9190614eb3565b9050600061381a3a836150c4565b90506000836040015160001480613835575083604001518211155b90508061387f578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b60006005556060840151158015906138975750600085115b15612d4d57600061396a306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613903919061517b565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613940573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613964919061517b565b88611e47565b905060006139788483611e53565b905060006139868289613fea565b905086606001518111156139d65760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613a675760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa816140b3565b600054610100900460ff16613ac95760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516118fa9190611aec565b600054610100900460ff16612eea5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613bb05760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa8160000151826020015183604001518460600151611ee0565b600054610100900460ff16613c255760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81600001518260200151836040015184606001516111bf565b600054610100900460ff16613c9a5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613ca590611830565b60005b81602001515181101561084b57613cdd82602001518281518110613cce57613cce614e55565b6020026020010151600161151e565b80613ce781614e81565b915050613ca8565b600054610100900460ff16613d485760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613d61929190611dac565b60005b82602001515181101561093157600083602001518281518110613d8957613d89614e55565b60200260200101519050600081602001519050613db88260000151826000015183602001518460400151611631565b50508080613dc590614e81565b915050613d64565b600054610100900460ff16613e265760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613e3f929190611c01565b60005b82602001515181101561093157600083602001518281518110613e6757613e67614e55565b60200260200101519050600081602001519050613e9682600001518260000151836020015184604001516118fd565b50508080613ea390614e81565b915050613e42565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612d1f565b600080600080613f0d8661414c565b919450925090506000613f208684615168565b90506000613f2f600c836151da565b90506000613f3e600c84615154565b613f489087615168565b905060006002600a5460ff166002811115613f6557613f65614c4c565b14613f705784613f7a565b613f7a82846127a1565b9050613f888a83858461416b565b9a9950505050505050505050565b6000806000613fa44261414c565b509150915061268b8583838761416b565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611882565b600081600003614026576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361403657506000610d99565b670de0b6b3a764000083810290848281614052576140526150db565b0414614094576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b8260018203816140a6576140a66150db565b0460010191505092915050565b600054610100900460ff1661410c5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000808061415e620151808504612705565b9196909550909350915050565b600061268b84848461417c89614193565b6141858a6141b1565b61418e8b6141cd565b6141da565b6000806141a362015180846151da565b9050610bdf610e1082615154565b6000806141c0610e10846151da565b9050610bdf603c82615154565b6000610d99603c836151da565b6000816141e8603c856150c4565b6141f4610e10876150c4565b620151806142038b8b8b614236565b61420d91906150c4565b6142179190615168565b6142219190615168565b61422b9190615168565b979650505050505050565b60006107b284101561424757600080fd5b838383600062253d8c60046064600c614261600e886151ee565b61426b919061520e565b6142778861132461523c565b614281919061523c565b61428b919061520e565b614296906003615264565b6142a0919061520e565b600c806142ae600e886151ee565b6142b8919061520e565b6142c390600c615264565b6142ce6002886151ee565b6142d891906151ee565b6142e49061016f615264565b6142ee919061520e565b6004600c6142fd600e896151ee565b614307919061520e565b614313896112c061523c565b61431d919061523c565b614329906105b5615264565b614333919061520e565b61433f617d4b876151ee565b614349919061523c565b614353919061523c565b61435d91906151ee565b61436791906151ee565b98975050505050505050565b803560ff8116811461438457600080fd5b919050565b6000806000806080858703121561439f57600080fd5b6143a885614373565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146118fa57600080fd5b8035614384816143c2565b6000602082840312156143f457600080fd5b8135610bdf816143c2565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614438576144386143ff565b60405290565b6040516080810167ffffffffffffffff81118282101715614438576144386143ff565b60405160c0810167ffffffffffffffff81118282101715614438576144386143ff565b6040516020810167ffffffffffffffff81118282101715614438576144386143ff565b6040516060810167ffffffffffffffff81118282101715614438576144386143ff565b604051601f8201601f1916810167ffffffffffffffff811182821017156144f3576144f36143ff565b604052919050565b600067ffffffffffffffff821115614515576145156143ff565b5060051b60200190565b600082601f83011261453057600080fd5b81356020614545614540836144fb565b6144ca565b82815260059290921b8401810191818101908684111561456457600080fd5b8286015b8481101561458857803561457b816143c2565b8352918301918301614568565b509695505050505050565b80151581146118fa57600080fd5b600080604083850312156145b457600080fd5b823567ffffffffffffffff808211156145cc57600080fd5b6145d88683870161451f565b93506020915081850135818111156145ef57600080fd5b85019050601f8101861361460257600080fd5b8035614610614540826144fb565b81815260059190911b8201830190838101908883111561462f57600080fd5b928401925b8284101561465657833561464781614593565b82529284019290840190614634565b80955050505050509250929050565b6000806000806080858703121561467b57600080fd5b8435614686816143c2565b93506020850135614696816143c2565b93969395505050506040820135916060013590565b600080604083850312156146be57600080fd5b82356146c9816143c2565b915060208301356146d9816143c2565b809150509250929050565b80356002811061438457600080fd5b60006020828403121561470557600080fd5b610bdf826146e4565b600082601f83011261471f57600080fd5b8135602061472f614540836144fb565b82815260069290921b8401810191818101908684111561474e57600080fd5b8286015b84811015614588576040818903121561476b5760008081fd5b614773614415565b813561477e816143c2565b81528185013561478d816143c2565b81860152835291830191604001614752565b600082601f8301126147b057600080fd5b813560206147c0614540836144fb565b82815260069290921b840181019181810190868411156147df57600080fd5b8286015b8481101561458857604081890312156147fc5760008081fd5b614804614415565b813561480f816143c2565b815281850135858201528352918301916040016147e3565b60006060828403121561483957600080fd5b6040516060810181811067ffffffffffffffff8211171561485c5761485c6143ff565b604052905080823561486d816143c2565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561489e57600080fd5b6148a661443e565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156148e257600080fd5b6148ea61443e565b90506148f582614373565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561492d57600080fd5b614935614415565b9050614940826146e4565b8152602082013567ffffffffffffffff81111561495c57600080fd5b6149688482850161451f565b60208301525092915050565b60006080828403121561498657600080fd5b61498e614415565b9050813561499b816143c2565b81526149aa8360208401614827565b602082015292915050565b600060808083850312156149c857600080fd5b6149d0614415565b91506149dc8484614827565b8252606083013567ffffffffffffffff8111156149f857600080fd5b8301601f81018513614a0957600080fd5b80356020614a19614540836144fb565b82815260079290921b83018101918181019088841115614a3857600080fd5b938201935b83851015614a5e57614a4f8986614974565b82529385019390820190614a3d565b808388015250505050505092915050565b60006101c08284031215614a8257600080fd5b614a8a614461565b9050614a968383614827565b8152614aa5836060840161488c565b6020820152614ab78360e084016148d0565b604082015261016082013567ffffffffffffffff80821115614ad857600080fd5b614ae48583860161491b565b6060840152610180840135915080821115614afe57600080fd5b614b0a858386016149b5565b60808401526101a0840135915080821115614b2457600080fd5b50614b31848285016149b5565b60a08301525092915050565b600060208284031215614b4f57600080fd5b813567ffffffffffffffff80821115614b6757600080fd5b9083019060208286031215614b7b57600080fd5b614b83614484565b823582811115614b9257600080fd5b929092019160c08387031215614ba757600080fd5b614baf614461565b614bb8846143d7565b8152614bc6602085016143d7565b602082015260408401356040820152606084013583811115614be757600080fd5b614bf38882870161470e565b606083015250608084013583811115614c0b57600080fd5b614c178882870161479f565b60808301525060a084013583811115614c2f57600080fd5b614c3b88828701614a6f565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614c8457634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614c9d57600080fd5b50508035926020909101359150565b600080600060608486031215614cc157600080fd5b8335614ccc816143c2565b95602085013595506040909401359392505050565b600060208284031215614cf357600080fd5b5035919050565b60008060408385031215614d0d57600080fd5b8235614d18816143c2565b946020939093013593505050565b60008060008060808587031215614d3c57600080fd5b8435614d47816143c2565b93506020858101359350604080870135935060608088013567ffffffffffffffff811115614d7457600080fd5b8801601f81018a13614d8557600080fd5b8035614d93614540826144fb565b8181529083028201850190858101908c831115614daf57600080fd5b928601925b82841015614e125784848e031215614dcc5760008081fd5b614dd46144a7565b8435614ddf816143c2565b815284880135614dee816143c2565b8189015284870135614dff81614593565b8188015282529284019290860190614db4565b999c989b5096995050505050505050565b60008060008060808587031215614e3957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e9357614e93614e6b565b5060010190565b600060208284031215614eac57600080fd5b5051919050565b81810381811115610d9957610d99614e6b565b600060a082016001600160a01b038089168452602081891681860152604088818701526060888188015260a0608088015284885180875260c089019150848a01965060005b81811015614f3e578751805188168452868101518816878501528501511515858401529685019691830191600101614f0b565b50909d9c50505050505050505050505050565b60005b83811015614f6c578181015183820152602001614f54565b50506000910152565b60008151808452614f8d816020860160208601614f51565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611ebe6040830184614f75565b600060208284031215614fd557600080fd5b815167ffffffffffffffff80821115614fed57600080fd5b818401915084601f83011261500157600080fd5b815181811115615013576150136143ff565b615026601f8201601f19166020016144ca565b915080825285602082850101111561503d57600080fd5b61504e816020840160208601614f51565b50949350505050565b600081518084526020808501945080840160005b838110156150875781518752958201959082019060010161506b565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061268b6060830184615057565b8082028115828204841417610d9957610d99614e6b565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261512d6080830184615057565b9695505050505050565b60006020828403121561514957600080fd5b8151610bdf81614593565b600082615163576151636150db565b500490565b80820180821115610d9957610d99614e6b565b60006020828403121561518d57600080fd5b8151610bdf816143c2565b60006001600160a01b0380861683528085166020840152506060604083015261268b6060830184614f75565b634e487b7160e01b600052603160045260246000fd5b6000826151e9576151e96150db565b500690565b818103600083128015838313168383128216171561291a5761291a614e6b565b60008261521d5761521d6150db565b600160ff1b82146000198414161561523757615237614e6b565b500590565b808201828112600083128015821682158216171561525c5761525c614e6b565b505092915050565b80820260008212600160ff1b8414161561528057615280614e6b565b8181058314821517610d9957610d99614e6b56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220db437fd3833fc41dc99b62940ae5838b634c3c3fb24628a0c3a88ef9362c5b7464736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80637125590a11610186578063b187bd26116100e3578063d3feb60211610097578063e427298711610071578063e4272987146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d3feb60214610777578063d45a76cf1461078a578063d86483e11461079d57600080fd5b8063c267621e116100c8578063c267621e1461073a578063c47590e41461074b578063d09edf311461075e57600080fd5b8063b187bd2614610714578063b96e422c1461073157600080fd5b80639eebe7cd1161013a578063a2c456441161011f578063a2c4564414610674578063a337417714610687578063a5900c4d146106ba57600080fd5b80639eebe7cd14610642578063a0c3774f1461066157600080fd5b80638456cb591161016b5780638456cb59146106145780638a5215861461061c57806390333ba81461062f57600080fd5b80637125590a146105ee57806383f3084f1461060157600080fd5b8063423a4b401161023f57806351a424b1116101f357806363560086116101cd578063635600861461056657806363e133bc146105795780636aacaad8146105a257600080fd5b806351a424b1146104e75780635670e2ce1461051f5780635ea54eee1461053a57600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f1366004614389565b6107e9565b005b6102f66103063660046143e2565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a3660046145a1565b610886565b6103c161035d3660046143e2565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f6610401366004614665565b610936565b6102f66104143660046146ab565b610965565b6102f66104273660046146f3565b610990565b6102f661043a366004614b3d565b6109cd565b6102f6610af3565b6102f6610455366004614665565b610b7a565b600f546104679060ff1681565b6040516103339190614c62565b6104876104823660046143e2565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f705cf274ecf345b36038d7169e27741a6610b4e904781886c7a003a031a8e09c81565b604051908152602001610333565b600154610487906001600160a01b031681565b6104fa6104f53660046143e2565b610be6565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f66105743660046143e2565b610c0f565b6104876105873660046143e2565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f66105fc366004614c8a565b610c38565b601c54610487906001600160a01b031681565b6102f6610c63565b601d54610487906001600160a01b031681565b6102f661063d366004614cac565b610cd5565b6104c66106503660046143e2565b602080526000908152604090205481565b6104c661066f3660046143e2565b610d08565b6102f6610682366004614ce1565b610d9f565b6104fa604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6104fa6106c83660046143e2565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107219060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f6610759366004614cfa565b610dc8565b600054610487906201000090046001600160a01b031681565b6102f6610785366004614cac565b610df3565b6103c16107983660046143e2565b610e20565b6104c66107ab3660046143e2565b610e8f565b6102f66107be366004614d26565b610ebd565b6102f66107d1366004614e23565b611069565b6107216107e43660046143e2565b611098565b6107f88460ff168484846110cd565b61080f336000356001600160e01b03191683611178565b61081b858585856111bf565b5050505050565b61082b81611464565b610842336000356001600160e01b03191683611178565b61084b82611478565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614c4c565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b031916611502565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8614e55565b602002602001015183838151811061091257610912614e55565b602002602001015161151e565b8061092981614e81565b9150506108da565b505050565b610942848484846115c8565b610959336000356001600160e01b03191683611178565b61081b85858585611631565b61096f82826116ea565b610986336000356001600160e01b03191683611178565b6109318383611762565b6109ad8160018111156109a5576109a5614c4c565b60ff166117e9565b6109c4336000356001600160e01b03191683611178565b61084b82611830565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa8261188d565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b031916611502565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b86848484846115c8565b610b9d336000356001600160e01b03191683611178565b61081b858585856118fd565b6001600160a01b038082166000908152601f60205260408120549091168015610bd25780610bdf565b601d546001600160a01b03165b9392505050565b600080600080610bf5856119bd565b805160208201516040909201519097919650945092505050565b610c1881611464565b610c2f336000356001600160e01b03191683611178565b61084b82611a48565b610c428282611a92565b610c59336000356001600160e01b03191683611178565b6109318383611aec565b610c79336000356001600160e01b031916611502565b60045460ff1615610c9d5760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610ce0838383611b6f565b610cf7336000356001600160e01b03191683611178565b610d02848484611c01565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d999190614e9a565b92915050565b610da8816117e9565b610dbf336000356001600160e01b03191683611178565b61084b82611c57565b610dd28282611cb5565b610de9336000356001600160e01b03191683611178565b6109318383611d12565b610dfe838383611b6f565b610e15336000356001600160e01b03191683611178565b610d02848484611dac565b600080600080600080610e3287611e08565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b03811660009081526020805260408120548015610eb35780610bdf565b601e549392505050565b610ec8848484611b6f565b610edf336000356001600160e01b03191683611178565b83600003610ef357610ef085610d08565b93505b610efe858585611e3c565b6000610f0986610ba9565b90506000610f178783611e47565b90506000610f40610f3087670de0b6b3a7640000614eb3565b610f3a8985611e53565b90611e53565b9050600063569158fa60e01b89858a858a604051602401610f65959493929190614ec6565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610fff9216908690600401614fa1565b6000604051808303816000875af115801561101e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110469190810190614fc3565b905061105d8a8a8a8861105886611ec6565b611ed3565b50505050505050505050565b611075848484846110cd565b61108c336000356001600160e01b03191683611178565b61081b85858585611ee0565b6000806110a6601084611f7b565b90506001600f5460ff1660018111156110c1576110c1614c4c565b14610d99578015610bdf565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061110457611104614e55565b602002602001018181525050838160018151811061112457611124614e55565b602002602001018181525050828160028151811061114457611144614e55565b602002602001018181525050818160038151811061116457611164614e55565b602002602001018181525050949350505050565b611183838383611f9d565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a7593929190615092565b60ff84166112705760008111806111d65750600082115b1561126b57826000036112085760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061121457508281115b1561123e57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361126b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6113cd565b8260000361129d5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b8015806112b557506112b26224ea00846150c4565b81115b156112df57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361130c57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff85160161134e57601c61132383612033565b111561126b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff851601611396576113638261204a565b61136c83612033565b1461126b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff1660028111156113e2576113e2614c4c565b600a805460ff191660018360028111156113fe576113fe614c4c565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610d99826001600160a01b03166117e9565b6001600160a01b0381166114b8576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b9083908390611178565b6001600160a01b03821661155e576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806115735761156e60108361206d565b61157e565b61157e601083612082565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516115bc911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061160857611608614e55565b602002602001018181525050836001600160a01b03168160018151811061112457611124614e55565b6001600160a01b038416611671576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061169590848484612097565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061172757611727614e55565b602002602001018181525050816001600160a01b03168160018151811061175057611750614e55565b60200260200101818152505092915050565b6001600160a01b03821661178957604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016115bc565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061181f5761181f614e55565b602002602001018181525050919050565b600f805482919060ff19166001838181111561184e5761184e614c4c565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516118829190614c62565b60405180910390a150565b600054610100900460ff166118e65760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80516118f190612167565b6118fa816121d6565b50565b6001600160a01b03841661193d576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119619084848461222f565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e144884846040516119af929190918252602082015260400190565b60405180910390a350505050565b6119ea604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611a135780611a16565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611ac957611ac9614e55565b6020026020010181815250508160001c8160018151811061175057611750614e55565b8082148015611afa57508115155b15611b34576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611bae57611bae614e55565b6020026020010181815250508281600181518110611bce57611bce614e55565b6020026020010181815250508181600281518110611bee57611bee614e55565b6020026020010181815250509392505050565b611c0e601684848461222f565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611c805760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611882565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611cf257611cf2614e55565b602002602001018181525050818160018151811061175057611750614e55565b6001600160a01b038216611d3957604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611d625760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016115bc565b611db96012848484612097565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611e335780610bdf565b60169392505050565b61093183838361238e565b6000610bdf8383612495565b60008282028315801590611e76575082848281611e7257611e726150db565b0414155b15611e9e57604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611ebb57670de0b6b3a7640000600019820104600101611ebe565b60005b949350505050565b6000610d99826000612694565b61081b85858585856126f1565b670de0b6b3a7640000811115611f22576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611456565b6001600160a01b03811660009081526001830160205260408120541515610bdf565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611ff29087903090889088906004016150f1565b602060405180830381865afa15801561200f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190615137565b6000611ebe6120456201518084615154565b612705565b6000808061205e6120456201518086615154565b5091509150611ebe82826127a1565b6000610bdf836001600160a01b038416612827565b6000610bdf836001600160a01b038416612921565b60006001600160a01b0384161580156120ae575082155b80156120b8575081155b905060006001600160a01b038516158015906120dc57508215806120dc5750838310155b9050811580156120ea575080155b1561213a576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166121c05760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6121cd8160a00151612970565b6118fa81612a1d565b600054610100900460ff166118fa5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b038416158015612246575082155b8015612250575081155b905060006001600160a01b0385161580159061226c5750600084115b80156122785750600083115b905081158015612286575080155b156122d6576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156122fd576000600287018190556004870155612369565b8560040154600003612324576000600287015561231a8342615168565b6004870155612369565b85546001600160a01b03868116911614612369578554600090612350906001600160a01b031687611e47565b60028801549091506123629082612b78565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6123988383612bd5565b6001600160a01b0383166123bf57604051636070789160e11b815260040160405180910390fd5b816000036123f9576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061240484610ba9565b6001600160a01b031603612444576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061244f84610e8f565b905080821115610d02576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250f919061517b565b90506001600160a01b038116612560576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b600061256a612c1b565b905080516000146125fb57816001600160a01b031663355efdd961258d87612c9b565b61259687612c9b565b846040518463ffffffff1660e01b81526004016125b593929190615198565b602060405180830381865afa1580156125d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f69190614e9a565b61268b565b816001600160a01b031663ac41865a61261387612c9b565b61261c87612c9b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268b9190614e9a565b95945050505050565b60006126a1826020615168565b835110156126e85782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b6126fb8282612ccf565b61081b8585612d55565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612762576127626150db565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806127b25750816003145b806127bd5750816005145b806127c85750816007145b806127d35750816008145b806127de575081600a145b806127e9575081600c145b156127f65750601f610d99565b816002146128065750601e610d99565b61280f83612d7d565b61281a57601c61281d565b601d5b60ff169392505050565b6000818152600183016020526040812054801561291057600061284b600183614eb3565b855490915060009061285f90600190614eb3565b90508181146128c457600086600001828154811061287f5761287f614e55565b90600052602060002001549050808760000184815481106128a2576128a2614e55565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806128d5576128d56151c4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d99565b6000915050610d99565b5092915050565b600081815260018301602052604081205461296857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d99565b506000610d99565b600054610100900460ff166129c95760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80516129d490612db9565b6129dc612e89565b6129e98160200151612eec565b6129f68160400151612f4e565b612a038160600151612fb0565b612a108160800151613012565b6118f18160a00151613074565b600054610100900460ff16612a765760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612a8190611478565b612a8e8160200151611a48565b612a9b8160400151611c57565b60005b816060015151811015612b0957612af782606001518281518110612ac457612ac4614e55565b60200260200101516000015183606001518381518110612ae657612ae6614e55565b602002602001015160200151611762565b80612b0181614e81565b915050612a9e565b5060005b81608001515181101561084b57612b6682608001518281518110612b3357612b33614e55565b60200260200101516000015183608001518381518110612b5557612b55614e55565b602002602001015160200151611d12565b80612b7081614e81565b915050612b0d565b60008282028315801590612b9b575082848281612b9757612b976150db565b0414155b15612bc357604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612bdf82826130d6565b612be982826130e0565b612bf38282613104565b612bfd82826131f0565b612c0782826133df565b612c118282613429565b61084b8282613516565b60606000612c2761362c565b905036811115612c4557505060408051600081526020810190915290565b8067ffffffffffffffff811115612c5e57612c5e6143ff565b6040519080825280601f01601f191660200182016040528015612c88576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612cc75781610d99565b610d99613647565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612d3957600080fd5b505af1158015612d4d573d6000803e3d6000fd5b505050505050565b612d5f82826136d3565b612d698282613775565b612d738282613797565b61084b82826139e1565b6000612d8a6004836151da565b158015612da05750612d9d6064836151da565b15155b80610d995750612db2610190836151da565b1592915050565b600054610100900460ff16612e125760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612e8081600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b919061517b565b613a0e565b6118fa81613a70565b600054610100900460ff16612ee25760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b612eea613afe565b565b600054610100900460ff16612f455760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613b57565b600054610100900460ff16612fa75760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613bcc565b600054610100900460ff166130095760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613c41565b600054610100900460ff1661306b5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613cef565b600054610100900460ff166130cd5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81613dcd565b61084b8282613eab565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580613143575081513a11155b9050806131885781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b602082015115610d0257600061319e483a614eb3565b602084015190915081111580612d4d5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff909316924282111561322c5760405163013ce60b60e01b815242600482015260248101839052604401610a75565b600084600281111561324057613240614c4c565b036132f9578260000361325557505050505050565b8060000361326f576132678342615168565b600d55612d4d565b600061327b8342614eb3565b905060006132898583615154565b9050600061329786836150c4565b6132a19084614eb3565b9050838111156132cd5760405163013ce60b60e01b815242600482015260248101869052604401610a75565b856132d9836001615168565b6132e391906150c4565b6132ed9086615168565b600d5550612d4d915050565b814210158015613312575061330e8183615168565b4211155b15613321576132678284613efe565b6000600185600281111561333757613337614c4c565b1461334a576133454261204a565b613353565b61335383612033565b905060006133618483613f96565b90508042101561338d5760405163013ce60b60e01b815242600482015260248101829052604401610a75565b60006133998483615168565b905042811080156133c65760405163013ce60b60e01b815242600482015260248101839052604401610a75565b6133d08388613efe565b600d5550505050505050505050565b6133e882611098565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b6000613434836119bd565b80519091506001600160a01b031661344b57505050565b6000836001600160a01b031682600001516001600160a01b0316146134875761348261347b858460000151611e47565b8490612b78565b613489565b825b90506000826020015182101580156134b15750604083015115806134b1575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b600061352183611e08565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061357057505050565b6000836001600160a01b031682600001516001600160a01b0316146135a5576135a061347b858460000151611e47565b6135a7565b825b90506000826080015142106135bd5760006135c3565b82604001515b6135cd9083615168565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b6000602436101561363d5750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce919061517b565b905090565b60006136de83611e08565b80549091506001600160a01b03166136f557505050565b80546000906001600160a01b0385811691161461372b5781546137269061347b9086906001600160a01b0316611e47565b61372d565b825b905081600401544210613756576000600283015560038201546137509042615168565b60048301555b8082600201600082825461376a9190615168565b909155505050505050565b600d54600003613783575050565b61378e600d54613fb5565b50506000600d55565b6005546000036137d3576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a60055461380c9190614eb3565b9050600061381a3a836150c4565b90506000836040015160001480613835575083604001518211155b90508061387f578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b60006005556060840151158015906138975750600085115b15612d4d57600061396a306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613903919061517b565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613940573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613964919061517b565b88611e47565b905060006139788483611e53565b905060006139868289613fea565b905086606001518111156139d65760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613a675760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa816140b3565b600054610100900460ff16613ac95760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b03909216919091179055602081015160408201516118fa9190611aec565b600054610100900460ff16612eea5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613bb05760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa8160000151826020015183604001518460600151611ee0565b600054610100900460ff16613c255760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6118fa81600001518260200151836040015184606001516111bf565b600054610100900460ff16613c9a5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613ca590611830565b60005b81602001515181101561084b57613cdd82602001518281518110613cce57613cce614e55565b6020026020010151600161151e565b80613ce781614e81565b915050613ca8565b600054610100900460ff16613d485760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613d61929190611dac565b60005b82602001515181101561093157600083602001518281518110613d8957613d89614e55565b60200260200101519050600081602001519050613db88260000151826000015183602001518460400151611631565b50508080613dc590614e81565b915050613d64565b600054610100900460ff16613e265760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051805160208201516040830151613e3f929190611c01565b60005b82602001515181101561093157600083602001518281518110613e6757613e67614e55565b60200260200101519050600081602001519050613e9682600001518260000151836020015184604001516118fd565b50508080613ea390614e81565b915050613e42565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612d1f565b600080600080613f0d8661414c565b919450925090506000613f208684615168565b90506000613f2f600c836151da565b90506000613f3e600c84615154565b613f489087615168565b905060006002600a5460ff166002811115613f6557613f65614c4c565b14613f705784613f7a565b613f7a82846127a1565b9050613f888a83858461416b565b9a9950505050505050505050565b6000806000613fa44261414c565b509150915061268b8583838761416b565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611882565b600081600003614026576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361403657506000610d99565b670de0b6b3a764000083810290848281614052576140526150db565b0414614094576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b8260018203816140a6576140a66150db565b0460010191505092915050565b600054610100900460ff1661410c5760405162461bcd60e51b815260206004820152602b602482015260008051602061529583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000808061415e620151808504612705565b9196909550909350915050565b600061268b84848461417c89614193565b6141858a6141b1565b61418e8b6141cd565b6141da565b6000806141a362015180846151da565b9050610bdf610e1082615154565b6000806141c0610e10846151da565b9050610bdf603c82615154565b6000610d99603c836151da565b6000816141e8603c856150c4565b6141f4610e10876150c4565b620151806142038b8b8b614236565b61420d91906150c4565b6142179190615168565b6142219190615168565b61422b9190615168565b979650505050505050565b60006107b284101561424757600080fd5b838383600062253d8c60046064600c614261600e886151ee565b61426b919061520e565b6142778861132461523c565b614281919061523c565b61428b919061520e565b614296906003615264565b6142a0919061520e565b600c806142ae600e886151ee565b6142b8919061520e565b6142c390600c615264565b6142ce6002886151ee565b6142d891906151ee565b6142e49061016f615264565b6142ee919061520e565b6004600c6142fd600e896151ee565b614307919061520e565b614313896112c061523c565b61431d919061523c565b614329906105b5615264565b614333919061520e565b61433f617d4b876151ee565b614349919061523c565b614353919061523c565b61435d91906151ee565b61436791906151ee565b98975050505050505050565b803560ff8116811461438457600080fd5b919050565b6000806000806080858703121561439f57600080fd5b6143a885614373565b966020860135965060408601359560600135945092505050565b6001600160a01b03811681146118fa57600080fd5b8035614384816143c2565b6000602082840312156143f457600080fd5b8135610bdf816143c2565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614438576144386143ff565b60405290565b6040516080810167ffffffffffffffff81118282101715614438576144386143ff565b60405160c0810167ffffffffffffffff81118282101715614438576144386143ff565b6040516020810167ffffffffffffffff81118282101715614438576144386143ff565b6040516060810167ffffffffffffffff81118282101715614438576144386143ff565b604051601f8201601f1916810167ffffffffffffffff811182821017156144f3576144f36143ff565b604052919050565b600067ffffffffffffffff821115614515576145156143ff565b5060051b60200190565b600082601f83011261453057600080fd5b81356020614545614540836144fb565b6144ca565b82815260059290921b8401810191818101908684111561456457600080fd5b8286015b8481101561458857803561457b816143c2565b8352918301918301614568565b509695505050505050565b80151581146118fa57600080fd5b600080604083850312156145b457600080fd5b823567ffffffffffffffff808211156145cc57600080fd5b6145d88683870161451f565b93506020915081850135818111156145ef57600080fd5b85019050601f8101861361460257600080fd5b8035614610614540826144fb565b81815260059190911b8201830190838101908883111561462f57600080fd5b928401925b8284101561465657833561464781614593565b82529284019290840190614634565b80955050505050509250929050565b6000806000806080858703121561467b57600080fd5b8435614686816143c2565b93506020850135614696816143c2565b93969395505050506040820135916060013590565b600080604083850312156146be57600080fd5b82356146c9816143c2565b915060208301356146d9816143c2565b809150509250929050565b80356002811061438457600080fd5b60006020828403121561470557600080fd5b610bdf826146e4565b600082601f83011261471f57600080fd5b8135602061472f614540836144fb565b82815260069290921b8401810191818101908684111561474e57600080fd5b8286015b84811015614588576040818903121561476b5760008081fd5b614773614415565b813561477e816143c2565b81528185013561478d816143c2565b81860152835291830191604001614752565b600082601f8301126147b057600080fd5b813560206147c0614540836144fb565b82815260069290921b840181019181810190868411156147df57600080fd5b8286015b8481101561458857604081890312156147fc5760008081fd5b614804614415565b813561480f816143c2565b815281850135858201528352918301916040016147e3565b60006060828403121561483957600080fd5b6040516060810181811067ffffffffffffffff8211171561485c5761485c6143ff565b604052905080823561486d816143c2565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561489e57600080fd5b6148a661443e565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156148e257600080fd5b6148ea61443e565b90506148f582614373565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561492d57600080fd5b614935614415565b9050614940826146e4565b8152602082013567ffffffffffffffff81111561495c57600080fd5b6149688482850161451f565b60208301525092915050565b60006080828403121561498657600080fd5b61498e614415565b9050813561499b816143c2565b81526149aa8360208401614827565b602082015292915050565b600060808083850312156149c857600080fd5b6149d0614415565b91506149dc8484614827565b8252606083013567ffffffffffffffff8111156149f857600080fd5b8301601f81018513614a0957600080fd5b80356020614a19614540836144fb565b82815260079290921b83018101918181019088841115614a3857600080fd5b938201935b83851015614a5e57614a4f8986614974565b82529385019390820190614a3d565b808388015250505050505092915050565b60006101c08284031215614a8257600080fd5b614a8a614461565b9050614a968383614827565b8152614aa5836060840161488c565b6020820152614ab78360e084016148d0565b604082015261016082013567ffffffffffffffff80821115614ad857600080fd5b614ae48583860161491b565b6060840152610180840135915080821115614afe57600080fd5b614b0a858386016149b5565b60808401526101a0840135915080821115614b2457600080fd5b50614b31848285016149b5565b60a08301525092915050565b600060208284031215614b4f57600080fd5b813567ffffffffffffffff80821115614b6757600080fd5b9083019060208286031215614b7b57600080fd5b614b83614484565b823582811115614b9257600080fd5b929092019160c08387031215614ba757600080fd5b614baf614461565b614bb8846143d7565b8152614bc6602085016143d7565b602082015260408401356040820152606084013583811115614be757600080fd5b614bf38882870161470e565b606083015250608084013583811115614c0b57600080fd5b614c178882870161479f565b60808301525060a084013583811115614c2f57600080fd5b614c3b88828701614a6f565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614c8457634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614c9d57600080fd5b50508035926020909101359150565b600080600060608486031215614cc157600080fd5b8335614ccc816143c2565b95602085013595506040909401359392505050565b600060208284031215614cf357600080fd5b5035919050565b60008060408385031215614d0d57600080fd5b8235614d18816143c2565b946020939093013593505050565b60008060008060808587031215614d3c57600080fd5b8435614d47816143c2565b93506020858101359350604080870135935060608088013567ffffffffffffffff811115614d7457600080fd5b8801601f81018a13614d8557600080fd5b8035614d93614540826144fb565b8181529083028201850190858101908c831115614daf57600080fd5b928601925b82841015614e125784848e031215614dcc5760008081fd5b614dd46144a7565b8435614ddf816143c2565b815284880135614dee816143c2565b8189015284870135614dff81614593565b8188015282529284019290860190614db4565b999c989b5096995050505050505050565b60008060008060808587031215614e3957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e9357614e93614e6b565b5060010190565b600060208284031215614eac57600080fd5b5051919050565b81810381811115610d9957610d99614e6b565b600060a082016001600160a01b038089168452602081891681860152604088818701526060888188015260a0608088015284885180875260c089019150848a01965060005b81811015614f3e578751805188168452868101518816878501528501511515858401529685019691830191600101614f0b565b50909d9c50505050505050505050505050565b60005b83811015614f6c578181015183820152602001614f54565b50506000910152565b60008151808452614f8d816020860160208601614f51565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611ebe6040830184614f75565b600060208284031215614fd557600080fd5b815167ffffffffffffffff80821115614fed57600080fd5b818401915084601f83011261500157600080fd5b815181811115615013576150136143ff565b615026601f8201601f19166020016144ca565b915080825285602082850101111561503d57600080fd5b61504e816020840160208601614f51565b50949350505050565b600081518084526020808501945080840160005b838110156150875781518752958201959082019060010161506b565b509495945050505050565b6001600160a01b03841681526001600160e01b03198316602082015260606040820152600061268b6060830184615057565b8082028115828204841417610d9957610d99614e6b565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b0319841660408301526080606083015261512d6080830184615057565b9695505050505050565b60006020828403121561514957600080fd5b8151610bdf81614593565b600082615163576151636150db565b500490565b80820180821115610d9957610d99614e6b565b60006020828403121561518d57600080fd5b8151610bdf816143c2565b60006001600160a01b0380861683528085166020840152506060604083015261268b6060830184614f75565b634e487b7160e01b600052603160045260246000fd5b6000826151e9576151e96150db565b500690565b818103600083128015838313168383128216171561291a5761291a614e6b565b60008261521d5761521d6150db565b600160ff1b82146000198414161561523757615237614e6b565b500590565b808201828112600083128015821682158216171561525c5761525c614e6b565b505092915050565b80820260008212600160ff1b8414161561528057615280614e6b565b8181058314821517610d9957610d99614e6b56fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220db437fd3833fc41dc99b62940ae5838b634c3c3fb24628a0c3a88ef9362c5b7464736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
