{
  "_format": "hh-sol-artifact-1",
  "contractName": "BalancerV2PoolExiter",
  "sourceName": "contracts/liquidity/balancer/BalancerV2PoolExiter.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": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "TaskSlippageAboveMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSlippageAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "smartVault",
          "type": "address"
        }
      ],
      "name": "TaskSmartVaultPriceOracleNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskThresholdTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "TaskTimeLockActive",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "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": "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": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        }
      ],
      "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": "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": "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": "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": "connector",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "maxSlippage",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                }
              ],
              "internalType": "struct BalancerV2PoolExiter.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 BalancerV2PoolExiter.BalancerPoolExitConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "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": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61513c80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80637125590a11610160578063b187bd26116100d8578063d3feb6021161008c578063d86483e111610071578063d86483e1146106d5578063e6b5be98146106e8578063f9eaee0d146106fb57600080fd5b8063d3feb602146106af578063d45a76cf146106c257600080fd5b8063c267621e116100bd578063c267621e14610672578063c47590e414610683578063d09edf311461069657600080fd5b8063b187bd261461064c578063b96e422c1461066957600080fd5b80639eebe7cd1161012f578063a2c4564411610114578063a2c45644146105ac578063a3374177146105bf578063a5900c4d146105f257600080fd5b80639eebe7cd14610579578063a0c3774f1461059957600080fd5b80637125590a1461053857806383f3084f1461054b5780638456cb591461055e57806390333ba81461056657600080fd5b8063423a4b40116101f35780635064d83a116101c25780635670e2ce116101a75780635670e2ce146104a55780635ea54eee146104c05780636aacaad8146104ec57600080fd5b80635064d83a1461045a57806351a424b11461046d57600080fd5b8063423a4b40146103cd57806342d4693e146103e05780634a45a3a8146103fa5780634fd49efd1461042f57600080fd5b8063221a8c681161024a57806330eae5721161022f57806330eae5721461039f578063354a0808146103b25780633f4ba83a146103c557600080fd5b8063221a8c68146102e85780632384c32d1461038c57600080fd5b80630fe105e81461027c57806310188aef14610291578063119a5e96146102a457806321972384146102d5575b600080fd5b61028f61028a366004614321565b61070e565b005b61028f61029f36600461436f565b610747565b6102ac610774565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61028f6102e33660046144e8565b6107ab565b61035a6102f636600461436f565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102cc565b61028f61039a3660046145ac565b61085b565b61028f6103ad366004614601565b61088a565b61028f6103c0366004614932565b6108c7565b61028f6109ed565b61028f6103db3660046145ac565b610a74565b600f546103ed9060ff1681565b6040516102cc9190614a77565b6104217f9d7f88b3941d7529defb95ed2c058b56dfd6d5b0e87ec5dd03dbc0c62f023c7c81565b6040519081526020016102cc565b600154610442906001600160a01b031681565b6040516001600160a01b0390911681526020016102cc565b61028f610468366004614a9f565b610aa3565b61048061047b36600461436f565b610c29565b604080516001600160a01b0390941684526020840192909252908201526060016102cc565b600254600354604080519283526020830191909152016102cc565b6006546007546008546009546040805194855260208501939093529183015260608201526080016102cc565b61035a6040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61028f610546366004614ad4565b610c52565b601c54610442906001600160a01b031681565b61028f610c7d565b61028f610574366004614a9f565b610cef565b61042161058736600461436f565b601e6020526000908152604090205481565b6104216105a736600461436f565b610d22565b61028f6105ba366004614af6565b610db9565b610480604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61048061060036600461436f565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546106599060ff1681565b60405190151581526020016102cc565b610421601d5481565b6001546001600160a01b0316610442565b61028f610691366004614b0f565b610de2565b600054610442906201000090046001600160a01b031681565b61028f6106bd366004614a9f565b610e0d565b61035a6106d036600461436f565b610e3a565b6104216106e336600461436f565b610ea9565b61028f6106f6366004614b3b565b610ed9565b61065961070936600461436f565b610f08565b61071d8460ff16848484610f4a565b610734336000356001600160e01b03191683610ff5565b6107408585858561103c565b5050505050565b610750816112e1565b610767336000356001600160e01b03191683610ff5565b610770826112f5565b5050565b600a5460009081908190819060ff16600281111561079457610794614a61565b600b54600c54600e54935093509350935090919293565b6107c1336000356001600160e01b03191661138c565b80518251146107fc576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156108565761084483828151811061081d5761081d614b6d565b602002602001015183838151811061083757610837614b6d565b60200260200101516113a8565b8061084e81614b99565b9150506107ff565b505050565b61086784848484611452565b61087e336000356001600160e01b03191683610ff5565b610740858585856114bb565b6108a781600181111561089f5761089f614a61565b60ff16611574565b6108be336000356001600160e01b03191683610ff5565b610770826115bb565b600054610100900460ff16158080156108e75750600054600160ff909116105b806109015750303b158015610901575060005460ff166001145b6109785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff19166001179055801561099b576000805461ff0019166101001790555b6109a482611618565b8015610770576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610a03336000356001600160e01b03191661138c565b60045460ff16610a3f576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610a8084848484611452565b610a97336000356001600160e01b03191683610ff5565b6107408585858561168a565b610aae83838361174a565b610ac5336000356001600160e01b03191683610ff5565b82600003610ad957610ad684610d22565b92505b610ae48484846117dc565b600080610af2868686611898565b9150915060006358d74d9460e01b87878585604051602401610b179493929190614bed565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610bb19216908690600401614ca4565b6000604051808303816000875af1158015610bd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf89190810190614cc6565b9050600081806020019051810190610c109190614db5565b9050610c1e89898784611bda565b505050505050505050565b600080600080610c3885611c3f565b805160208201516040909201519097919650945092505050565b610c5c8282611cca565b610c73336000356001600160e01b03191683610ff5565b6108568383611d36565b610c93336000356001600160e01b03191661138c565b60045460ff1615610cb75760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610cfa83838361174a565b610d11336000356001600160e01b03191683610ff5565b610d1c848484611db9565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db39190614dea565b92915050565b610dc281611574565b610dd9336000356001600160e01b03191683610ff5565b61077082611e0f565b610dec8282611e6d565b610e03336000356001600160e01b03191683610ff5565b6108568383611eca565b610e1883838361174a565b610e2f336000356001600160e01b03191683610ff5565b610d1c848484611f67565b600080600080600080610e4c87611fc3565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152601e60205260408120548015610ece5780610ed2565b601d545b9392505050565b610ee584848484610f4a565b610efc336000356001600160e01b03191683610ff5565b61074085858585611ff7565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610f3e57610f3e614a61565b14610db3578015610ed2565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610f8157610f81614b6d565b6020026020010181815250508381600181518110610fa157610fa1614b6d565b6020026020010181815250508281600281518110610fc157610fc1614b6d565b6020026020010181815250508181600381518110610fe157610fe1614b6d565b602002602001018181525050949350505050565b611000838383612092565b610856578282826040517f960c80da00000000000000000000000000000000000000000000000000000000815260040161096f93929190614e03565b60ff84166110ed5760008111806110535750600082115b156110e857826000036110855760405163bea499cb60e01b815260ff851660048201526024810184905260440161096f565b80158061109157508281115b156110bb57604051639e12fccf60e01b815260ff851660048201526024810182905260440161096f565b816000036110e857604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b61124a565b8260000361111a5760405163bea499cb60e01b815260ff851660048201526024810184905260440161096f565b801580611132575061112f6224ea0084614e35565b81115b1561115c57604051639e12fccf60e01b815260ff851660048201526024810182905260440161096f565b8160000361118957604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b60001960ff8516016111cb57601c6111a083612130565b11156110e857604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b60011960ff851601611213576111e082612147565b6111e983612130565b146110e857604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff8516600482015260240161096f565b8360ff16600281111561125f5761125f614a61565b600a805460ff1916600183600281111561127b5761127b614a61565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610db3826001600160a01b0316611574565b6001600160a01b038116611335576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526107709083908390610ff5565b6001600160a01b0382166113e8576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806113fd576113f860108361216a565b611408565b61140860108361217f565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611446911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061149257611492614b6d565b602002602001018181525050836001600160a01b031681600181518110610fa157610fa1614b6d565b6001600160a01b0384166114fb576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061151f90848484612194565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106115aa576115aa614b6d565b602002602001018181525050919050565b600f805482919060ff1916600183818111156115d9576115d9614a61565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161160d9190614a77565b60405180910390a150565b600054610100900460ff166116715760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b61167e8160600151612271565b61168781612327565b50565b6001600160a01b0384166116ca576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206116ee90848484612406565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e1448848460405161173c929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b03168160008151811061178957611789614b6d565b60200260200101818152505082816001815181106117a9576117a9614b6d565b60200260200101818152505081816002815181106117c9576117c9614b6d565b6020026020010181815250509392505050565b6117e68383612572565b6001600160a01b03831661180d57604051636070789160e11b815260040160405180910390fd5b81600003611847576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061185284610ea9565b905080821115610d1c576040517fb56ce449000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161096f565b6060806000856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190614dea565b9050600061190d86836125b8565b90506000876001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119739190614dea565b90506000601c60009054906101000a90046001600160a01b03166001600160a01b03166310c0a1576040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ee9190614e4c565b9050600080826001600160a01b031663f94d4668856040518263ffffffff1660e01b8152600401611a2191815260200190565b600060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a669190810190614e69565b5091509150815167ffffffffffffffff811115611a8557611a8561438c565b604051908082528060200260200182016040528015611aae578160200160208202803683370190505b509750815167ffffffffffffffff811115611acb57611acb61438c565b604051908082528060200260200182016040528015611af4578160200160208202803683370190505b50965060005b8251811015611bcb57828181518110611b1557611b15614b6d565b6020026020010151898281518110611b2f57611b2f614b6d565b60200260200101906001600160a01b031690816001600160a01b0316815250506000611b7d87848481518110611b6757611b67614b6d565b602002602001015161264890919063ffffffff16565b9050611b9b611b948c670de0b6b3a7640000614f37565b8290612648565b898381518110611bad57611bad614b6d565b60209081029190910101525080611bc381614b99565b915050611afa565b50505050505050935093915050565b60005b8251811015611c3457611c22838281518110611bfb57611bfb614b6d565b6020026020010151838381518110611c1557611c15614b6d565b60200260200101516126a2565b80611c2c81614b99565b915050611bdd565b50610d1c8484612728565b611c6c604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c955780611c98565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611d0157611d01614b6d565b6020026020010181815250508160001c81600181518110611d2457611d24614b6d565b60200260200101818152505092915050565b8082148015611d4457508115155b15611d7e576040517f0fb49edb0000000000000000000000000000000000000000000000000000000081526004810183905260240161096f565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611dc66016848484612406565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611e385760405163c2b0b62d60e01b815260040160405180910390fd5b601d8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf89060200161160d565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611eaa57611eaa614b6d565b6020026020010181815250508181600181518110611d2457611d24614b6d565b6001600160a01b038216611ef157604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611f1a5760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152601e602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3906114469084815260200190565b611f746012848484612194565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611fee5780610ed2565b60169392505050565b670de0b6b3a7640000811115612039576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016112d3565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906120e7908790309088908890600401614f4a565b602060405180830381865afa158015612104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121289190614f90565b949350505050565b60006121286121426201518084614fc3565b612750565b6000808061215b6121426201518086614fc3565b509150915061212882826127ec565b6000610ed2836001600160a01b038416612872565b6000610ed2836001600160a01b03841661296c565b60006001600160a01b0384161580156121ab575082155b80156121b5575081155b905060006001600160a01b038516158015906121d957508215806121d95750838310155b9050811580156121e7575080155b15612237576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044810184905260640161096f565b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166122ca5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b80516122d5906129bb565b6122dd612a8b565b6122ea8160200151612aee565b6122f78160400151612b50565b6123048160600151612bb2565b6123118160800151612c14565b61231e8160a00151612c76565b61168781612cd8565b600054610100900460ff166123805760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b805161238b906112f5565b6123988160200151611e0f565b60005b816040015151811015610770576123f4826040015182815181106123c1576123c1614b6d565b602002602001015160000151836040015183815181106123e3576123e3614b6d565b602002602001015160200151611eca565b806123fe81614b99565b91505061239b565b60006001600160a01b03841615801561241d575082155b8015612427575081155b905060006001600160a01b038516158015906124435750600084115b801561244f5750600083115b90508115801561245d575080155b156124ad576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044810184905260640161096f565b600386018390556001860184905581156124d4576000600287018190556004870155612540565b85600401546000036124fb57600060028701556124f18342614fd7565b6004870155612540565b85546001600160a01b03868116911614612540578554600090612527906001600160a01b031687612d31565b60028801549091506125399082612648565b6002880155505b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0393909316929092179092555050565b61257c8282612d3d565b6125868282612d47565b6125908282612d6b565b61259a8282612e57565b6125a48282613046565b6125ae8282613090565b610770828261317d565b6000816000036125db5760405163b8a2f92160e01b815260040160405180910390fd5b826000036125eb57506000610db3565b670de0b6b3a76400008381029084828161260757612607614fad565b04146126305760405163753da4f360e11b8152600481018590526024810182905260440161096f565b82818161263f5761263f614fad565b04949350505050565b6000828202831580159061266b57508284828161266757612667614fad565b0414155b1561269357604051637472527d60e11b8152600481018590526024810184905260440161096f565b670de0b6b3a76400008161263f565b60035415610770576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b15801561270c57600080fd5b505af1158015612720573d6000803e3d6000fd5b505050505050565b6127328282613293565b61273c8282613335565b6127468282613357565b6107708282613596565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816127ad576127ad614fad565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806127fd5750816003145b806128085750816005145b806128135750816007145b8061281e5750816008145b80612829575081600a145b80612834575081600c145b156128415750601f610db3565b816002146128515750601e610db3565b61285a836135c3565b61286557601c612868565b601d5b60ff169392505050565b6000818152600183016020526040812054801561295b576000612896600183614f37565b85549091506000906128aa90600190614f37565b905081811461290f5760008660000182815481106128ca576128ca614b6d565b90600052602060002001549050808760000184815481106128ed576128ed614b6d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061292057612920614fea565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610db3565b6000915050610db3565b5092915050565b60008181526001830160205260408120546129b357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610db3565b506000610db3565b600054610100900460ff16612a145760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b612a8281600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7d9190614e4c565b6135ff565b61168781613661565b600054610100900460ff16612ae45760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b612aec6136fc565b565b600054610100900460ff16612b475760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b61168781613755565b600054610100900460ff16612ba95760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816137ca565b600054610100900460ff16612c0b5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b6116878161383f565b600054610100900460ff16612c6d5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816138ed565b600054610100900460ff16612ccf5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816139cb565b600054610100900460ff166116875760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b6000610ed28383613aa9565b6107708282613ca8565b60045460ff16156107705760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580612daa575081513a11155b905080612def5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a6004820152602481019190915260440161096f565b602082015115610d1c576000612e05483a614f37565b6020840151909150811115806127205760208401516040517f56e5387f00000000000000000000000000000000000000000000000000000000815261096f918491600401918252602082015260400190565b600a54600b54600c54600e5460ff9093169242821115612e935760405163013ce60b60e01b81524260048201526024810183905260440161096f565b6000846002811115612ea757612ea7614a61565b03612f605782600003612ebc57505050505050565b80600003612ed657612ece8342614fd7565b600d55612720565b6000612ee28342614f37565b90506000612ef08583614fc3565b90506000612efe8683614e35565b612f089084614f37565b905083811115612f345760405163013ce60b60e01b81524260048201526024810186905260440161096f565b85612f40836001614fd7565b612f4a9190614e35565b612f549086614fd7565b600d5550612720915050565b814210158015612f795750612f758183614fd7565b4211155b15612f8857612ece8284613cfb565b60006001856002811115612f9e57612f9e614a61565b14612fb157612fac42612147565b612fba565b612fba83612130565b90506000612fc88483613d93565b905080421015612ff45760405163013ce60b60e01b81524260048201526024810182905260440161096f565b60006130008483614fd7565b9050428110801561302d5760405163013ce60b60e01b81524260048201526024810183905260440161096f565b6130378388613cfb565b600d5550505050505050505050565b61304f82610f08565b610770576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161096f565b600061309b83611c3f565b80519091506001600160a01b03166130b257505050565b6000836001600160a01b031682600001516001600160a01b0316146130ee576130e96130e2858460000151612d31565b8490612648565b6130f0565b825b9050600082602001518210158015613118575060408301511580613118575082604001518211155b905080610740578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b039093166004840152602483018590526044830191909152606482015260840161096f565b600061318883611fc3565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506131d757505050565b6000836001600160a01b031682600001516001600160a01b03161461320c576132076130e2858460000151612d31565b61320e565b825b905060008260800151421061322457600061322a565b82604001515b6132349083614fd7565b9050826020015181111561074057825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216600483015260248201526044810182905260640161096f565b600061329e83611fc3565b80549091506001600160a01b03166132b557505050565b80546000906001600160a01b038581169116146132eb5781546132e6906130e29086906001600160a01b0316612d31565b6132ed565b825b905081600401544210613316576000600283015560038201546133109042614fd7565b60048301555b8082600201600082825461332a9190614fd7565b909155505050505050565b600d54600003613343575050565b61334e600d54613db2565b50506000600d55565b600554600003613393576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a6005546133cc9190614f37565b905060006133da3a83614e35565b905060008360400151600014806133f5575083604001518211155b90508061343f578184604001516040517faf258ef200000000000000000000000000000000000000000000000000000000815260040161096f929190918252602082015260400190565b60006005556060840151158015906134575750600085115b1561272057600061352a306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561349f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c39190614e4c565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135249190614e4c565b88612d31565b905060006135388483613de7565b905060006135468289613e59565b90508660600151811115610c1e5760608701516040517f0297747f00000000000000000000000000000000000000000000000000000000815261096f918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b60006135d0600483615000565b1580156135e657506135e3606483615000565b15155b80610db357506135f861019083615000565b1592915050565b600054610100900460ff166136585760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b61168781613ef0565b600054610100900460ff166136ba5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b80516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055602081015160408201516116879190611d36565b600054610100900460ff16612aec5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b600054610100900460ff166137ae5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b6116878160000151826020015183604001518460600151611ff7565b600054610100900460ff166138235760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816000015182602001518360400151846060015161103c565b600054610100900460ff166138985760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b80516138a3906115bb565b60005b816020015151811015610770576138db826020015182815181106138cc576138cc614b6d565b602002602001015160016113a8565b806138e581614b99565b9150506138a6565b600054610100900460ff166139465760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b805180516020820151604083015161395f929190611f67565b60005b8260200151518110156108565760008360200151828151811061398757613987614b6d565b602002602001015190506000816020015190506139b682600001518260000151836020015184604001516114bb565b505080806139c390614b99565b915050613962565b600054610100900460ff16613a245760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b8051805160208201516040830151613a3d929190611db9565b60005b82602001515181101561085657600083602001518281518110613a6557613a65614b6d565b60200260200101519050600081602001519050613a94826000015182600001518360200151846040015161168a565b50508080613aa190614b99565b915050613a40565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b239190614e4c565b90506001600160a01b038116613b74576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260240161096f565b6000613b7e613f89565b90508051600014613c0f57816001600160a01b031663355efdd9613ba187614009565b613baa87614009565b846040518463ffffffff1660e01b8152600401613bc993929190615014565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a9190614dea565b613c9f565b816001600160a01b031663ac41865a613c2787614009565b613c3087614009565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9f9190614dea565b95945050505050565b600254156107705760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb906084016126f2565b600080600080613d0a8661403d565b919450925090506000613d1d8684614fd7565b90506000613d2c600c83615000565b90506000613d3b600c84614fc3565b613d459087614fd7565b905060006002600a5460ff166002811115613d6257613d62614a61565b14613d6d5784613d77565b613d7782846127ec565b9050613d858a83858461405c565b9a9950505050505050505050565b6000806000613da14261403d565b5091509150613c9f8583838761405c565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161160d565b60008282028315801590613e0a575082848281613e0657613e06614fad565b0414155b15613e3257604051637472527d60e11b8152600481018590526024810184905260440161096f565b8015613e4f57670de0b6b3a7640000600019820104600101612128565b6000949350505050565b600081600003613e7c5760405163b8a2f92160e01b815260040160405180910390fd5b82600003613e8c57506000610db3565b670de0b6b3a764000083810290848281613ea857613ea8614fad565b0414613ed15760405163753da4f360e11b8152600481018590526024810182905260440161096f565b826001820381613ee357613ee3614fad565b0460010191505092915050565b600054610100900460ff16613f495760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60606000613f95614084565b905036811115613fb357505060408051600081526020810190915290565b8067ffffffffffffffff811115613fcc57613fcc61438c565b6040519080825280601f01601f191660200182016040528015613ff6576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146140355781610db3565b610db361409f565b6000808061404f620151808504612750565b9196909550909350915050565b6000613c9f84848461406d8961412b565b6140768a614149565b61407f8b614165565b614172565b600060243610156140955750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141269190614e4c565b905090565b60008061413b6201518084615000565b9050610ed2610e1082614fc3565b600080614158610e1084615000565b9050610ed2603c82614fc3565b6000610db3603c83615000565b600081614180603c85614e35565b61418c610e1087614e35565b6201518061419b8b8b8b6141ce565b6141a59190614e35565b6141af9190614fd7565b6141b99190614fd7565b6141c39190614fd7565b979650505050505050565b60006107b28410156141df57600080fd5b838383600062253d8c60046064600c6141f9600e88615040565b6142039190615060565b61420f8861132461508e565b614219919061508e565b6142239190615060565b61422e9060036150b6565b6142389190615060565b600c80614246600e88615040565b6142509190615060565b61425b90600c6150b6565b614266600288615040565b6142709190615040565b61427c9061016f6150b6565b6142869190615060565b6004600c614295600e89615040565b61429f9190615060565b6142ab896112c061508e565b6142b5919061508e565b6142c1906105b56150b6565b6142cb9190615060565b6142d7617d4b87615040565b6142e1919061508e565b6142eb919061508e565b6142f59190615040565b6142ff9190615040565b98975050505050505050565b803560ff8116811461431c57600080fd5b919050565b6000806000806080858703121561433757600080fd5b6143408561430b565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461168757600080fd5b60006020828403121561438157600080fd5b8135610ed28161435a565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156143c5576143c561438c565b60405290565b6040805190810167ffffffffffffffff811182821017156143c5576143c561438c565b60405160c0810167ffffffffffffffff811182821017156143c5576143c561438c565b604051601f8201601f1916810167ffffffffffffffff8111828210171561443a5761443a61438c565b604052919050565b600067ffffffffffffffff82111561445c5761445c61438c565b5060051b60200190565b600082601f83011261447757600080fd5b8135602061448c61448783614442565b614411565b82815260059290921b840181019181810190868411156144ab57600080fd5b8286015b848110156144cf5780356144c28161435a565b83529183019183016144af565b509695505050505050565b801515811461168757600080fd5b600080604083850312156144fb57600080fd5b823567ffffffffffffffff8082111561451357600080fd5b61451f86838701614466565b935060209150818501358181111561453657600080fd5b85019050601f8101861361454957600080fd5b803561455761448782614442565b81815260059190911b8201830190838101908883111561457657600080fd5b928401925b8284101561459d57833561458e816144da565b8252928401929084019061457b565b80955050505050509250929050565b600080600080608085870312156145c257600080fd5b84356145cd8161435a565b935060208501356145dd8161435a565b93969395505050506040820135916060013590565b80356002811061431c57600080fd5b60006020828403121561461357600080fd5b610ed2826145f2565b60006060828403121561462e57600080fd5b6040516060810181811067ffffffffffffffff821117156146515761465161438c565b60405290508082356146628161435a565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561469357600080fd5b61469b6143a2565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156146d757600080fd5b6146df6143a2565b90506146ea8261430b565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561472257600080fd5b61472a6143cb565b9050614735826145f2565b8152602082013567ffffffffffffffff81111561475157600080fd5b61475d84828501614466565b60208301525092915050565b60006080828403121561477b57600080fd5b6147836143cb565b905081356147908161435a565b815261479f836020840161461c565b602082015292915050565b600060808083850312156147bd57600080fd5b6147c56143cb565b91506147d1848461461c565b8252606083013567ffffffffffffffff8111156147ed57600080fd5b8301601f810185136147fe57600080fd5b8035602061480e61448783614442565b82815260079290921b8301810191818101908884111561482d57600080fd5b938201935b83851015614853576148448986614769565b82529385019390820190614832565b808388015250505050505092915050565b60006101c0828403121561487757600080fd5b61487f6143ee565b905061488b838361461c565b815261489a8360608401614681565b60208201526148ac8360e084016146c5565b604082015261016082013567ffffffffffffffff808211156148cd57600080fd5b6148d985838601614710565b60608401526101808401359150808211156148f357600080fd5b6148ff858386016147aa565b60808401526101a084013591508082111561491957600080fd5b50614926848285016147aa565b60a08301525092915050565b6000602080838503121561494557600080fd5b823567ffffffffffffffff8082111561495d57600080fd5b908401906080828703121561497157600080fd5b6149796143a2565b82356149848161435a565b81528284013584820152604080840135838111156149a157600080fd5b8401601f810189136149b257600080fd5b80356149c061448782614442565b81815260069190911b8201870190878101908b8311156149df57600080fd5b928801925b82841015614a285784848d0312156149fc5760008081fd5b614a046143cb565b8435614a0f8161435a565b8152848a01358a820152825292840192908801906149e4565b808587015250505050506060830135935081841115614a4657600080fd5b614a5287858501614864565b60608201529695505050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614a9957634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614ab457600080fd5b8335614abf8161435a565b95602085013595506040909401359392505050565b60008060408385031215614ae757600080fd5b50508035926020909101359150565b600060208284031215614b0857600080fd5b5035919050565b60008060408385031215614b2257600080fd5b8235614b2d8161435a565b946020939093013593505050565b60008060008060808587031215614b5157600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614bab57614bab614b83565b5060010190565b600081518084526020808501945080840160005b83811015614be257815187529582019590820190600101614bc6565b509495945050505050565b6000608082016001600160a01b038088168452602087818601526080604086015282875180855260a087019150828901945060005b81811015614c40578551851683529483019491830191600101614c22565b50508581036060870152613d858188614bb2565b60005b83811015614c6f578181015183820152602001614c57565b50506000910152565b60008151808452614c90816020860160208601614c54565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006121286040830184614c78565b600060208284031215614cd857600080fd5b815167ffffffffffffffff80821115614cf057600080fd5b818401915084601f830112614d0457600080fd5b815181811115614d1657614d1661438c565b614d29601f8201601f1916602001614411565b9150808252856020828501011115614d4057600080fd5b614d51816020840160208601614c54565b50949350505050565b600082601f830112614d6b57600080fd5b81516020614d7b61448783614442565b82815260059290921b84018101918181019086841115614d9a57600080fd5b8286015b848110156144cf5780518352918301918301614d9e565b600060208284031215614dc757600080fd5b815167ffffffffffffffff811115614dde57600080fd5b61212884828501614d5a565b600060208284031215614dfc57600080fd5b5051919050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000613c9f6060830184614bb2565b8082028115828204841417610db357610db3614b83565b600060208284031215614e5e57600080fd5b8151610ed28161435a565b600080600060608486031215614e7e57600080fd5b835167ffffffffffffffff80821115614e9657600080fd5b818601915086601f830112614eaa57600080fd5b81516020614eba61448783614442565b82815260059290921b8401810191818101908a841115614ed957600080fd5b948201945b83861015614f00578551614ef18161435a565b82529482019490820190614ede565b91890151919750909350505080821115614f1957600080fd5b50614f2686828701614d5a565b925050604084015190509250925092565b81810381811115610db357610db3614b83565b60006001600160a01b0380871683528086166020840152506001600160e01b03198416604083015260806060830152614f866080830184614bb2565b9695505050505050565b600060208284031215614fa257600080fd5b8151610ed2816144da565b634e487b7160e01b600052601260045260246000fd5b600082614fd257614fd2614fad565b500490565b80820180821115610db357610db3614b83565b634e487b7160e01b600052603160045260246000fd5b60008261500f5761500f614fad565b500690565b60006001600160a01b03808616835280851660208401525060606040830152613c9f6060830184614c78565b818103600083128015838313168383128216171561296557612965614b83565b60008261506f5761506f614fad565b600160ff1b82146000198414161561508957615089614b83565b500590565b80820182811260008312801582168215821617156150ae576150ae614b83565b505092915050565b80820260008212600160ff1b841416156150d2576150d2614b83565b8181058314821517610db357610db3614b8356fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212206bf7150bfd399008ccb1aef524f00a6b0fcf1be9381166afcdd1e6498995462d64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102775760003560e01c80637125590a11610160578063b187bd26116100d8578063d3feb6021161008c578063d86483e111610071578063d86483e1146106d5578063e6b5be98146106e8578063f9eaee0d146106fb57600080fd5b8063d3feb602146106af578063d45a76cf146106c257600080fd5b8063c267621e116100bd578063c267621e14610672578063c47590e414610683578063d09edf311461069657600080fd5b8063b187bd261461064c578063b96e422c1461066957600080fd5b80639eebe7cd1161012f578063a2c4564411610114578063a2c45644146105ac578063a3374177146105bf578063a5900c4d146105f257600080fd5b80639eebe7cd14610579578063a0c3774f1461059957600080fd5b80637125590a1461053857806383f3084f1461054b5780638456cb591461055e57806390333ba81461056657600080fd5b8063423a4b40116101f35780635064d83a116101c25780635670e2ce116101a75780635670e2ce146104a55780635ea54eee146104c05780636aacaad8146104ec57600080fd5b80635064d83a1461045a57806351a424b11461046d57600080fd5b8063423a4b40146103cd57806342d4693e146103e05780634a45a3a8146103fa5780634fd49efd1461042f57600080fd5b8063221a8c681161024a57806330eae5721161022f57806330eae5721461039f578063354a0808146103b25780633f4ba83a146103c557600080fd5b8063221a8c68146102e85780632384c32d1461038c57600080fd5b80630fe105e81461027c57806310188aef14610291578063119a5e96146102a457806321972384146102d5575b600080fd5b61028f61028a366004614321565b61070e565b005b61028f61029f36600461436f565b610747565b6102ac610774565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61028f6102e33660046144e8565b6107ab565b61035a6102f636600461436f565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016102cc565b61028f61039a3660046145ac565b61085b565b61028f6103ad366004614601565b61088a565b61028f6103c0366004614932565b6108c7565b61028f6109ed565b61028f6103db3660046145ac565b610a74565b600f546103ed9060ff1681565b6040516102cc9190614a77565b6104217f9d7f88b3941d7529defb95ed2c058b56dfd6d5b0e87ec5dd03dbc0c62f023c7c81565b6040519081526020016102cc565b600154610442906001600160a01b031681565b6040516001600160a01b0390911681526020016102cc565b61028f610468366004614a9f565b610aa3565b61048061047b36600461436f565b610c29565b604080516001600160a01b0390941684526020840192909252908201526060016102cc565b600254600354604080519283526020830191909152016102cc565b6006546007546008546009546040805194855260208501939093529183015260608201526080016102cc565b61035a6040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61028f610546366004614ad4565b610c52565b601c54610442906001600160a01b031681565b61028f610c7d565b61028f610574366004614a9f565b610cef565b61042161058736600461436f565b601e6020526000908152604090205481565b6104216105a736600461436f565b610d22565b61028f6105ba366004614af6565b610db9565b610480604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61048061060036600461436f565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546106599060ff1681565b60405190151581526020016102cc565b610421601d5481565b6001546001600160a01b0316610442565b61028f610691366004614b0f565b610de2565b600054610442906201000090046001600160a01b031681565b61028f6106bd366004614a9f565b610e0d565b61035a6106d036600461436f565b610e3a565b6104216106e336600461436f565b610ea9565b61028f6106f6366004614b3b565b610ed9565b61065961070936600461436f565b610f08565b61071d8460ff16848484610f4a565b610734336000356001600160e01b03191683610ff5565b6107408585858561103c565b5050505050565b610750816112e1565b610767336000356001600160e01b03191683610ff5565b610770826112f5565b5050565b600a5460009081908190819060ff16600281111561079457610794614a61565b600b54600c54600e54935093509350935090919293565b6107c1336000356001600160e01b03191661138c565b80518251146107fc576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156108565761084483828151811061081d5761081d614b6d565b602002602001015183838151811061083757610837614b6d565b60200260200101516113a8565b8061084e81614b99565b9150506107ff565b505050565b61086784848484611452565b61087e336000356001600160e01b03191683610ff5565b610740858585856114bb565b6108a781600181111561089f5761089f614a61565b60ff16611574565b6108be336000356001600160e01b03191683610ff5565b610770826115bb565b600054610100900460ff16158080156108e75750600054600160ff909116105b806109015750303b158015610901575060005460ff166001145b6109785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff19166001179055801561099b576000805461ff0019166101001790555b6109a482611618565b8015610770576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610a03336000356001600160e01b03191661138c565b60045460ff16610a3f576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610a8084848484611452565b610a97336000356001600160e01b03191683610ff5565b6107408585858561168a565b610aae83838361174a565b610ac5336000356001600160e01b03191683610ff5565b82600003610ad957610ad684610d22565b92505b610ae48484846117dc565b600080610af2868686611898565b9150915060006358d74d9460e01b87878585604051602401610b179493929190614bed565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610bb19216908690600401614ca4565b6000604051808303816000875af1158015610bd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf89190810190614cc6565b9050600081806020019051810190610c109190614db5565b9050610c1e89898784611bda565b505050505050505050565b600080600080610c3885611c3f565b805160208201516040909201519097919650945092505050565b610c5c8282611cca565b610c73336000356001600160e01b03191683610ff5565b6108568383611d36565b610c93336000356001600160e01b03191661138c565b60045460ff1615610cb75760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610cfa83838361174a565b610d11336000356001600160e01b03191683610ff5565b610d1c848484611db9565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db39190614dea565b92915050565b610dc281611574565b610dd9336000356001600160e01b03191683610ff5565b61077082611e0f565b610dec8282611e6d565b610e03336000356001600160e01b03191683610ff5565b6108568383611eca565b610e1883838361174a565b610e2f336000356001600160e01b03191683610ff5565b610d1c848484611f67565b600080600080600080610e4c87611fc3565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b0381166000908152601e60205260408120548015610ece5780610ed2565b601d545b9392505050565b610ee584848484610f4a565b610efc336000356001600160e01b03191683610ff5565b61074085858585611ff7565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610f3e57610f3e614a61565b14610db3578015610ed2565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610f8157610f81614b6d565b6020026020010181815250508381600181518110610fa157610fa1614b6d565b6020026020010181815250508281600281518110610fc157610fc1614b6d565b6020026020010181815250508181600381518110610fe157610fe1614b6d565b602002602001018181525050949350505050565b611000838383612092565b610856578282826040517f960c80da00000000000000000000000000000000000000000000000000000000815260040161096f93929190614e03565b60ff84166110ed5760008111806110535750600082115b156110e857826000036110855760405163bea499cb60e01b815260ff851660048201526024810184905260440161096f565b80158061109157508281115b156110bb57604051639e12fccf60e01b815260ff851660048201526024810182905260440161096f565b816000036110e857604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b61124a565b8260000361111a5760405163bea499cb60e01b815260ff851660048201526024810184905260440161096f565b801580611132575061112f6224ea0084614e35565b81115b1561115c57604051639e12fccf60e01b815260ff851660048201526024810182905260440161096f565b8160000361118957604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b60001960ff8516016111cb57601c6111a083612130565b11156110e857604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b60011960ff851601611213576111e082612147565b6111e983612130565b146110e857604051635686bf5960e11b815260ff851660048201526024810183905260440161096f565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff8516600482015260240161096f565b8360ff16600281111561125f5761125f614a61565b600a805460ff1916600183600281111561127b5761127b614a61565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6060610db3826001600160a01b0316611574565b6001600160a01b038116611335576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b6040805160008152602081019091526107709083908390610ff5565b6001600160a01b0382166113e8576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806113fd576113f860108361216a565b611408565b61140860108361217f565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611446911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061149257611492614b6d565b602002602001018181525050836001600160a01b031681600181518110610fa157610fa1614b6d565b6001600160a01b0384166114fb576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061151f90848484612194565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106115aa576115aa614b6d565b602002602001018181525050919050565b600f805482919060ff1916600183818111156115d9576115d9614a61565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161160d9190614a77565b60405180910390a150565b600054610100900460ff166116715760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b61167e8160600151612271565b61168781612327565b50565b6001600160a01b0384166116ca576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206116ee90848484612406565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e1448848460405161173c929190918252602082015260400190565b60405180910390a350505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b03168160008151811061178957611789614b6d565b60200260200101818152505082816001815181106117a9576117a9614b6d565b60200260200101818152505081816002815181106117c9576117c9614b6d565b6020026020010181815250509392505050565b6117e68383612572565b6001600160a01b03831661180d57604051636070789160e11b815260040160405180910390fd5b81600003611847576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061185284610ea9565b905080821115610d1c576040517fb56ce449000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161096f565b6060806000856001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190614dea565b9050600061190d86836125b8565b90506000876001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119739190614dea565b90506000601c60009054906101000a90046001600160a01b03166001600160a01b03166310c0a1576040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ee9190614e4c565b9050600080826001600160a01b031663f94d4668856040518263ffffffff1660e01b8152600401611a2191815260200190565b600060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a669190810190614e69565b5091509150815167ffffffffffffffff811115611a8557611a8561438c565b604051908082528060200260200182016040528015611aae578160200160208202803683370190505b509750815167ffffffffffffffff811115611acb57611acb61438c565b604051908082528060200260200182016040528015611af4578160200160208202803683370190505b50965060005b8251811015611bcb57828181518110611b1557611b15614b6d565b6020026020010151898281518110611b2f57611b2f614b6d565b60200260200101906001600160a01b031690816001600160a01b0316815250506000611b7d87848481518110611b6757611b67614b6d565b602002602001015161264890919063ffffffff16565b9050611b9b611b948c670de0b6b3a7640000614f37565b8290612648565b898381518110611bad57611bad614b6d565b60209081029190910101525080611bc381614b99565b915050611afa565b50505050505050935093915050565b60005b8251811015611c3457611c22838281518110611bfb57611bfb614b6d565b6020026020010151838381518110611c1557611c15614b6d565b60200260200101516126a2565b80611c2c81614b99565b915050611bdd565b50610d1c8484612728565b611c6c604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611c955780611c98565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611d0157611d01614b6d565b6020026020010181815250508160001c81600181518110611d2457611d24614b6d565b60200260200101818152505092915050565b8082148015611d4457508115155b15611d7e576040517f0fb49edb0000000000000000000000000000000000000000000000000000000081526004810183905260240161096f565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611dc66016848484612406565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611e385760405163c2b0b62d60e01b815260040160405180910390fd5b601d8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf89060200161160d565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b031681600081518110611eaa57611eaa614b6d565b6020026020010181815250508181600181518110611d2457611d24614b6d565b6001600160a01b038216611ef157604051636070789160e11b815260040160405180910390fd5b670de0b6b3a7640000811115611f1a5760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152601e602052604090819020839055517f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3906114469084815260200190565b611f746012848484612194565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b602052604081208054919290911615611fee5780610ed2565b60169392505050565b670de0b6b3a7640000811115612039576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016112d3565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906120e7908790309088908890600401614f4a565b602060405180830381865afa158015612104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121289190614f90565b949350505050565b60006121286121426201518084614fc3565b612750565b6000808061215b6121426201518086614fc3565b509150915061212882826127ec565b6000610ed2836001600160a01b038416612872565b6000610ed2836001600160a01b03841661296c565b60006001600160a01b0384161580156121ab575082155b80156121b5575081155b905060006001600160a01b038516158015906121d957508215806121d95750838310155b9050811580156121e7575080155b15612237576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044810184905260640161096f565b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff166122ca5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b80516122d5906129bb565b6122dd612a8b565b6122ea8160200151612aee565b6122f78160400151612b50565b6123048160600151612bb2565b6123118160800151612c14565b61231e8160a00151612c76565b61168781612cd8565b600054610100900460ff166123805760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b805161238b906112f5565b6123988160200151611e0f565b60005b816040015151811015610770576123f4826040015182815181106123c1576123c1614b6d565b602002602001015160000151836040015183815181106123e3576123e3614b6d565b602002602001015160200151611eca565b806123fe81614b99565b91505061239b565b60006001600160a01b03841615801561241d575082155b8015612427575081155b905060006001600160a01b038516158015906124435750600084115b801561244f5750600083115b90508115801561245d575080155b156124ad576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044810184905260640161096f565b600386018390556001860184905581156124d4576000600287018190556004870155612540565b85600401546000036124fb57600060028701556124f18342614fd7565b6004870155612540565b85546001600160a01b03868116911614612540578554600090612527906001600160a01b031687612d31565b60028801549091506125399082612648565b6002880155505b5050835473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0393909316929092179092555050565b61257c8282612d3d565b6125868282612d47565b6125908282612d6b565b61259a8282612e57565b6125a48282613046565b6125ae8282613090565b610770828261317d565b6000816000036125db5760405163b8a2f92160e01b815260040160405180910390fd5b826000036125eb57506000610db3565b670de0b6b3a76400008381029084828161260757612607614fad565b04146126305760405163753da4f360e11b8152600481018590526024810182905260440161096f565b82818161263f5761263f614fad565b04949350505050565b6000828202831580159061266b57508284828161266757612667614fad565b0414155b1561269357604051637472527d60e11b8152600481018590526024810184905260440161096f565b670de0b6b3a76400008161263f565b60035415610770576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b15801561270c57600080fd5b505af1158015612720573d6000803e3d6000fd5b505050505050565b6127328282613293565b61273c8282613335565b6127468282613357565b6107708282613596565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816127ad576127ad614fad565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806127fd5750816003145b806128085750816005145b806128135750816007145b8061281e5750816008145b80612829575081600a145b80612834575081600c145b156128415750601f610db3565b816002146128515750601e610db3565b61285a836135c3565b61286557601c612868565b601d5b60ff169392505050565b6000818152600183016020526040812054801561295b576000612896600183614f37565b85549091506000906128aa90600190614f37565b905081811461290f5760008660000182815481106128ca576128ca614b6d565b90600052602060002001549050808760000184815481106128ed576128ed614b6d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061292057612920614fea565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610db3565b6000915050610db3565b5092915050565b60008181526001830160205260408120546129b357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610db3565b506000610db3565b600054610100900460ff16612a145760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b612a8281600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7d9190614e4c565b6135ff565b61168781613661565b600054610100900460ff16612ae45760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b612aec6136fc565b565b600054610100900460ff16612b475760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b61168781613755565b600054610100900460ff16612ba95760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816137ca565b600054610100900460ff16612c0b5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b6116878161383f565b600054610100900460ff16612c6d5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816138ed565b600054610100900460ff16612ccf5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816139cb565b600054610100900460ff166116875760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b6000610ed28383613aa9565b6107708282613ca8565b60045460ff16156107705760405163181e462560e31b815260040160405180910390fd5b5a600555604080516080810182526006548082526007546020830152600854928201929092526009546060820152906000901580612daa575081513a11155b905080612def5781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a6004820152602481019190915260440161096f565b602082015115610d1c576000612e05483a614f37565b6020840151909150811115806127205760208401516040517f56e5387f00000000000000000000000000000000000000000000000000000000815261096f918491600401918252602082015260400190565b600a54600b54600c54600e5460ff9093169242821115612e935760405163013ce60b60e01b81524260048201526024810183905260440161096f565b6000846002811115612ea757612ea7614a61565b03612f605782600003612ebc57505050505050565b80600003612ed657612ece8342614fd7565b600d55612720565b6000612ee28342614f37565b90506000612ef08583614fc3565b90506000612efe8683614e35565b612f089084614f37565b905083811115612f345760405163013ce60b60e01b81524260048201526024810186905260440161096f565b85612f40836001614fd7565b612f4a9190614e35565b612f549086614fd7565b600d5550612720915050565b814210158015612f795750612f758183614fd7565b4211155b15612f8857612ece8284613cfb565b60006001856002811115612f9e57612f9e614a61565b14612fb157612fac42612147565b612fba565b612fba83612130565b90506000612fc88483613d93565b905080421015612ff45760405163013ce60b60e01b81524260048201526024810182905260440161096f565b60006130008483614fd7565b9050428110801561302d5760405163013ce60b60e01b81524260048201526024810183905260440161096f565b6130378388613cfb565b600d5550505050505050505050565b61304f82610f08565b610770576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161096f565b600061309b83611c3f565b80519091506001600160a01b03166130b257505050565b6000836001600160a01b031682600001516001600160a01b0316146130ee576130e96130e2858460000151612d31565b8490612648565b6130f0565b825b9050600082602001518210158015613118575060408301511580613118575082604001518211155b905080610740578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b039093166004840152602483018590526044830191909152606482015260840161096f565b600061318883611fc3565b6040805160a08101825282546001600160a01b0316808252600184015460208301526002840154928201929092526003830154606082015260049092015460808301529091506131d757505050565b6000836001600160a01b031682600001516001600160a01b03161461320c576132076130e2858460000151612d31565b61320e565b825b905060008260800151421061322457600061322a565b82604001515b6132349083614fd7565b9050826020015181111561074057825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216600483015260248201526044810182905260640161096f565b600061329e83611fc3565b80549091506001600160a01b03166132b557505050565b80546000906001600160a01b038581169116146132eb5781546132e6906130e29086906001600160a01b0316612d31565b6132ed565b825b905081600401544210613316576000600283015560038201546133109042614fd7565b60048301555b8082600201600082825461332a9190614fd7565b909155505050505050565b600d54600003613343575050565b61334e600d54613db2565b50506000600d55565b600554600003613393576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a6005546133cc9190614f37565b905060006133da3a83614e35565b905060008360400151600014806133f5575083604001518211155b90508061343f578184604001516040517faf258ef200000000000000000000000000000000000000000000000000000000815260040161096f929190918252602082015260400190565b60006005556060840151158015906134575750600085115b1561272057600061352a306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561349f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c39190614e4c565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135249190614e4c565b88612d31565b905060006135388483613de7565b905060006135468289613e59565b90508660600151811115610c1e5760608701516040517f0297747f00000000000000000000000000000000000000000000000000000000815261096f918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b60006135d0600483615000565b1580156135e657506135e3606483615000565b15155b80610db357506135f861019083615000565b1592915050565b600054610100900460ff166136585760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b61168781613ef0565b600054610100900460ff166136ba5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b80516001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055602081015160408201516116879190611d36565b600054610100900460ff16612aec5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b600054610100900460ff166137ae5760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b6116878160000151826020015183604001518460600151611ff7565b600054610100900460ff166138235760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b611687816000015182602001518360400151846060015161103c565b600054610100900460ff166138985760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b80516138a3906115bb565b60005b816020015151811015610770576138db826020015182815181106138cc576138cc614b6d565b602002602001015160016113a8565b806138e581614b99565b9150506138a6565b600054610100900460ff166139465760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b805180516020820151604083015161395f929190611f67565b60005b8260200151518110156108565760008360200151828151811061398757613987614b6d565b602002602001015190506000816020015190506139b682600001518260000151836020015184604001516114bb565b505080806139c390614b99565b915050613962565b600054610100900460ff16613a245760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b8051805160208201516040830151613a3d929190611db9565b60005b82602001515181101561085657600083602001518281518110613a6557613a65614b6d565b60200260200101519050600081602001519050613a94826000015182600001518360200151846040015161168a565b50508080613aa190614b99565b915050613a40565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b239190614e4c565b90506001600160a01b038116613b74576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260240161096f565b6000613b7e613f89565b90508051600014613c0f57816001600160a01b031663355efdd9613ba187614009565b613baa87614009565b846040518463ffffffff1660e01b8152600401613bc993929190615014565b602060405180830381865afa158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a9190614dea565b613c9f565b816001600160a01b031663ac41865a613c2787614009565b613c3087614009565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9f9190614dea565b95945050505050565b600254156107705760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb906084016126f2565b600080600080613d0a8661403d565b919450925090506000613d1d8684614fd7565b90506000613d2c600c83615000565b90506000613d3b600c84614fc3565b613d459087614fd7565b905060006002600a5460ff166002811115613d6257613d62614a61565b14613d6d5784613d77565b613d7782846127ec565b9050613d858a83858461405c565b9a9950505050505050505050565b6000806000613da14261403d565b5091509150613c9f8583838761405c565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161160d565b60008282028315801590613e0a575082848281613e0657613e06614fad565b0414155b15613e3257604051637472527d60e11b8152600481018590526024810184905260440161096f565b8015613e4f57670de0b6b3a7640000600019820104600101612128565b6000949350505050565b600081600003613e7c5760405163b8a2f92160e01b815260040160405180910390fd5b82600003613e8c57506000610db3565b670de0b6b3a764000083810290848281613ea857613ea8614fad565b0414613ed15760405163753da4f360e11b8152600481018590526024810182905260440161096f565b826001820381613ee357613ee3614fad565b0460010191505092915050565b600054610100900460ff16613f495760405162461bcd60e51b815260206004820152602b60248201526000805160206150e783398151915260448201526a6e697469616c697a696e6760a81b606482015260840161096f565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60606000613f95614084565b905036811115613fb357505060408051600081526020810190915290565b8067ffffffffffffffff811115613fcc57613fcc61438c565b6040519080825280601f01601f191660200182016040528015613ff6576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316146140355781610db3565b610db361409f565b6000808061404f620151808504612750565b9196909550909350915050565b6000613c9f84848461406d8961412b565b6140768a614149565b61407f8b614165565b614172565b600060243610156140955750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141269190614e4c565b905090565b60008061413b6201518084615000565b9050610ed2610e1082614fc3565b600080614158610e1084615000565b9050610ed2603c82614fc3565b6000610db3603c83615000565b600081614180603c85614e35565b61418c610e1087614e35565b6201518061419b8b8b8b6141ce565b6141a59190614e35565b6141af9190614fd7565b6141b99190614fd7565b6141c39190614fd7565b979650505050505050565b60006107b28410156141df57600080fd5b838383600062253d8c60046064600c6141f9600e88615040565b6142039190615060565b61420f8861132461508e565b614219919061508e565b6142239190615060565b61422e9060036150b6565b6142389190615060565b600c80614246600e88615040565b6142509190615060565b61425b90600c6150b6565b614266600288615040565b6142709190615040565b61427c9061016f6150b6565b6142869190615060565b6004600c614295600e89615040565b61429f9190615060565b6142ab896112c061508e565b6142b5919061508e565b6142c1906105b56150b6565b6142cb9190615060565b6142d7617d4b87615040565b6142e1919061508e565b6142eb919061508e565b6142f59190615040565b6142ff9190615040565b98975050505050505050565b803560ff8116811461431c57600080fd5b919050565b6000806000806080858703121561433757600080fd5b6143408561430b565b966020860135965060408601359560600135945092505050565b6001600160a01b038116811461168757600080fd5b60006020828403121561438157600080fd5b8135610ed28161435a565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156143c5576143c561438c565b60405290565b6040805190810167ffffffffffffffff811182821017156143c5576143c561438c565b60405160c0810167ffffffffffffffff811182821017156143c5576143c561438c565b604051601f8201601f1916810167ffffffffffffffff8111828210171561443a5761443a61438c565b604052919050565b600067ffffffffffffffff82111561445c5761445c61438c565b5060051b60200190565b600082601f83011261447757600080fd5b8135602061448c61448783614442565b614411565b82815260059290921b840181019181810190868411156144ab57600080fd5b8286015b848110156144cf5780356144c28161435a565b83529183019183016144af565b509695505050505050565b801515811461168757600080fd5b600080604083850312156144fb57600080fd5b823567ffffffffffffffff8082111561451357600080fd5b61451f86838701614466565b935060209150818501358181111561453657600080fd5b85019050601f8101861361454957600080fd5b803561455761448782614442565b81815260059190911b8201830190838101908883111561457657600080fd5b928401925b8284101561459d57833561458e816144da565b8252928401929084019061457b565b80955050505050509250929050565b600080600080608085870312156145c257600080fd5b84356145cd8161435a565b935060208501356145dd8161435a565b93969395505050506040820135916060013590565b80356002811061431c57600080fd5b60006020828403121561461357600080fd5b610ed2826145f2565b60006060828403121561462e57600080fd5b6040516060810181811067ffffffffffffffff821117156146515761465161438c565b60405290508082356146628161435a565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561469357600080fd5b61469b6143a2565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156146d757600080fd5b6146df6143a2565b90506146ea8261430b565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561472257600080fd5b61472a6143cb565b9050614735826145f2565b8152602082013567ffffffffffffffff81111561475157600080fd5b61475d84828501614466565b60208301525092915050565b60006080828403121561477b57600080fd5b6147836143cb565b905081356147908161435a565b815261479f836020840161461c565b602082015292915050565b600060808083850312156147bd57600080fd5b6147c56143cb565b91506147d1848461461c565b8252606083013567ffffffffffffffff8111156147ed57600080fd5b8301601f810185136147fe57600080fd5b8035602061480e61448783614442565b82815260079290921b8301810191818101908884111561482d57600080fd5b938201935b83851015614853576148448986614769565b82529385019390820190614832565b808388015250505050505092915050565b60006101c0828403121561487757600080fd5b61487f6143ee565b905061488b838361461c565b815261489a8360608401614681565b60208201526148ac8360e084016146c5565b604082015261016082013567ffffffffffffffff808211156148cd57600080fd5b6148d985838601614710565b60608401526101808401359150808211156148f357600080fd5b6148ff858386016147aa565b60808401526101a084013591508082111561491957600080fd5b50614926848285016147aa565b60a08301525092915050565b6000602080838503121561494557600080fd5b823567ffffffffffffffff8082111561495d57600080fd5b908401906080828703121561497157600080fd5b6149796143a2565b82356149848161435a565b81528284013584820152604080840135838111156149a157600080fd5b8401601f810189136149b257600080fd5b80356149c061448782614442565b81815260069190911b8201870190878101908b8311156149df57600080fd5b928801925b82841015614a285784848d0312156149fc5760008081fd5b614a046143cb565b8435614a0f8161435a565b8152848a01358a820152825292840192908801906149e4565b808587015250505050506060830135935081841115614a4657600080fd5b614a5287858501614864565b60608201529695505050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614a9957634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614ab457600080fd5b8335614abf8161435a565b95602085013595506040909401359392505050565b60008060408385031215614ae757600080fd5b50508035926020909101359150565b600060208284031215614b0857600080fd5b5035919050565b60008060408385031215614b2257600080fd5b8235614b2d8161435a565b946020939093013593505050565b60008060008060808587031215614b5157600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614bab57614bab614b83565b5060010190565b600081518084526020808501945080840160005b83811015614be257815187529582019590820190600101614bc6565b509495945050505050565b6000608082016001600160a01b038088168452602087818601526080604086015282875180855260a087019150828901945060005b81811015614c40578551851683529483019491830191600101614c22565b50508581036060870152613d858188614bb2565b60005b83811015614c6f578181015183820152602001614c57565b50506000910152565b60008151808452614c90816020860160208601614c54565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082015260006121286040830184614c78565b600060208284031215614cd857600080fd5b815167ffffffffffffffff80821115614cf057600080fd5b818401915084601f830112614d0457600080fd5b815181811115614d1657614d1661438c565b614d29601f8201601f1916602001614411565b9150808252856020828501011115614d4057600080fd5b614d51816020840160208601614c54565b50949350505050565b600082601f830112614d6b57600080fd5b81516020614d7b61448783614442565b82815260059290921b84018101918181019086841115614d9a57600080fd5b8286015b848110156144cf5780518352918301918301614d9e565b600060208284031215614dc757600080fd5b815167ffffffffffffffff811115614dde57600080fd5b61212884828501614d5a565b600060208284031215614dfc57600080fd5b5051919050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000613c9f6060830184614bb2565b8082028115828204841417610db357610db3614b83565b600060208284031215614e5e57600080fd5b8151610ed28161435a565b600080600060608486031215614e7e57600080fd5b835167ffffffffffffffff80821115614e9657600080fd5b818601915086601f830112614eaa57600080fd5b81516020614eba61448783614442565b82815260059290921b8401810191818101908a841115614ed957600080fd5b948201945b83861015614f00578551614ef18161435a565b82529482019490820190614ede565b91890151919750909350505080821115614f1957600080fd5b50614f2686828701614d5a565b925050604084015190509250925092565b81810381811115610db357610db3614b83565b60006001600160a01b0380871683528086166020840152506001600160e01b03198416604083015260806060830152614f866080830184614bb2565b9695505050505050565b600060208284031215614fa257600080fd5b8151610ed2816144da565b634e487b7160e01b600052601260045260246000fd5b600082614fd257614fd2614fad565b500490565b80820180821115610db357610db3614b83565b634e487b7160e01b600052603160045260246000fd5b60008261500f5761500f614fad565b500690565b60006001600160a01b03808616835280851660208401525060606040830152613c9f6060830184614c78565b818103600083128015838313168383128216171561296557612965614b83565b60008261506f5761506f614fad565b600160ff1b82146000198414161561508957615089614b83565b500590565b80820182811260008312801582168215821617156150ae576150ae614b83565b505092915050565b80820260008212600160ff1b841416156150d2576150d2614b83565b8181058314821517610db357610db3614b8356fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212206bf7150bfd399008ccb1aef524f00a6b0fcf1be9381166afcdd1e6498995462d64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
