{
  "_format": "hh-sol-artifact-1",
  "contractName": "GenericSwapper",
  "sourceName": "contracts/swap/GenericSwapper.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": "TaskSwapTargetNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSwapTargetZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTargetSetInputLengthMismatch",
      "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": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "allowed",
          "type": "bool"
        }
      ],
      "name": "SwapTargetSet",
      "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"
        },
        {
          "internalType": "address",
          "name": "targetCall",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "targetApproval",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "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": [
            {
              "internalType": "address[]",
              "name": "allowedTargets",
              "type": "address[]"
            },
            {
              "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 GenericSwapper.GenericSwapConfig",
          "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": "",
          "type": "address"
        }
      ],
      "name": "isTargetAllowed",
      "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": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "allowances",
          "type": "bool[]"
        }
      ],
      "name": "setSwapTargets",
      "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61559880620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80637125590a11610191578063b187bd26116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107fc578063e6b5be981461080f578063f9eaee0d1461082257600080fd5b8063d09edf31146107bd578063d3feb602146107d6578063d45a76cf146107e957600080fd5b8063b96e422c116100c8578063b96e422c14610790578063c267621e14610799578063c47590e4146107aa57600080fd5b8063b187bd2614610770578063b61df01c1461077d57600080fd5b806390333ba811610145578063a2c456441161011f578063a2c45644146106d0578063a3374177146106e3578063a5900c4d1461071657600080fd5b806390333ba81461068b5780639eebe7cd1461069e578063a0c3774f146106bd57600080fd5b806383f3084f1161017657806383f3084f1461065d5780638456cb59146106705780638a5215861461067857600080fd5b80637125590a1461063757806378a106e41461064a57600080fd5b8063445780991161024a5780635670e2ce116101fe57806363560086116101d857806363560086146105af57806363e133bc146105c25780636aacaad8146105eb57600080fd5b80635670e2ce1461055557806357d6924c146105705780635ea54eee1461058357600080fd5b80634fd49efd1161022f5780634fd49efd146104d757806351a424b1146104ea5780635309fa471461052257600080fd5b806344578099146104775780634a45a3a8146104a257600080fd5b80632384c32d116102ac5780633f4ba83a116102865780633f4ba83a14610442578063423a4b401461044a57806342d4693e1461045d57600080fd5b80632384c32d146104095780632be5f0c71461041c57806330eae5721461042f57600080fd5b8063119a5e96116102dd578063119a5e96146103215780632197238414610352578063221a8c681461036557600080fd5b80630fe105e8146102f957806310188aef1461030e575b600080fd5b61030c61030736600461461c565b610835565b005b61030c61031c366004614675565b61086e565b61032961089b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61030c6103603660046147ee565b6108d2565b6103d7610373366004614675565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610349565b61030c6104173660046148b2565b610982565b61030c61042a3660046148f8565b6109b1565b61030c61043d366004614940565b6109dc565b61030c610a19565b61030c6104583660046148b2565b610aa0565b600f5461046a9060ff1681565b6040516103499190614971565b61048a610485366004614675565b610acf565b6040516001600160a01b039091168152602001610349565b6104c97f3cb047a460ffb7ae4344920a005af1897ead8e3e33a4792bd0cfa530ffecfc1681565b604051908152602001610349565b60015461048a906001600160a01b031681565b6104fd6104f8366004614675565b610b0c565b604080516001600160a01b039094168452602084019290925290820152606001610349565b610545610530366004614675565b60216020526000908152604090205460ff1681565b6040519015158152602001610349565b60025460035460408051928352602083019190915201610349565b61030c61057e3660046147ee565b610b35565b600654600754600854600954604080519485526020850193909352918301526060820152608001610349565b61030c6105bd366004614675565b610be0565b61048a6105d0366004614675565b601f602052600090815260409020546001600160a01b031681565b6103d76040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61030c610645366004614999565b610c09565b61030c610658366004614e93565b610c34565b601c5461048a906001600160a01b031681565b61030c610d5a565b601d5461048a906001600160a01b031681565b61030c610699366004614fc6565b610dcc565b6104c96106ac366004614675565b602080526000908152604090205481565b6104c96106cb366004614675565b610dff565b61030c6106de366004614ffb565b610e96565b6104fd604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6104fd610724366004614675565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546105459060ff1681565b61030c61078b36600461503c565b610ebf565b6104c9601e5481565b6001546001600160a01b031661048a565b61030c6107b8366004615101565b611072565b60005461048a906201000090046001600160a01b031681565b61030c6107e4366004614fc6565b61109d565b6103d76107f7366004614675565b6110ca565b6104c961080a366004614675565b611139565b61030c61081d36600461512d565b611167565b610545610830366004614675565b611196565b6108448460ff168484846111cb565b61085b336000356001600160e01b03191683611276565b610867858585856112bd565b5050505050565b61087781611562565b61088e336000356001600160e01b03191683611276565b61089782611576565b5050565b600a5460009081908190819060ff1660028111156108bb576108bb61495b565b600b54600c54600e54935093509350935090919293565b6108e8336000356001600160e01b031916611600565b8051825114610923576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561097d5761096b8382815181106109445761094461515f565b602002602001015183838151811061095e5761095e61515f565b602002602001015161161c565b806109758161518b565b915050610926565b505050565b61098e848484846116c6565b6109a5336000356001600160e01b03191683611276565b6108678585858561172f565b6109bb82826117e8565b6109d2336000356001600160e01b03191683611276565b61097d8383611860565b6109f98160018111156109f1576109f161495b565b60ff166118e7565b610a10336000356001600160e01b03191683611276565b6108978261192e565b610a2f336000356001600160e01b031916611600565b60045460ff16610a6b576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610aac848484846116c6565b610ac3336000356001600160e01b03191683611276565b6108678585858561198b565b6001600160a01b038082166000908152601f60205260408120549091168015610af85780610b05565b601d546001600160a01b03165b9392505050565b600080600080610b1b85611a4b565b805160208201516040909201519097919650945092505050565b610b4b336000356001600160e01b031916611600565b8051825114610b86576040517f25d27da300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561097d57610bce838281518110610ba757610ba761515f565b6020026020010151838381518110610bc157610bc161515f565b6020026020010151611ad6565b80610bd88161518b565b915050610b89565b610be981611562565b610c00336000356001600160e01b03191683611276565b61089782611b6e565b610c138282611bb8565b610c2a336000356001600160e01b03191683611276565b61097d8383611c12565b600054610100900460ff1615808015610c545750600054600160ff909116105b80610c6e5750303b158015610c6e575060005460ff166001145b610ce55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610d08576000805461ff0019166101001790555b610d1182611c95565b8015610897576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610d70336000356001600160e01b031916611600565b60045460ff1615610d945760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610dd7838383611d07565b610dee336000356001600160e01b03191683611276565b610df9848484611d99565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9091906151a4565b92915050565b610e9f816118e7565b610eb6336000356001600160e01b03191683611276565b61089782611def565b610eca868686611d07565b610ee1336000356001600160e01b03191683611276565b85600003610ef557610ef287610dff565b95505b610f0187878787611e4d565b6000610f0c88610acf565b90506000610f1a8983611eaa565b90506000610f43610f3389670de0b6b3a76400006151bd565b610f3d8b85611eb6565b90611eb6565b9050600063512904a460e01b8b858c858c8c8c604051602401610f6c9796959493929190615220565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd926110069216908690600401615275565b6000604051808303816000875af1158015611025573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104d9190810190615297565b90506110648c8c8c8861105f86611f29565b611f36565b505050505050505050505050565b61107c8282611f43565b611093336000356001600160e01b03191683611276565b61097d8383611fa0565b6110a8838383611d07565b6110bf336000356001600160e01b03191683611276565b610df984848461203a565b6000806000806000806110dc87612096565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561115d5780610b05565b601e549392505050565b611173848484846111cb565b61118a336000356001600160e01b03191683611276565b610867858585856120ca565b6000806111a4601084612165565b90506001600f5460ff1660018111156111bf576111bf61495b565b14610e90578015610b05565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106112025761120261515f565b60200260200101818152505083816001815181106112225761122261515f565b60200260200101818152505082816002815181106112425761124261515f565b60200260200101818152505081816003815181106112625761126261515f565b602002602001018181525050949350505050565b611281838383612187565b61097d578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610cdc93929190615340565b60ff841661136e5760008111806112d45750600082115b1561136957826000036113065760405163bea499cb60e01b815260ff8516600482015260248101849052604401610cdc565b80158061131257508281115b1561133c57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610cdc565b8160000361136957604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b6114cb565b8260000361139b5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610cdc565b8015806113b357506113b06224ea0084615372565b81115b156113dd57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610cdc565b8160000361140a57604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b60001960ff85160161144c57601c6114218361221d565b111561136957604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b60011960ff8516016114945761146182612234565b61146a8361221d565b1461136957604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610cdc565b8360ff1660028111156114e0576114e061495b565b600a805460ff191660018360028111156114fc576114fc61495b565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610e90826001600160a01b03166118e7565b6001600160a01b0381166115b6576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526108979083908390611276565b6001600160a01b03821661165c576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116715761166c601083612257565b61167c565b61167c60108361226c565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116ba911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106117065761170661515f565b602002602001018181525050836001600160a01b0316816001815181106112225761122261515f565b6001600160a01b03841661176f576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061179390848484612281565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106118255761182561515f565b602002602001018181525050816001600160a01b03168160018151811061184e5761184e61515f565b60200260200101818152505092915050565b6001600160a01b03821661188757604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016116ba565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061191d5761191d61515f565b602002602001018181525050919050565b600f805482919060ff19166001838181111561194c5761194c61495b565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119809190614971565b60405180910390a150565b6001600160a01b0384166119cb576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119ef90848484612351565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a3d929190918252602082015260400190565b60405180910390a350505050565b611a78604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611aa15780611aa4565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b6001600160a01b038216611b16576040517f4dc2695600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f5f7546696f82a13fc588ba20578ae368382ccae1177df8c6ab37f8b18dd428ab91016116ba565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611bef57611bef61515f565b6020026020010181815250508160001c8160018151811061184e5761184e61515f565b8082148015611c2057508115155b15611c5a576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610cdc565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff16611cee5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611cfb81602001516124b0565b611d048161251f565b50565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611d4657611d4661515f565b6020026020010181815250508281600181518110611d6657611d6661515f565b6020026020010181815250508181600281518110611d8657611d8661515f565b6020026020010181815250509392505050565b611da66016848484612351565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611e185760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611980565b611e588484846125bf565b6001600160a01b03811660009081526021602052604090205460ff16610df9576040517fd8f7e4a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b0583836126c6565b60008282028315801590611ed9575082848281611ed557611ed5615389565b0414155b15611f0157604051637472527d60e11b81526004810185905260248101849052604401610cdc565b8015611f1e57670de0b6b3a7640000600019820104600101611f21565b60005b949350505050565b6000610e908260006128c5565b6108678585858585612922565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611f8057611f8061515f565b602002602001018181525050818160018151811061184e5761184e61515f565b6001600160a01b038216611fc757604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611ff05760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016116ba565b6120476012848484612281565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156120c15780610b05565b60169392505050565b670de0b6b3a764000081111561210c576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611554565b6001600160a01b03811660009081526001830160205260408120541515610b05565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906121dc90879030908890889060040161539f565b602060405180830381865afa1580156121f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2191906153e5565b6000611f2161222f6201518084615402565b612936565b6000808061224861222f6201518086615402565b5091509150611f2182826129d2565b6000610b05836001600160a01b038416612a58565b6000610b05836001600160a01b038416612b52565b60006001600160a01b038416158015612298575082155b80156122a2575081155b905060006001600160a01b038516158015906122c657508215806122c65750838310155b9050811580156122d4575080155b15612324576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610cdc565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b038416158015612368575082155b8015612372575081155b905060006001600160a01b0385161580159061238e5750600084115b801561239a5750600083115b9050811580156123a8575080155b156123f8576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610cdc565b6003860183905560018601849055811561241f57600060028701819055600487015561248b565b8560040154600003612446576000600287015561243c8342615416565b600487015561248b565b85546001600160a01b0386811691161461248b578554600090612472906001600160a01b031687611eaa565b60028801549091506124849082612ba1565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b600054610100900460ff166125095760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b6125168160a00151612bfe565b611d0481612cb4565b600054610100900460ff166125785760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b60005b815151811015610897576125ad8260000151828151811061259e5761259e61515f565b60200260200101516001611ad6565b806125b78161518b565b91505061257b565b6125c98383612e0f565b6001600160a01b0383166125f057604051636070789160e11b815260040160405180910390fd5b8160000361262a576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061263584610acf565b6001600160a01b031603612675576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061268084611139565b905080821115610df9576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610cdc565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127409190615429565b90506001600160a01b038116612791576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610cdc565b600061279b612e55565b9050805160001461282c57816001600160a01b031663355efdd96127be87612ed5565b6127c787612ed5565b846040518463ffffffff1660e01b81526004016127e693929190615446565b602060405180830381865afa158015612803573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282791906151a4565b6128bc565b816001600160a01b031663ac41865a61284487612ed5565b61284d87612ed5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc91906151a4565b95945050505050565b60006128d2826020615416565b835110156129195782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610cdc918491600401918252602082015260400190565b50016020015190565b61292c8282612f09565b6108678585612f8f565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161299357612993615389565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129e35750816003145b806129ee5750816005145b806129f95750816007145b80612a045750816008145b80612a0f575081600a145b80612a1a575081600c145b15612a275750601f610e90565b81600214612a375750601e610e90565b612a4083612fb7565b612a4b57601c612a4e565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b41576000612a7c6001836151bd565b8554909150600090612a90906001906151bd565b9050818114612af5576000866000018281548110612ab057612ab061515f565b9060005260206000200154905080876000018481548110612ad357612ad361515f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b0657612b06615472565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e90565b6000915050610e90565b5092915050565b6000818152600183016020526040812054612b9957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e90565b506000610e90565b60008282028315801590612bc4575082848281612bc057612bc0615389565b0414155b15612bec57604051637472527d60e11b81526004810185905260248101849052604401610cdc565b670de0b6b3a764000090049392505050565b600054610100900460ff16612c575760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051612c6290612ff3565b612c6a6130c3565b612c778160200151613126565b612c848160400151613188565b612c9181606001516131ea565b612c9e816080015161324c565b612cab8160a001516132ae565b611d0481613310565b600054610100900460ff16612d0d5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051612d1890611576565b612d258160200151611b6e565b612d328160400151611def565b60005b816060015151811015612da057612d8e82606001518281518110612d5b57612d5b61515f565b60200260200101516000015183606001518381518110612d7d57612d7d61515f565b602002602001015160200151611860565b80612d988161518b565b915050612d35565b5060005b81608001515181101561089757612dfd82608001518281518110612dca57612dca61515f565b60200260200101516000015183608001518381518110612dec57612dec61515f565b602002602001015160200151611fa0565b80612e078161518b565b915050612da4565b612e198282613369565b612e238282613373565b612e2d8282613397565b612e378282613483565b612e418282613672565b612e4b82826136bc565b61089782826137a9565b60606000612e616138bf565b905036811115612e7f57505060408051600081526020810190915290565b8067ffffffffffffffff811115612e9857612e98614692565b6040519080825280601f01601f191660200182016040528015612ec2576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612f015781610e90565b610e906138da565b60035415610897576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612f7357600080fd5b505af1158015612f87573d6000803e3d6000fd5b505050505050565b612f998282613966565b612fa38282613a08565b612fad8282613a2a565b6108978282613c74565b6000612fc4600483615488565b158015612fda5750612fd7606483615488565b15155b80610e905750612fec61019083615488565b1592915050565b600054610100900460ff1661304c5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b6130ba81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b59190615429565b613ca1565b611d0481613d03565b600054610100900460ff1661311c5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b613124613d91565b565b600054610100900460ff1661317f5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613dea565b600054610100900460ff166131e15760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613e5f565b600054610100900460ff166132435760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613ed4565b600054610100900460ff166132a55760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613f82565b600054610100900460ff166133075760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481614060565b600054610100900460ff16611d045760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b610897828261413e565b60045460ff16156108975760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806133d6575081513a11155b90508061341b5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610cdc565b602082015115610df9576000613431483a6151bd565b602084015190915081111580612f875760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610cdc918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156134bf5760405163013ce60b60e01b815242600482015260248101839052604401610cdc565b60008460028111156134d3576134d361495b565b0361358c57826000036134e857505050505050565b80600003613502576134fa8342615416565b600d55612f87565b600061350e83426151bd565b9050600061351c8583615402565b9050600061352a8683615372565b61353490846151bd565b9050838111156135605760405163013ce60b60e01b815242600482015260248101869052604401610cdc565b8561356c836001615416565b6135769190615372565b6135809086615416565b600d5550612f87915050565b8142101580156135a557506135a18183615416565b4211155b156135b4576134fa8284614191565b600060018560028111156135ca576135ca61495b565b146135dd576135d842612234565b6135e6565b6135e68361221d565b905060006135f48483614229565b9050804210156136205760405163013ce60b60e01b815242600482015260248101829052604401610cdc565b600061362c8483615416565b905042811080156136595760405163013ce60b60e01b815242600482015260248101839052604401610cdc565b6136638388614191565b600d5550505050505050505050565b61367b82611196565b610897576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610cdc565b60006136c783611a4b565b80519091506001600160a01b03166136de57505050565b6000836001600160a01b031682600001516001600160a01b03161461371a5761371561370e858460000151611eaa565b8490612ba1565b61371c565b825b9050600082602001518210158015613744575060408301511580613744575082604001518211155b905080610867578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610cdc565b60006137b483612096565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061380357505050565b6000836001600160a01b031682600001516001600160a01b0316146138385761383361370e858460000151611eaa565b61383a565b825b9050600082608001514210613850576000613856565b82604001515b6138609083615416565b9050826020015181111561086757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610cdc565b600060243610156138d05750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa15801561393d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139619190615429565b905090565b600061397183612096565b80549091506001600160a01b031661398857505050565b80546000906001600160a01b038581169116146139be5781546139b99061370e9086906001600160a01b0316611eaa565b6139c0565b825b9050816004015442106139e9576000600283015560038201546139e39042615416565b60048301555b808260020160008282546139fd9190615416565b909155505050505050565b600d54600003613a16575050565b613a21600d54614248565b50506000600d55565b600554600003613a66576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613a9f91906151bd565b90506000613aad3a83615372565b90506000836040015160001480613ac8575083604001518211155b905080613b12578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610cdc929190918252602082015260400190565b6000600555606084015115801590613b2a5750600085115b15612f87576000613bfd306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b969190615429565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf79190615429565b88611eaa565b90506000613c0b8483611eb6565b90506000613c19828961427d565b90508660600151811115613c695760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610cdc918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613cfa5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481614346565b600054610100900460ff16613d5c5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051600180546001600160a01b0319166001600160a01b0390921691909117905560208101516040820151611d049190611c12565b600054610100900460ff166131245760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b600054610100900460ff16613e435760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481600001518260200151836040015184606001516120ca565b600054610100900460ff16613eb85760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481600001518260200151836040015184606001516112bd565b600054610100900460ff16613f2d5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051613f389061192e565b60005b81602001515181101561089757613f7082602001518281518110613f6157613f6161515f565b6020026020010151600161161c565b80613f7a8161518b565b915050613f3b565b600054610100900460ff16613fdb5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051805160208201516040830151613ff492919061203a565b60005b82602001515181101561097d5760008360200151828151811061401c5761401c61515f565b6020026020010151905060008160200151905061404b826000015182600001518360200151846040015161172f565b505080806140589061518b565b915050613ff7565b600054610100900460ff166140b95760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b80518051602082015160408301516140d2929190611d99565b60005b82602001515181101561097d576000836020015182815181106140fa576140fa61515f565b60200260200101519050600081602001519050614129826000015182600001518360200151846040015161198b565b505080806141369061518b565b9150506140d5565b600254156108975760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612f59565b6000806000806141a0866143df565b9194509250905060006141b38684615416565b905060006141c2600c83615488565b905060006141d1600c84615402565b6141db9087615416565b905060006002600a5460ff1660028111156141f8576141f861495b565b14614203578461420d565b61420d82846129d2565b905061421b8a8385846143fe565b9a9950505050505050505050565b6000806000614237426143df565b50915091506128bc858383876143fe565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611980565b6000816000036142b9576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036142c957506000610e90565b670de0b6b3a7640000838102908482816142e5576142e5615389565b0414614327576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610cdc565b82600182038161433957614339615389565b0460010191505092915050565b600054610100900460ff1661439f5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600080806143f1620151808504612936565b9196909550909350915050565b60006128bc84848461440f89614426565b6144188a614444565b6144218b614460565b61446d565b6000806144366201518084615488565b9050610b05610e1082615402565b600080614453610e1084615488565b9050610b05603c82615402565b6000610e90603c83615488565b60008161447b603c85615372565b614487610e1087615372565b620151806144968b8b8b6144c9565b6144a09190615372565b6144aa9190615416565b6144b49190615416565b6144be9190615416565b979650505050505050565b60006107b28410156144da57600080fd5b838383600062253d8c60046064600c6144f4600e8861549c565b6144fe91906154bc565b61450a886113246154ea565b61451491906154ea565b61451e91906154bc565b614529906003615512565b61453391906154bc565b600c80614541600e8861549c565b61454b91906154bc565b61455690600c615512565b61456160028861549c565b61456b919061549c565b6145779061016f615512565b61458191906154bc565b6004600c614590600e8961549c565b61459a91906154bc565b6145a6896112c06154ea565b6145b091906154ea565b6145bc906105b5615512565b6145c691906154bc565b6145d2617d4b8761549c565b6145dc91906154ea565b6145e691906154ea565b6145f0919061549c565b6145fa919061549c565b98975050505050505050565b803560ff8116811461461757600080fd5b919050565b6000806000806080858703121561463257600080fd5b61463b85614606565b966020860135965060408601359560600135945092505050565b6001600160a01b0381168114611d0457600080fd5b803561461781614655565b60006020828403121561468757600080fd5b8135610b0581614655565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156146cb576146cb614692565b60405290565b6040516080810167ffffffffffffffff811182821017156146cb576146cb614692565b60405160c0810167ffffffffffffffff811182821017156146cb576146cb614692565b604051601f8201601f1916810167ffffffffffffffff8111828210171561474057614740614692565b604052919050565b600067ffffffffffffffff82111561476257614762614692565b5060051b60200190565b600082601f83011261477d57600080fd5b8135602061479261478d83614748565b614717565b82815260059290921b840181019181810190868411156147b157600080fd5b8286015b848110156147d55780356147c881614655565b83529183019183016147b5565b509695505050505050565b8015158114611d0457600080fd5b6000806040838503121561480157600080fd5b823567ffffffffffffffff8082111561481957600080fd5b6148258683870161476c565b935060209150818501358181111561483c57600080fd5b85019050601f8101861361484f57600080fd5b803561485d61478d82614748565b81815260059190911b8201830190838101908883111561487c57600080fd5b928401925b828410156148a3578335614894816147e0565b82529284019290840190614881565b80955050505050509250929050565b600080600080608085870312156148c857600080fd5b84356148d381614655565b935060208501356148e381614655565b93969395505050506040820135916060013590565b6000806040838503121561490b57600080fd5b823561491681614655565b9150602083013561492681614655565b809150509250929050565b80356002811061461757600080fd5b60006020828403121561495257600080fd5b610b0582614931565b634e487b7160e01b600052602160045260246000fd5b602081016002831061499357634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156149ac57600080fd5b50508035926020909101359150565b600082601f8301126149cc57600080fd5b813560206149dc61478d83614748565b82815260069290921b840181019181810190868411156149fb57600080fd5b8286015b848110156147d55760408189031215614a185760008081fd5b614a206146a8565b8135614a2b81614655565b815281850135614a3a81614655565b818601528352918301916040016149ff565b600082601f830112614a5d57600080fd5b81356020614a6d61478d83614748565b82815260069290921b84018101918181019086841115614a8c57600080fd5b8286015b848110156147d55760408189031215614aa95760008081fd5b614ab16146a8565b8135614abc81614655565b81528185013585820152835291830191604001614a90565b600060608284031215614ae657600080fd5b6040516060810181811067ffffffffffffffff82111715614b0957614b09614692565b6040529050808235614b1a81614655565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614b4b57600080fd5b614b536146d1565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614b8f57600080fd5b614b976146d1565b9050614ba282614606565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614bda57600080fd5b614be26146a8565b9050614bed82614931565b8152602082013567ffffffffffffffff811115614c0957600080fd5b614c158482850161476c565b60208301525092915050565b600060808284031215614c3357600080fd5b614c3b6146a8565b90508135614c4881614655565b8152614c578360208401614ad4565b602082015292915050565b60006080808385031215614c7557600080fd5b614c7d6146a8565b9150614c898484614ad4565b8252606083013567ffffffffffffffff811115614ca557600080fd5b8301601f81018513614cb657600080fd5b80356020614cc661478d83614748565b82815260079290921b83018101918181019088841115614ce557600080fd5b938201935b83851015614d0b57614cfc8986614c21565b82529385019390820190614cea565b808388015250505050505092915050565b60006080808385031215614d2f57600080fd5b614d376146a8565b9150614d438484614ad4565b8252606083013567ffffffffffffffff811115614d5f57600080fd5b8301601f81018513614d7057600080fd5b80356020614d8061478d83614748565b82815260079290921b83018101918181019088841115614d9f57600080fd5b938201935b83851015614d0b57614db68986614c21565b82529385019390820190614da4565b60006101c08284031215614dd857600080fd5b614de06146f4565b9050614dec8383614ad4565b8152614dfb8360608401614b39565b6020820152614e0d8360e08401614b7d565b604082015261016082013567ffffffffffffffff80821115614e2e57600080fd5b614e3a85838601614bc8565b6060840152610180840135915080821115614e5457600080fd5b614e6085838601614c62565b60808401526101a0840135915080821115614e7a57600080fd5b50614e8784828501614d1c565b60a08301525092915050565b600060208284031215614ea557600080fd5b813567ffffffffffffffff80821115614ebd57600080fd5b9083019060408286031215614ed157600080fd5b614ed96146a8565b823582811115614ee857600080fd5b614ef48782860161476c565b825250602083013582811115614f0957600080fd5b929092019160c08387031215614f1e57600080fd5b614f266146f4565b614f2f8461466a565b8152614f3d6020850161466a565b602082015260408401356040820152606084013583811115614f5e57600080fd5b614f6a888287016149bb565b606083015250608084013583811115614f8257600080fd5b614f8e88828701614a4c565b60808301525060a084013583811115614fa657600080fd5b614fb288828701614dc5565b60a083015250602082015295945050505050565b600080600060608486031215614fdb57600080fd5b8335614fe681614655565b95602085013595506040909401359392505050565b60006020828403121561500d57600080fd5b5035919050565b600067ffffffffffffffff82111561502e5761502e614692565b50601f01601f191660200190565b60008060008060008060c0878903121561505557600080fd5b863561506081614655565b95506020870135945060408701359350606087013561507e81614655565b9250608087013561508e81614655565b915060a087013567ffffffffffffffff8111156150aa57600080fd5b8701601f810189136150bb57600080fd5b80356150c961478d82615014565b8181528a60208385010111156150de57600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b6000806040838503121561511457600080fd5b823561511f81614655565b946020939093013593505050565b6000806000806080858703121561514357600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161519d5761519d615175565b5060010190565b6000602082840312156151b657600080fd5b5051919050565b81810381811115610e9057610e90615175565b60005b838110156151eb5781810151838201526020016151d3565b50506000910152565b6000815180845261520c8160208601602086016151d0565b601f01601f19169290920160200192915050565b60006001600160a01b03808a1683528089166020840152876040840152866060840152808616608084015280851660a08401525060e060c083015261526860e08301846151f4565b9998505050505050505050565b6001600160a01b0383168152604060208201526000611f2160408301846151f4565b6000602082840312156152a957600080fd5b815167ffffffffffffffff8111156152c057600080fd5b8201601f810184136152d157600080fd5b80516152df61478d82615014565b8181528560208385010111156152f457600080fd5b6128bc8260208301602086016151d0565b600081518084526020808501945080840160005b8381101561533557815187529582019590820190600101615319565b509495945050505050565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006128bc6060830184615305565b8082028115828204841417610e9057610e90615175565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526153db6080830184615305565b9695505050505050565b6000602082840312156153f757600080fd5b8151610b05816147e0565b60008261541157615411615389565b500490565b80820180821115610e9057610e90615175565b60006020828403121561543b57600080fd5b8151610b0581614655565b60006001600160a01b038086168352808516602084015250606060408301526128bc60608301846151f4565b634e487b7160e01b600052603160045260246000fd5b60008261549757615497615389565b500690565b8181036000831280158383131683831282161715612b4b57612b4b615175565b6000826154cb576154cb615389565b600160ff1b8214600019841416156154e5576154e5615175565b500590565b808201828112600083128015821682158216171561550a5761550a615175565b505092915050565b80820260008212600160ff1b8414161561552e5761552e615175565b8181058314821517610e9057610e9061517556fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220e703f148558377e544b78af30dce5dafb577aa1ce2965a6d94d367665eaeeea164736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102f45760003560e01c80637125590a11610191578063b187bd26116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107fc578063e6b5be981461080f578063f9eaee0d1461082257600080fd5b8063d09edf31146107bd578063d3feb602146107d6578063d45a76cf146107e957600080fd5b8063b96e422c116100c8578063b96e422c14610790578063c267621e14610799578063c47590e4146107aa57600080fd5b8063b187bd2614610770578063b61df01c1461077d57600080fd5b806390333ba811610145578063a2c456441161011f578063a2c45644146106d0578063a3374177146106e3578063a5900c4d1461071657600080fd5b806390333ba81461068b5780639eebe7cd1461069e578063a0c3774f146106bd57600080fd5b806383f3084f1161017657806383f3084f1461065d5780638456cb59146106705780638a5215861461067857600080fd5b80637125590a1461063757806378a106e41461064a57600080fd5b8063445780991161024a5780635670e2ce116101fe57806363560086116101d857806363560086146105af57806363e133bc146105c25780636aacaad8146105eb57600080fd5b80635670e2ce1461055557806357d6924c146105705780635ea54eee1461058357600080fd5b80634fd49efd1161022f5780634fd49efd146104d757806351a424b1146104ea5780635309fa471461052257600080fd5b806344578099146104775780634a45a3a8146104a257600080fd5b80632384c32d116102ac5780633f4ba83a116102865780633f4ba83a14610442578063423a4b401461044a57806342d4693e1461045d57600080fd5b80632384c32d146104095780632be5f0c71461041c57806330eae5721461042f57600080fd5b8063119a5e96116102dd578063119a5e96146103215780632197238414610352578063221a8c681461036557600080fd5b80630fe105e8146102f957806310188aef1461030e575b600080fd5b61030c61030736600461461c565b610835565b005b61030c61031c366004614675565b61086e565b61032961089b565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61030c6103603660046147ee565b6108d2565b6103d7610373366004614675565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610349565b61030c6104173660046148b2565b610982565b61030c61042a3660046148f8565b6109b1565b61030c61043d366004614940565b6109dc565b61030c610a19565b61030c6104583660046148b2565b610aa0565b600f5461046a9060ff1681565b6040516103499190614971565b61048a610485366004614675565b610acf565b6040516001600160a01b039091168152602001610349565b6104c97f3cb047a460ffb7ae4344920a005af1897ead8e3e33a4792bd0cfa530ffecfc1681565b604051908152602001610349565b60015461048a906001600160a01b031681565b6104fd6104f8366004614675565b610b0c565b604080516001600160a01b039094168452602084019290925290820152606001610349565b610545610530366004614675565b60216020526000908152604090205460ff1681565b6040519015158152602001610349565b60025460035460408051928352602083019190915201610349565b61030c61057e3660046147ee565b610b35565b600654600754600854600954604080519485526020850193909352918301526060820152608001610349565b61030c6105bd366004614675565b610be0565b61048a6105d0366004614675565b601f602052600090815260409020546001600160a01b031681565b6103d76040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61030c610645366004614999565b610c09565b61030c610658366004614e93565b610c34565b601c5461048a906001600160a01b031681565b61030c610d5a565b601d5461048a906001600160a01b031681565b61030c610699366004614fc6565b610dcc565b6104c96106ac366004614675565b602080526000908152604090205481565b6104c96106cb366004614675565b610dff565b61030c6106de366004614ffb565b610e96565b6104fd604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6104fd610724366004614675565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546105459060ff1681565b61030c61078b36600461503c565b610ebf565b6104c9601e5481565b6001546001600160a01b031661048a565b61030c6107b8366004615101565b611072565b60005461048a906201000090046001600160a01b031681565b61030c6107e4366004614fc6565b61109d565b6103d76107f7366004614675565b6110ca565b6104c961080a366004614675565b611139565b61030c61081d36600461512d565b611167565b610545610830366004614675565b611196565b6108448460ff168484846111cb565b61085b336000356001600160e01b03191683611276565b610867858585856112bd565b5050505050565b61087781611562565b61088e336000356001600160e01b03191683611276565b61089782611576565b5050565b600a5460009081908190819060ff1660028111156108bb576108bb61495b565b600b54600c54600e54935093509350935090919293565b6108e8336000356001600160e01b031916611600565b8051825114610923576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561097d5761096b8382815181106109445761094461515f565b602002602001015183838151811061095e5761095e61515f565b602002602001015161161c565b806109758161518b565b915050610926565b505050565b61098e848484846116c6565b6109a5336000356001600160e01b03191683611276565b6108678585858561172f565b6109bb82826117e8565b6109d2336000356001600160e01b03191683611276565b61097d8383611860565b6109f98160018111156109f1576109f161495b565b60ff166118e7565b610a10336000356001600160e01b03191683611276565b6108978261192e565b610a2f336000356001600160e01b031916611600565b60045460ff16610a6b576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610aac848484846116c6565b610ac3336000356001600160e01b03191683611276565b6108678585858561198b565b6001600160a01b038082166000908152601f60205260408120549091168015610af85780610b05565b601d546001600160a01b03165b9392505050565b600080600080610b1b85611a4b565b805160208201516040909201519097919650945092505050565b610b4b336000356001600160e01b031916611600565b8051825114610b86576040517f25d27da300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561097d57610bce838281518110610ba757610ba761515f565b6020026020010151838381518110610bc157610bc161515f565b6020026020010151611ad6565b80610bd88161518b565b915050610b89565b610be981611562565b610c00336000356001600160e01b03191683611276565b61089782611b6e565b610c138282611bb8565b610c2a336000356001600160e01b03191683611276565b61097d8383611c12565b600054610100900460ff1615808015610c545750600054600160ff909116105b80610c6e5750303b158015610c6e575060005460ff166001145b610ce55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610d08576000805461ff0019166101001790555b610d1182611c95565b8015610897576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610d70336000356001600160e01b031916611600565b60045460ff1615610d945760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610dd7838383611d07565b610dee336000356001600160e01b03191683611276565b610df9848484611d99565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9091906151a4565b92915050565b610e9f816118e7565b610eb6336000356001600160e01b03191683611276565b61089782611def565b610eca868686611d07565b610ee1336000356001600160e01b03191683611276565b85600003610ef557610ef287610dff565b95505b610f0187878787611e4d565b6000610f0c88610acf565b90506000610f1a8983611eaa565b90506000610f43610f3389670de0b6b3a76400006151bd565b610f3d8b85611eb6565b90611eb6565b9050600063512904a460e01b8b858c858c8c8c604051602401610f6c9796959493929190615220565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd926110069216908690600401615275565b6000604051808303816000875af1158015611025573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104d9190810190615297565b90506110648c8c8c8861105f86611f29565b611f36565b505050505050505050505050565b61107c8282611f43565b611093336000356001600160e01b03191683611276565b61097d8383611fa0565b6110a8838383611d07565b6110bf336000356001600160e01b03191683611276565b610df984848461203a565b6000806000806000806110dc87612096565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152602080526040812054801561115d5780610b05565b601e549392505050565b611173848484846111cb565b61118a336000356001600160e01b03191683611276565b610867858585856120ca565b6000806111a4601084612165565b90506001600f5460ff1660018111156111bf576111bf61495b565b14610e90578015610b05565b60408051600480825260a082019092526060916020820160808036833701905050905084816000815181106112025761120261515f565b60200260200101818152505083816001815181106112225761122261515f565b60200260200101818152505082816002815181106112425761124261515f565b60200260200101818152505081816003815181106112625761126261515f565b602002602001018181525050949350505050565b611281838383612187565b61097d578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610cdc93929190615340565b60ff841661136e5760008111806112d45750600082115b1561136957826000036113065760405163bea499cb60e01b815260ff8516600482015260248101849052604401610cdc565b80158061131257508281115b1561133c57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610cdc565b8160000361136957604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b6114cb565b8260000361139b5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610cdc565b8015806113b357506113b06224ea0084615372565b81115b156113dd57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610cdc565b8160000361140a57604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b60001960ff85160161144c57601c6114218361221d565b111561136957604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b60011960ff8516016114945761146182612234565b61146a8361221d565b1461136957604051635686bf5960e11b815260ff8516600482015260248101839052604401610cdc565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610cdc565b8360ff1660028111156114e0576114e061495b565b600a805460ff191660018360028111156114fc576114fc61495b565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610e90826001600160a01b03166118e7565b6001600160a01b0381166115b6576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526108979083908390611276565b6001600160a01b03821661165c576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806116715761166c601083612257565b61167c565b61167c60108361226c565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516116ba911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106117065761170661515f565b602002602001018181525050836001600160a01b0316816001815181106112225761122261515f565b6001600160a01b03841661176f576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061179390848484612281565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106118255761182561515f565b602002602001018181525050816001600160a01b03168160018151811061184e5761184e61515f565b60200260200101818152505092915050565b6001600160a01b03821661188757604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f791016116ba565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061191d5761191d61515f565b602002602001018181525050919050565b600f805482919060ff19166001838181111561194c5761194c61495b565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a816040516119809190614971565b60405180910390a150565b6001600160a01b0384166119cb576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206119ef90848484612351565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611a3d929190918252602082015260400190565b60405180910390a350505050565b611a78604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611aa15780611aa4565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b6001600160a01b038216611b16576040517f4dc2695600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f5f7546696f82a13fc588ba20578ae368382ccae1177df8c6ab37f8b18dd428ab91016116ba565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611bef57611bef61515f565b6020026020010181815250508160001c8160018151811061184e5761184e61515f565b8082148015611c2057508115155b15611c5a576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610cdc565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff16611cee5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611cfb81602001516124b0565b611d048161251f565b50565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611d4657611d4661515f565b6020026020010181815250508281600181518110611d6657611d6661515f565b6020026020010181815250508181600281518110611d8657611d8661515f565b6020026020010181815250509392505050565b611da66016848484612351565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611e185760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611980565b611e588484846125bf565b6001600160a01b03811660009081526021602052604090205460ff16610df9576040517fd8f7e4a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b0583836126c6565b60008282028315801590611ed9575082848281611ed557611ed5615389565b0414155b15611f0157604051637472527d60e11b81526004810185905260248101849052604401610cdc565b8015611f1e57670de0b6b3a7640000600019820104600101611f21565b60005b949350505050565b6000610e908260006128c5565b6108678585858585612922565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611f8057611f8061515f565b602002602001018181525050818160018151811061184e5761184e61515f565b6001600160a01b038216611fc757604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611ff05760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed391016116ba565b6120476012848484612281565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b6020526040812080549192909116156120c15780610b05565b60169392505050565b670de0b6b3a764000081111561210c576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d69190608001611554565b6001600160a01b03811660009081526001830160205260408120541515610b05565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906121dc90879030908890889060040161539f565b602060405180830381865afa1580156121f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2191906153e5565b6000611f2161222f6201518084615402565b612936565b6000808061224861222f6201518086615402565b5091509150611f2182826129d2565b6000610b05836001600160a01b038416612a58565b6000610b05836001600160a01b038416612b52565b60006001600160a01b038416158015612298575082155b80156122a2575081155b905060006001600160a01b038516158015906122c657508215806122c65750838310155b9050811580156122d4575080155b15612324576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610cdc565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b60006001600160a01b038416158015612368575082155b8015612372575081155b905060006001600160a01b0385161580159061238e5750600084115b801561239a5750600083115b9050811580156123a8575080155b156123f8576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610cdc565b6003860183905560018601849055811561241f57600060028701819055600487015561248b565b8560040154600003612446576000600287015561243c8342615416565b600487015561248b565b85546001600160a01b0386811691161461248b578554600090612472906001600160a01b031687611eaa565b60028801549091506124849082612ba1565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b600054610100900460ff166125095760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b6125168160a00151612bfe565b611d0481612cb4565b600054610100900460ff166125785760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b60005b815151811015610897576125ad8260000151828151811061259e5761259e61515f565b60200260200101516001611ad6565b806125b78161518b565b91505061257b565b6125c98383612e0f565b6001600160a01b0383166125f057604051636070789160e11b815260040160405180910390fd5b8160000361262a576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061263584610acf565b6001600160a01b031603612675576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061268084611139565b905080821115610df9576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610cdc565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127409190615429565b90506001600160a01b038116612791576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610cdc565b600061279b612e55565b9050805160001461282c57816001600160a01b031663355efdd96127be87612ed5565b6127c787612ed5565b846040518463ffffffff1660e01b81526004016127e693929190615446565b602060405180830381865afa158015612803573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282791906151a4565b6128bc565b816001600160a01b031663ac41865a61284487612ed5565b61284d87612ed5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc91906151a4565b95945050505050565b60006128d2826020615416565b835110156129195782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610cdc918491600401918252602082015260400190565b50016020015190565b61292c8282612f09565b6108678585612f8f565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161299357612993615389565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806129e35750816003145b806129ee5750816005145b806129f95750816007145b80612a045750816008145b80612a0f575081600a145b80612a1a575081600c145b15612a275750601f610e90565b81600214612a375750601e610e90565b612a4083612fb7565b612a4b57601c612a4e565b601d5b60ff169392505050565b60008181526001830160205260408120548015612b41576000612a7c6001836151bd565b8554909150600090612a90906001906151bd565b9050818114612af5576000866000018281548110612ab057612ab061515f565b9060005260206000200154905080876000018481548110612ad357612ad361515f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b0657612b06615472565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e90565b6000915050610e90565b5092915050565b6000818152600183016020526040812054612b9957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e90565b506000610e90565b60008282028315801590612bc4575082848281612bc057612bc0615389565b0414155b15612bec57604051637472527d60e11b81526004810185905260248101849052604401610cdc565b670de0b6b3a764000090049392505050565b600054610100900460ff16612c575760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051612c6290612ff3565b612c6a6130c3565b612c778160200151613126565b612c848160400151613188565b612c9181606001516131ea565b612c9e816080015161324c565b612cab8160a001516132ae565b611d0481613310565b600054610100900460ff16612d0d5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051612d1890611576565b612d258160200151611b6e565b612d328160400151611def565b60005b816060015151811015612da057612d8e82606001518281518110612d5b57612d5b61515f565b60200260200101516000015183606001518381518110612d7d57612d7d61515f565b602002602001015160200151611860565b80612d988161518b565b915050612d35565b5060005b81608001515181101561089757612dfd82608001518281518110612dca57612dca61515f565b60200260200101516000015183608001518381518110612dec57612dec61515f565b602002602001015160200151611fa0565b80612e078161518b565b915050612da4565b612e198282613369565b612e238282613373565b612e2d8282613397565b612e378282613483565b612e418282613672565b612e4b82826136bc565b61089782826137a9565b60606000612e616138bf565b905036811115612e7f57505060408051600081526020810190915290565b8067ffffffffffffffff811115612e9857612e98614692565b6040519080825280601f01601f191660200182016040528015612ec2576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612f015781610e90565b610e906138da565b60035415610897576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612f7357600080fd5b505af1158015612f87573d6000803e3d6000fd5b505050505050565b612f998282613966565b612fa38282613a08565b612fad8282613a2a565b6108978282613c74565b6000612fc4600483615488565b158015612fda5750612fd7606483615488565b15155b80610e905750612fec61019083615488565b1592915050565b600054610100900460ff1661304c5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b6130ba81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b59190615429565b613ca1565b611d0481613d03565b600054610100900460ff1661311c5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b613124613d91565b565b600054610100900460ff1661317f5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613dea565b600054610100900460ff166131e15760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613e5f565b600054610100900460ff166132435760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613ed4565b600054610100900460ff166132a55760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481613f82565b600054610100900460ff166133075760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481614060565b600054610100900460ff16611d045760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b610897828261413e565b60045460ff16156108975760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806133d6575081513a11155b90508061341b5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610cdc565b602082015115610df9576000613431483a6151bd565b602084015190915081111580612f875760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610cdc918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156134bf5760405163013ce60b60e01b815242600482015260248101839052604401610cdc565b60008460028111156134d3576134d361495b565b0361358c57826000036134e857505050505050565b80600003613502576134fa8342615416565b600d55612f87565b600061350e83426151bd565b9050600061351c8583615402565b9050600061352a8683615372565b61353490846151bd565b9050838111156135605760405163013ce60b60e01b815242600482015260248101869052604401610cdc565b8561356c836001615416565b6135769190615372565b6135809086615416565b600d5550612f87915050565b8142101580156135a557506135a18183615416565b4211155b156135b4576134fa8284614191565b600060018560028111156135ca576135ca61495b565b146135dd576135d842612234565b6135e6565b6135e68361221d565b905060006135f48483614229565b9050804210156136205760405163013ce60b60e01b815242600482015260248101829052604401610cdc565b600061362c8483615416565b905042811080156136595760405163013ce60b60e01b815242600482015260248101839052604401610cdc565b6136638388614191565b600d5550505050505050505050565b61367b82611196565b610897576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610cdc565b60006136c783611a4b565b80519091506001600160a01b03166136de57505050565b6000836001600160a01b031682600001516001600160a01b03161461371a5761371561370e858460000151611eaa565b8490612ba1565b61371c565b825b9050600082602001518210158015613744575060408301511580613744575082604001518211155b905080610867578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610cdc565b60006137b483612096565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061380357505050565b6000836001600160a01b031682600001516001600160a01b0316146138385761383361370e858460000151611eaa565b61383a565b825b9050600082608001514210613850576000613856565b82604001515b6138609083615416565b9050826020015181111561086757825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610cdc565b600060243610156138d05750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa15801561393d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139619190615429565b905090565b600061397183612096565b80549091506001600160a01b031661398857505050565b80546000906001600160a01b038581169116146139be5781546139b99061370e9086906001600160a01b0316611eaa565b6139c0565b825b9050816004015442106139e9576000600283015560038201546139e39042615416565b60048301555b808260020160008282546139fd9190615416565b909155505050505050565b600d54600003613a16575050565b613a21600d54614248565b50506000600d55565b600554600003613a66576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613a9f91906151bd565b90506000613aad3a83615372565b90506000836040015160001480613ac8575083604001518211155b905080613b12578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610cdc929190918252602082015260400190565b6000600555606084015115801590613b2a5750600085115b15612f87576000613bfd306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b969190615429565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf79190615429565b88611eaa565b90506000613c0b8483611eb6565b90506000613c19828961427d565b90508660600151811115613c695760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610cdc918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613cfa5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481614346565b600054610100900460ff16613d5c5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051600180546001600160a01b0319166001600160a01b0390921691909117905560208101516040820151611d049190611c12565b600054610100900460ff166131245760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b600054610100900460ff16613e435760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481600001518260200151836040015184606001516120ca565b600054610100900460ff16613eb85760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b611d0481600001518260200151836040015184606001516112bd565b600054610100900460ff16613f2d5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051613f389061192e565b60005b81602001515181101561089757613f7082602001518281518110613f6157613f6161515f565b6020026020010151600161161c565b80613f7a8161518b565b915050613f3b565b600054610100900460ff16613fdb5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b8051805160208201516040830151613ff492919061203a565b60005b82602001515181101561097d5760008360200151828151811061401c5761401c61515f565b6020026020010151905060008160200151905061404b826000015182600001518360200151846040015161172f565b505080806140589061518b565b915050613ff7565b600054610100900460ff166140b95760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b80518051602082015160408301516140d2929190611d99565b60005b82602001515181101561097d576000836020015182815181106140fa576140fa61515f565b60200260200101519050600081602001519050614129826000015182600001518360200151846040015161198b565b505080806141369061518b565b9150506140d5565b600254156108975760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612f59565b6000806000806141a0866143df565b9194509250905060006141b38684615416565b905060006141c2600c83615488565b905060006141d1600c84615402565b6141db9087615416565b905060006002600a5460ff1660028111156141f8576141f861495b565b14614203578461420d565b61420d82846129d2565b905061421b8a8385846143fe565b9a9950505050505050505050565b6000806000614237426143df565b50915091506128bc858383876143fe565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611980565b6000816000036142b9576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036142c957506000610e90565b670de0b6b3a7640000838102908482816142e5576142e5615389565b0414614327576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610cdc565b82600182038161433957614339615389565b0460010191505092915050565b600054610100900460ff1661439f5760405162461bcd60e51b815260206004820152602b602482015260008051602061554383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610cdc565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600080806143f1620151808504612936565b9196909550909350915050565b60006128bc84848461440f89614426565b6144188a614444565b6144218b614460565b61446d565b6000806144366201518084615488565b9050610b05610e1082615402565b600080614453610e1084615488565b9050610b05603c82615402565b6000610e90603c83615488565b60008161447b603c85615372565b614487610e1087615372565b620151806144968b8b8b6144c9565b6144a09190615372565b6144aa9190615416565b6144b49190615416565b6144be9190615416565b979650505050505050565b60006107b28410156144da57600080fd5b838383600062253d8c60046064600c6144f4600e8861549c565b6144fe91906154bc565b61450a886113246154ea565b61451491906154ea565b61451e91906154bc565b614529906003615512565b61453391906154bc565b600c80614541600e8861549c565b61454b91906154bc565b61455690600c615512565b61456160028861549c565b61456b919061549c565b6145779061016f615512565b61458191906154bc565b6004600c614590600e8961549c565b61459a91906154bc565b6145a6896112c06154ea565b6145b091906154ea565b6145bc906105b5615512565b6145c691906154bc565b6145d2617d4b8761549c565b6145dc91906154ea565b6145e691906154ea565b6145f0919061549c565b6145fa919061549c565b98975050505050505050565b803560ff8116811461461757600080fd5b919050565b6000806000806080858703121561463257600080fd5b61463b85614606565b966020860135965060408601359560600135945092505050565b6001600160a01b0381168114611d0457600080fd5b803561461781614655565b60006020828403121561468757600080fd5b8135610b0581614655565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156146cb576146cb614692565b60405290565b6040516080810167ffffffffffffffff811182821017156146cb576146cb614692565b60405160c0810167ffffffffffffffff811182821017156146cb576146cb614692565b604051601f8201601f1916810167ffffffffffffffff8111828210171561474057614740614692565b604052919050565b600067ffffffffffffffff82111561476257614762614692565b5060051b60200190565b600082601f83011261477d57600080fd5b8135602061479261478d83614748565b614717565b82815260059290921b840181019181810190868411156147b157600080fd5b8286015b848110156147d55780356147c881614655565b83529183019183016147b5565b509695505050505050565b8015158114611d0457600080fd5b6000806040838503121561480157600080fd5b823567ffffffffffffffff8082111561481957600080fd5b6148258683870161476c565b935060209150818501358181111561483c57600080fd5b85019050601f8101861361484f57600080fd5b803561485d61478d82614748565b81815260059190911b8201830190838101908883111561487c57600080fd5b928401925b828410156148a3578335614894816147e0565b82529284019290840190614881565b80955050505050509250929050565b600080600080608085870312156148c857600080fd5b84356148d381614655565b935060208501356148e381614655565b93969395505050506040820135916060013590565b6000806040838503121561490b57600080fd5b823561491681614655565b9150602083013561492681614655565b809150509250929050565b80356002811061461757600080fd5b60006020828403121561495257600080fd5b610b0582614931565b634e487b7160e01b600052602160045260246000fd5b602081016002831061499357634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156149ac57600080fd5b50508035926020909101359150565b600082601f8301126149cc57600080fd5b813560206149dc61478d83614748565b82815260069290921b840181019181810190868411156149fb57600080fd5b8286015b848110156147d55760408189031215614a185760008081fd5b614a206146a8565b8135614a2b81614655565b815281850135614a3a81614655565b818601528352918301916040016149ff565b600082601f830112614a5d57600080fd5b81356020614a6d61478d83614748565b82815260069290921b84018101918181019086841115614a8c57600080fd5b8286015b848110156147d55760408189031215614aa95760008081fd5b614ab16146a8565b8135614abc81614655565b81528185013585820152835291830191604001614a90565b600060608284031215614ae657600080fd5b6040516060810181811067ffffffffffffffff82111715614b0957614b09614692565b6040529050808235614b1a81614655565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614b4b57600080fd5b614b536146d1565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614b8f57600080fd5b614b976146d1565b9050614ba282614606565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614bda57600080fd5b614be26146a8565b9050614bed82614931565b8152602082013567ffffffffffffffff811115614c0957600080fd5b614c158482850161476c565b60208301525092915050565b600060808284031215614c3357600080fd5b614c3b6146a8565b90508135614c4881614655565b8152614c578360208401614ad4565b602082015292915050565b60006080808385031215614c7557600080fd5b614c7d6146a8565b9150614c898484614ad4565b8252606083013567ffffffffffffffff811115614ca557600080fd5b8301601f81018513614cb657600080fd5b80356020614cc661478d83614748565b82815260079290921b83018101918181019088841115614ce557600080fd5b938201935b83851015614d0b57614cfc8986614c21565b82529385019390820190614cea565b808388015250505050505092915050565b60006080808385031215614d2f57600080fd5b614d376146a8565b9150614d438484614ad4565b8252606083013567ffffffffffffffff811115614d5f57600080fd5b8301601f81018513614d7057600080fd5b80356020614d8061478d83614748565b82815260079290921b83018101918181019088841115614d9f57600080fd5b938201935b83851015614d0b57614db68986614c21565b82529385019390820190614da4565b60006101c08284031215614dd857600080fd5b614de06146f4565b9050614dec8383614ad4565b8152614dfb8360608401614b39565b6020820152614e0d8360e08401614b7d565b604082015261016082013567ffffffffffffffff80821115614e2e57600080fd5b614e3a85838601614bc8565b6060840152610180840135915080821115614e5457600080fd5b614e6085838601614c62565b60808401526101a0840135915080821115614e7a57600080fd5b50614e8784828501614d1c565b60a08301525092915050565b600060208284031215614ea557600080fd5b813567ffffffffffffffff80821115614ebd57600080fd5b9083019060408286031215614ed157600080fd5b614ed96146a8565b823582811115614ee857600080fd5b614ef48782860161476c565b825250602083013582811115614f0957600080fd5b929092019160c08387031215614f1e57600080fd5b614f266146f4565b614f2f8461466a565b8152614f3d6020850161466a565b602082015260408401356040820152606084013583811115614f5e57600080fd5b614f6a888287016149bb565b606083015250608084013583811115614f8257600080fd5b614f8e88828701614a4c565b60808301525060a084013583811115614fa657600080fd5b614fb288828701614dc5565b60a083015250602082015295945050505050565b600080600060608486031215614fdb57600080fd5b8335614fe681614655565b95602085013595506040909401359392505050565b60006020828403121561500d57600080fd5b5035919050565b600067ffffffffffffffff82111561502e5761502e614692565b50601f01601f191660200190565b60008060008060008060c0878903121561505557600080fd5b863561506081614655565b95506020870135945060408701359350606087013561507e81614655565b9250608087013561508e81614655565b915060a087013567ffffffffffffffff8111156150aa57600080fd5b8701601f810189136150bb57600080fd5b80356150c961478d82615014565b8181528a60208385010111156150de57600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b6000806040838503121561511457600080fd5b823561511f81614655565b946020939093013593505050565b6000806000806080858703121561514357600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161519d5761519d615175565b5060010190565b6000602082840312156151b657600080fd5b5051919050565b81810381811115610e9057610e90615175565b60005b838110156151eb5781810151838201526020016151d3565b50506000910152565b6000815180845261520c8160208601602086016151d0565b601f01601f19169290920160200192915050565b60006001600160a01b03808a1683528089166020840152876040840152866060840152808616608084015280851660a08401525060e060c083015261526860e08301846151f4565b9998505050505050505050565b6001600160a01b0383168152604060208201526000611f2160408301846151f4565b6000602082840312156152a957600080fd5b815167ffffffffffffffff8111156152c057600080fd5b8201601f810184136152d157600080fd5b80516152df61478d82615014565b8181528560208385010111156152f457600080fd5b6128bc8260208301602086016151d0565b600081518084526020808501945080840160005b8381101561533557815187529582019590820190600101615319565b509495945050505050565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006128bc6060830184615305565b8082028115828204841417610e9057610e90615175565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526153db6080830184615305565b9695505050505050565b6000602082840312156153f757600080fd5b8151610b05816147e0565b60008261541157615411615389565b500490565b80820180821115610e9057610e90615175565b60006020828403121561543b57600080fd5b8151610b0581614655565b60006001600160a01b038086168352808516602084015250606060408301526128bc60608301846151f4565b634e487b7160e01b600052603160045260246000fd5b60008261549757615497615389565b500690565b8181036000831280158383131683831282161715612b4b57612b4b615175565b6000826154cb576154cb615389565b600160ff1b8214600019841416156154e5576154e5615175565b500590565b808201828112600083128015821682158216171561550a5761550a615175565b505092915050565b80820260008212600160ff1b8414161561552e5761552e615175565b8181058314821517610e9057610e9061517556fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220e703f148558377e544b78af30dce5dafb577aa1ce2965a6d94d367665eaeeea164736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
