{
  "_format": "hh-sol-artifact-1",
  "contractName": "CollectorRelayerFunder",
  "sourceName": "contracts/relayer/CollectorRelayerFunder.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": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        }
      ],
      "name": "TaskDepositAboveMinThreshold",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "quota",
          "type": "uint256"
        }
      ],
      "name": "TaskDepositBelowUsedQuota",
      "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": [],
      "name": "TaskInitializerDisabled",
      "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": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskNewDepositAboveMaxThreshold",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        }
      ],
      "name": "TaskNewDepositBelowMinThreshold",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "TaskPreviousConnectorNotZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskRelayerZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "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": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenThresholdNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokensSourceZero",
      "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": "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": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerSet",
      "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": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokensSource",
          "type": "address"
        }
      ],
      "name": "TokensSourceSet",
      "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": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "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": "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": "tokensSource",
              "type": "address"
            },
            {
              "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 Collector.CollectConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokensSource",
              "type": "address"
            },
            {
              "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 Collector.CollectConfig",
          "name": "config",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "initializeCollectorRelayerFunder",
      "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": [],
      "name": "relayer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "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": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newRelayer",
          "type": "address"
        }
      ],
      "name": "setRelayer",
      "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": [
        {
          "internalType": "address",
          "name": "tokensSource",
          "type": "address"
        }
      ],
      "name": "setTokensSource",
      "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": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614b7a80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80637125590a1161012a578063b187bd26116100bd578063d09edf311161008c578063d45a76cf11610071578063d45a76cf1461063f578063e6b5be9814610652578063f9eaee0d1461066557600080fd5b8063d09edf3114610613578063d3feb6021461062c57600080fd5b8063b187bd26146105c8578063c15776bd146105e5578063c267621e146105f8578063c565d9711461060057600080fd5b8063993fd4de116100f9578063993fd4de14610515578063a0c3774f14610528578063a33741771461053b578063a5900c4d1461056e57600080fd5b80637125590a146104d45780638406c079146104e75780638456cb59146104fa57806390333ba81461050257600080fd5b8063423a4b40116101bd57806351a424b11161018c5780635ea54eee116101715780635ea54eee146104495780636548e9bc146104755780636aacaad81461048857600080fd5b806351a424b1146103f65780635670e2ce1461042e57600080fd5b8063423a4b401461036957806342d4693e1461037c5780634a45a3a8146103965780634fd49efd146103cb57600080fd5b80632384c32d116101f95780632384c32d1461032857806330eae5721461033b5780633bd9ef281461034e5780633f4ba83a1461036157600080fd5b80630fe105e81461022b578063119a5e96146102405780632197238414610271578063221a8c6814610284575b600080fd5b61023e610239366004614076565b610678565b005b6102486106b1565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61023e61027f366004614220565b6106e8565b6102f66102923660046142e4565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610268565b61023e610336366004614301565b610798565b61023e610349366004614356565b6107c7565b61023e61035c366004614371565b610808565b61023e6108da565b61023e610377366004614301565b610961565b600f546103899060ff1681565b60405161026891906143b3565b6103bd7fcbce9983fcd5fc099294db3138f1660107f2bd5b23b9fa0002d7df1db9d854cb81565b604051908152602001610268565b6001546103de906001600160a01b031681565b6040516001600160a01b039091168152602001610268565b6104096104043660046142e4565b610990565b604080516001600160a01b039094168452602084019290925290820152606001610268565b60025460035460408051928352602083019190915201610268565b600654600754600854600954604080519485526020850193909352918301526060820152608001610268565b61023e6104833660046142e4565b6109b9565b6102f66040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61023e6104e23660046143db565b6109e2565b601c546103de906001600160a01b031681565b61023e610a0d565b61023e6105103660046143fd565b610a7f565b61023e6105233660046142e4565b610ab2565b6103bd6105363660046142e4565b610adb565b610409604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61040961057c3660046142e4565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546105d59060ff1681565b6040519015158152602001610268565b61023e6105f3366004614788565b610aec565b6103de610c15565b61023e61060e3660046147da565b610c2e565b6000546103de906201000090046001600160a01b031681565b61023e61063a3660046143fd565b610c60565b6102f661064d3660046142e4565b610c8d565b61023e61066036600461480f565b610cfc565b6105d56106733660046142e4565b610d2b565b6106878460ff16848484610d76565b61069e336000356001600160e01b03191683610e21565b6106aa85858585610e68565b5050505050565b600a5460009081908190819060ff1660028111156106d1576106d161439d565b600b54600c54600e54935093509350935090919293565b6106fe336000356001600160e01b03191661110d565b8051825114610739576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107935761078183828151811061075a5761075a614841565b602002602001015183838151811061077457610774614841565b6020026020010151611129565b8061078b8161486d565b91505061073c565b505050565b6107a4848484846111d3565b6107bb336000356001600160e01b03191683610e21565b6106aa8585858561123c565b6107e48160018111156107dc576107dc61439d565b60ff166112f5565b6107fb336000356001600160e01b03191683610e21565b6108048261133c565b5050565b6108128282611399565b610829336000356001600160e01b03191683610e21565b8160000361083d5761083a83610adb565b91505b6108478383611408565b600154601d546040517fc8fea2fb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291821660248201526044810185905291169063c8fea2fb90606401600060405180830381600087803b1580156108b857600080fd5b505af11580156108cc573d6000803e3d6000fd5b50505050610793838361148c565b6108f0336000356001600160e01b03191661110d565b60045460ff1661092c576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b61096d848484846111d3565b610984336000356001600160e01b03191683610e21565b6106aa858585856114a0565b60008060008061099f85611560565b805160208201516040909201519097919650945092505050565b6109c2816115eb565b6109d9336000356001600160e01b03191683610e21565b610804826115ff565b6109ec8282611689565b610a03336000356001600160e01b03191683610e21565b61079383836116e3565b610a23336000356001600160e01b03191661110d565b60045460ff1615610a475760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610a8a8383836116ed565b610aa1336000356001600160e01b03191683610e21565b610aac84848461177f565b50505050565b610abb816115eb565b610ad2336000356001600160e01b03191683610e21565b610804826117d5565b6000610ae68261185f565b92915050565b600054610100900460ff1615808015610b0c5750600054600160ff909116105b80610b265750303b158015610b26575060005460ff166001145b610b9d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610bc0576000805461ff0019166101001790555b610bca8383611922565b8015610793576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b6000610c29601d546001600160a01b031690565b905090565b6040517f8d0ee58400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6b8383836116ed565b610c82336000356001600160e01b03191683610e21565b610aac8484846119b8565b600080600080600080610c9f87611a0c565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610d0884848484610d76565b610d1f336000356001600160e01b03191683610e21565b6106aa85858585611a40565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610d6157610d6161439d565b14610d6d578015610d6f565b805b9392505050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610dad57610dad614841565b6020026020010181815250508381600181518110610dcd57610dcd614841565b6020026020010181815250508281600281518110610ded57610ded614841565b6020026020010181815250508181600381518110610e0d57610e0d614841565b602002602001018181525050949350505050565b610e2c838383611adb565b610793578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b94939291906148c1565b60ff8416610f19576000811180610e7f5750600082115b15610f145782600003610eb15760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b94565b801580610ebd57508281115b15610ee757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b94565b81600003610f1457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b611076565b82600003610f465760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b94565b801580610f5e5750610f5b6224ea00846148f3565b81115b15610f8857604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b94565b81600003610fb557604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b60001960ff851601610ff757601c610fcc83611b79565b1115610f1457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b60011960ff85160161103f5761100c82611b90565b61101583611b79565b14610f1457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b94565b8360ff16600281111561108b5761108b61439d565b600a805460ff191660018360028111156110a7576110a761439d565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6040805160008152602081019091526108049083908390610e21565b6001600160a01b038216611169576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061117e57611179601083611bb3565b611189565b611189601083611bc8565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516111c7911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061121357611213614841565b602002602001018181525050836001600160a01b031681600181518110610dcd57610dcd614841565b6001600160a01b03841661127c576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206112a090848484611bdd565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061132b5761132b614841565b602002602001018181525050919050565b600f805482919060ff19166001838181111561135a5761135a61439d565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161138e91906143b3565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106113d6576113d6614841565b60200260200101818152505081816001815181106113f6576113f6614841565b60200260200101818152505092915050565b6114128282611cad565b6001600160a01b038216611452576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610804576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114968282611cf3565b6108048282611d79565b6001600160a01b0384166114e0576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b6020526040902061150490848484611da1565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611552929190918252602082015260400190565b60405180910390a350505050565b61158d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0380831660009081526015602052604090208054909116156115b657806115b9565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b6060610ae6826001600160a01b03166112f5565b6001600160a01b03811661163f576040517f24bdcc7d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517fb7041340e0c2a075059bf0488a71c767724be15dae8e737f8460007325e8d85790600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106116c0576116c0614841565b6020026020010181815250508160001c816001815181106113f6576113f6614841565b6108048282611f00565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b03168160008151811061172c5761172c614841565b602002602001018181525050828160018151811061174c5761174c614841565b602002602001018181525050818160028151811061176c5761176c614841565b6020026020010181815250509392505050565b61178c6016848484611da1565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6001600160a01b038116611815576040517f602a8a6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f1614e726b084b514c185bf6bca77bc3eb2242e5b905c019703431dd46a9bd03490600090a250565b60008061186b83611560565b80519091506001600160a01b03166118865750600092915050565b60006118958260000151611f45565b9050816020015181106118ac575060009392505050565b60006118bb8360000151611fe9565b90506000818385604001516118d0919061490a565b6118da919061491d565b905083600001516001600160a01b0316866001600160a01b0316146119165761191161190a85600001518861203a565b8290612046565b611918565b805b9695505050505050565b600054610100900460ff1661197b5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b611984826120b8565b6119ae6040518060400160405280836001600160a01b03168152602001846020015181525061212a565b610804828261218e565b6119c56012848484611bdd565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d34590606001610c08565b6001600160a01b038082166000908152601b602052604081208054919290911615611a375780610d6f565b60169392505050565b670de0b6b3a7640000811115611a82576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016110ff565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611b30908790309088908890600401614930565b602060405180830381865afa158015611b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b71919061496c565b949350505050565b6000611b71611b8b620151808461499f565b6121e7565b60008080611ba4611b8b620151808661499f565b5091509150611b718282612283565b6000610d6f836001600160a01b038416612309565b6000610d6f836001600160a01b038416612403565b60006001600160a01b038416158015611bf4575082155b8015611bfe575081155b905060006001600160a01b03851615801590611c225750821580611c225750838310155b905081158015611c30575080155b15611c80576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b94565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b611cb78282612452565b611cc1828261245c565b611ccb8282612480565b611cd5828261256c565b611cdf828261275b565b611ce982826127a5565b61080482826127af565b60035415610804576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015611d5d57600080fd5b505af1158015611d71573d6000803e3d6000fd5b505050505050565b611d8382826128cc565b611d8d828261296e565b611d978282612990565b6108048282612bda565b60006001600160a01b038416158015611db8575082155b8015611dc2575081155b905060006001600160a01b03851615801590611dde5750600084115b8015611dea5750600083115b905081158015611df8575080155b15611e48576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b94565b60038601839055600186018490558115611e6f576000600287018190556004870155611edb565b8560040154600003611e965760006002870155611e8c834261491d565b6004870155611edb565b85546001600160a01b03868116911614611edb578554600090611ec2906001600160a01b03168761203a565b6002880154909150611ed49082612c07565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b8115611f3b576040517fade7e16800000000000000000000000000000000000000000000000000000000815260048101839052602401610b94565b6108048282612c64565b601c546001546040517fd581ae930000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928392169063d581ae93906024015b602060405180830381865afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd391906149b3565b9050610d6f61190a611fe3612ce7565b8561203a565b601c546001546040517fd62912340000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928392169063d629123490602401611f92565b6000610d6f8383612d6e565b6000828202831580159061206957508284828161206557612065614989565b0414155b1561209157604051637472527d60e11b81526004810185905260248101849052604401610b94565b80156120ae57670de0b6b3a7640000600019820104600101611b71565b6000949350505050565b600054610100900460ff166121115760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61211e8160200151612f6d565b61212781613023565b50565b600054610100900460ff166121835760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051612127906115ff565b600054610100900460ff166108045760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161224457612244614989565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806122945750816003145b8061229f5750816005145b806122aa5750816007145b806122b55750816008145b806122c0575081600a145b806122cb575081600c145b156122d85750601f610ae6565b816002146122e85750601e610ae6565b6122f183613087565b6122fc57601c6122ff565b601d5b60ff169392505050565b600081815260018301602052604081205480156123f257600061232d60018361490a565b85549091506000906123419060019061490a565b90508181146123a657600086600001828154811061236157612361614841565b906000526020600020015490508087600001848154811061238457612384614841565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123b7576123b76149cc565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ae6565b6000915050610ae6565b5092915050565b600081815260018301602052604081205461244a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ae6565b506000610ae6565b61080482826130c3565b60045460ff16156108045760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806124bf575081513a11155b9050806125045781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b94565b602082015115610aac57600061251a483a61490a565b602084015190915081111580611d715760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b94918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156125a85760405163013ce60b60e01b815242600482015260248101839052604401610b94565b60008460028111156125bc576125bc61439d565b0361267557826000036125d157505050505050565b806000036125eb576125e3834261491d565b600d55611d71565b60006125f7834261490a565b90506000612605858361499f565b9050600061261386836148f3565b61261d908461490a565b9050838111156126495760405163013ce60b60e01b815242600482015260248101869052604401610b94565b8561265583600161491d565b61265f91906148f3565b612669908661491d565b600d5550611d71915050565b81421015801561268e575061268a818361491d565b4211155b1561269d576125e38284613116565b600060018560028111156126b3576126b361439d565b146126c6576126c142611b90565b6126cf565b6126cf83611b79565b905060006126dd84836131ae565b9050804210156127095760405163013ce60b60e01b815242600482015260248101829052604401610b94565b6000612715848361491d565b905042811080156127425760405163013ce60b60e01b815242600482015260248101839052604401610b94565b61274c8388613116565b600d5550505050505050505050565b61276482610d2b565b610804576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b94565b61080482826131cd565b60006127ba83611a0c565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061280957505050565b6000836001600160a01b031682600001516001600160a01b0316146128455761284061283985846000015161203a565b8490612c07565b612847565b825b905060008260800151421061285d576000612863565b82604001515b61286d908361491d565b905082602001518111156106aa57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b94565b60006128d783611a0c565b80549091506001600160a01b03166128ee57505050565b80546000906001600160a01b0385811691161461292457815461291f906128399086906001600160a01b031661203a565b612926565b825b90508160040154421061294f57600060028301556003820154612949904261491d565b60048301555b80826002016000828254612963919061491d565b909155505050505050565b600d5460000361297c575050565b612987600d546133c0565b50506000600d55565b6005546000036129cc576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612a05919061490a565b90506000612a133a836148f3565b90506000836040015160001480612a2e575083604001518211155b905080612a78578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b94929190918252602082015260400190565b6000600555606084015115801590612a905750600085115b15611d71576000612b63306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc91906149e2565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5d91906149e2565b8861203a565b90506000612b718483612046565b90506000612b7f82896133f5565b90508660600151811115612bcf5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b94918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b60008282028315801590612c2a575082848281612c2657612c26614989565b0414155b15612c5257604051637472527d60e11b81526004810185905260248101849052604401610b94565b670de0b6b3a764000090049392505050565b8082148015612c7257508115155b15612cac576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b94565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015612d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2991906149e2565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de891906149e2565b90506001600160a01b038116612e39576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b94565b6000612e436134be565b90508051600014612ed457816001600160a01b031663355efdd9612e668761353e565b612e6f8761353e565b846040518463ffffffff1660e01b8152600401612e8e939291906149ff565b602060405180830381865afa158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf91906149b3565b612f64565b816001600160a01b031663ac41865a612eec8761353e565b612ef58761353e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6491906149b3565b95945050505050565b600054610100900460ff16612fc65760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051612fd190613572565b612fd9613642565b612fe681602001516136a5565b612ff38160400151613707565b6130008160600151613769565b61300d81608001516137cb565b61301a8160a0015161382d565b6121278161388f565b600054610100900460ff1661307c5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051612127906117d5565b6000613094600483614a6a565b1580156130aa57506130a7606483614a6a565b15155b80610ae657506130bc61019083614a6a565b1592915050565b600254156108045760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401611d43565b600080600080613125866138e8565b919450925090506000613138868461491d565b90506000613147600c83614a6a565b90506000613156600c8461499f565b613160908761491d565b905060006002600a5460ff16600281111561317d5761317d61439d565b146131885784613192565b6131928284612283565b90506131a08a838584613907565b9a9950505050505050505050565b60008060006131bc426138e8565b5091509150612f6485838387613907565b60006131d883611560565b80519091506001600160a01b0316613227576040517f5d9cf5e90000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610b94565b600061324161323a85846000015161203a565b8490612046565b905060006132528360000151611f45565b602084015190915081108015906132a55760208401516040517ffa3fa77f000000000000000000000000000000000000000000000000000000008152610b94918491600401918252602082015260400190565b60006132b48560000151611fe9565b9050808411806132fa576040517fa121d4ff0000000000000000000000000000000000000000000000000000000081526004810186905260248101839052604401610b94565b600082613307868861491d565b613311919061490a565b6020880151909150811080156133635760208801516040517fe74f4059000000000000000000000000000000000000000000000000000000008152610b94918491600401918252602082015260400190565b6040880151821180156133b3578289604001516040517f8ba92fcc000000000000000000000000000000000000000000000000000000008152600401610b94929190918252602082015260400190565b5050505050505050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161138e565b600081600003613431576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361344157506000610ae6565b670de0b6b3a76400008381029084828161345d5761345d614989565b041461349f576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b94565b8260018203816134b1576134b1614989565b0460010191505092915050565b606060006134ca61392f565b9050368111156134e857505060408051600081526020810190915290565b8067ffffffffffffffff811115613501576135016140af565b6040519080825280601f01601f19166020018201604052801561352b576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161461356a5781610ae6565b610ae6612ce7565b600054610100900460ff166135cb5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61363981600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363491906149e2565b61394a565b612127816139ac565b600054610100900460ff1661369b5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b6136a3613a3a565b565b600054610100900460ff166136fe5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613a93565b600054610100900460ff166137605760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613b08565b600054610100900460ff166137c25760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613b7d565b600054610100900460ff166138245760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613c2b565b600054610100900460ff166138865760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613d09565b600054610100900460ff166121275760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b600080806138fa6201518085046121e7565b9196909550909350915050565b6000612f6484848461391889613de7565b6139218a613e05565b61392a8b613e21565b613e2e565b600060243610156139405750600090565b50601f1936013590565b600054610100900460ff166139a35760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613e8a565b600054610100900460ff16613a055760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051600180546001600160a01b0319166001600160a01b039092169190911790556020810151604082015161212791906116e3565b600054610100900460ff166136a35760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b600054610100900460ff16613aec5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b6121278160000151826020015183604001518460600151611a40565b600054610100900460ff16613b615760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b6121278160000151826020015183604001518460600151610e68565b600054610100900460ff16613bd65760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051613be19061133c565b60005b81602001515181101561080457613c1982602001518281518110613c0a57613c0a614841565b60200260200101516001611129565b80613c238161486d565b915050613be4565b600054610100900460ff16613c845760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051805160208201516040830151613c9d9291906119b8565b60005b82602001515181101561079357600083602001518281518110613cc557613cc5614841565b60200260200101519050600081602001519050613cf4826000015182600001518360200151846040015161123c565b50508080613d019061486d565b915050613ca0565b600054610100900460ff16613d625760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051805160208201516040830151613d7b92919061177f565b60005b82602001515181101561079357600083602001518281518110613da357613da3614841565b60200260200101519050600081602001519050613dd282600001518260000151836020015184604001516114a0565b50508080613ddf9061486d565b915050613d7e565b600080613df76201518084614a6a565b9050610d6f610e108261499f565b600080613e14610e1084614a6a565b9050610d6f603c8261499f565b6000610ae6603c83614a6a565b600081613e3c603c856148f3565b613e48610e10876148f3565b62015180613e578b8b8b613f23565b613e6191906148f3565b613e6b919061491d565b613e75919061491d565b613e7f919061491d565b979650505050505050565b600054610100900460ff16613ee35760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006107b2841015613f3457600080fd5b838383600062253d8c60046064600c613f4e600e88614a7e565b613f589190614a9e565b613f6488611324614acc565b613f6e9190614acc565b613f789190614a9e565b613f83906003614af4565b613f8d9190614a9e565b600c80613f9b600e88614a7e565b613fa59190614a9e565b613fb090600c614af4565b613fbb600288614a7e565b613fc59190614a7e565b613fd19061016f614af4565b613fdb9190614a9e565b6004600c613fea600e89614a7e565b613ff49190614a9e565b614000896112c0614acc565b61400a9190614acc565b614016906105b5614af4565b6140209190614a9e565b61402c617d4b87614a7e565b6140369190614acc565b6140409190614acc565b61404a9190614a7e565b6140549190614a7e565b98975050505050505050565b803560ff8116811461407157600080fd5b919050565b6000806000806080858703121561408c57600080fd5b61409585614060565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156140e8576140e86140af565b60405290565b6040805190810167ffffffffffffffff811182821017156140e8576140e86140af565b60405160c0810167ffffffffffffffff811182821017156140e8576140e86140af565b604051601f8201601f1916810167ffffffffffffffff8111828210171561415d5761415d6140af565b604052919050565b600067ffffffffffffffff82111561417f5761417f6140af565b5060051b60200190565b6001600160a01b038116811461212757600080fd5b600082601f8301126141af57600080fd5b813560206141c46141bf83614165565b614134565b82815260059290921b840181019181810190868411156141e357600080fd5b8286015b848110156142075780356141fa81614189565b83529183019183016141e7565b509695505050505050565b801515811461212757600080fd5b6000806040838503121561423357600080fd5b823567ffffffffffffffff8082111561424b57600080fd5b6142578683870161419e565b935060209150818501358181111561426e57600080fd5b85019050601f8101861361428157600080fd5b803561428f6141bf82614165565b81815260059190911b820183019083810190888311156142ae57600080fd5b928401925b828410156142d55783356142c681614212565b825292840192908401906142b3565b80955050505050509250929050565b6000602082840312156142f657600080fd5b8135610d6f81614189565b6000806000806080858703121561431757600080fd5b843561432281614189565b9350602085013561433281614189565b93969395505050506040820135916060013590565b80356002811061407157600080fd5b60006020828403121561436857600080fd5b610d6f82614347565b6000806040838503121561438457600080fd5b823561438f81614189565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106143d557634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156143ee57600080fd5b50508035926020909101359150565b60008060006060848603121561441257600080fd5b833561441d81614189565b95602085013595506040909401359392505050565b60006060828403121561444457600080fd5b6040516060810181811067ffffffffffffffff82111715614467576144676140af565b604052905080823561447881614189565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156144a957600080fd5b6144b16140c5565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156144ed57600080fd5b6144f56140c5565b905061450082614060565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561453857600080fd5b6145406140ee565b905061454b82614347565b8152602082013567ffffffffffffffff81111561456757600080fd5b6145738482850161419e565b60208301525092915050565b60006080828403121561459157600080fd5b6145996140ee565b905081356145a681614189565b81526145b58360208401614432565b602082015292915050565b600060808083850312156145d357600080fd5b6145db6140ee565b91506145e78484614432565b8252606083013567ffffffffffffffff81111561460357600080fd5b8301601f8101851361461457600080fd5b803560206146246141bf83614165565b82815260079290921b8301810191818101908884111561464357600080fd5b938201935b838510156146695761465a898661457f565b82529385019390820190614648565b808388015250505050505092915050565b60006040828403121561468c57600080fd5b6146946140ee565b905081356146a181614189565b8152602082013567ffffffffffffffff808211156146be57600080fd5b908301906101c082860312156146d357600080fd5b6146db614111565b6146e58684614432565b81526146f48660608501614497565b60208201526147068660e085016144db565b60408201526101608301358281111561471e57600080fd5b61472a87828601614526565b6060830152506101808301358281111561474357600080fd5b61474f878286016145c0565b6080830152506101a08301358281111561476857600080fd5b614774878286016145c0565b60a083015250602084015250909392505050565b6000806040838503121561479b57600080fd5b823567ffffffffffffffff8111156147b257600080fd5b6147be8582860161467a565b92505060208301356147cf81614189565b809150509250929050565b6000602082840312156147ec57600080fd5b813567ffffffffffffffff81111561480357600080fd5b611b718482850161467a565b6000806000806080858703121561482557600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161487f5761487f614857565b5060010190565b600081518084526020808501945080840160005b838110156148b65781518752958201959082019060010161489a565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000612f646060830184614886565b8082028115828204841417610ae657610ae6614857565b81810381811115610ae657610ae6614857565b80820180821115610ae657610ae6614857565b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526119186080830184614886565b60006020828403121561497e57600080fd5b8151610d6f81614212565b634e487b7160e01b600052601260045260246000fd5b6000826149ae576149ae614989565b500490565b6000602082840312156149c557600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156149f457600080fd5b8151610d6f81614189565b60006001600160a01b038086168352602081861681850152606060408501528451915081606085015260005b82811015614a4757858101820151858201608001528101614a2b565b50506000608082850101526080601f19601f830116840101915050949350505050565b600082614a7957614a79614989565b500690565b81810360008312801583831316838312821617156123fc576123fc614857565b600082614aad57614aad614989565b600160ff1b821460001984141615614ac757614ac7614857565b500590565b8082018281126000831280158216821582161715614aec57614aec614857565b505092915050565b80820260008212600160ff1b84141615614b1057614b10614857565b8181058314821517610ae657610ae661485756fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122048f9a762c80b605dc2b97b697bbd8374316f260d2eb397d835bb51ac461a3cf464736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102265760003560e01c80637125590a1161012a578063b187bd26116100bd578063d09edf311161008c578063d45a76cf11610071578063d45a76cf1461063f578063e6b5be9814610652578063f9eaee0d1461066557600080fd5b8063d09edf3114610613578063d3feb6021461062c57600080fd5b8063b187bd26146105c8578063c15776bd146105e5578063c267621e146105f8578063c565d9711461060057600080fd5b8063993fd4de116100f9578063993fd4de14610515578063a0c3774f14610528578063a33741771461053b578063a5900c4d1461056e57600080fd5b80637125590a146104d45780638406c079146104e75780638456cb59146104fa57806390333ba81461050257600080fd5b8063423a4b40116101bd57806351a424b11161018c5780635ea54eee116101715780635ea54eee146104495780636548e9bc146104755780636aacaad81461048857600080fd5b806351a424b1146103f65780635670e2ce1461042e57600080fd5b8063423a4b401461036957806342d4693e1461037c5780634a45a3a8146103965780634fd49efd146103cb57600080fd5b80632384c32d116101f95780632384c32d1461032857806330eae5721461033b5780633bd9ef281461034e5780633f4ba83a1461036157600080fd5b80630fe105e81461022b578063119a5e96146102405780632197238414610271578063221a8c6814610284575b600080fd5b61023e610239366004614076565b610678565b005b6102486106b1565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b61023e61027f366004614220565b6106e8565b6102f66102923660046142e4565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610268565b61023e610336366004614301565b610798565b61023e610349366004614356565b6107c7565b61023e61035c366004614371565b610808565b61023e6108da565b61023e610377366004614301565b610961565b600f546103899060ff1681565b60405161026891906143b3565b6103bd7fcbce9983fcd5fc099294db3138f1660107f2bd5b23b9fa0002d7df1db9d854cb81565b604051908152602001610268565b6001546103de906001600160a01b031681565b6040516001600160a01b039091168152602001610268565b6104096104043660046142e4565b610990565b604080516001600160a01b039094168452602084019290925290820152606001610268565b60025460035460408051928352602083019190915201610268565b600654600754600854600954604080519485526020850193909352918301526060820152608001610268565b61023e6104833660046142e4565b6109b9565b6102f66040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61023e6104e23660046143db565b6109e2565b601c546103de906001600160a01b031681565b61023e610a0d565b61023e6105103660046143fd565b610a7f565b61023e6105233660046142e4565b610ab2565b6103bd6105363660046142e4565b610adb565b610409604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61040961057c3660046142e4565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546105d59060ff1681565b6040519015158152602001610268565b61023e6105f3366004614788565b610aec565b6103de610c15565b61023e61060e3660046147da565b610c2e565b6000546103de906201000090046001600160a01b031681565b61023e61063a3660046143fd565b610c60565b6102f661064d3660046142e4565b610c8d565b61023e61066036600461480f565b610cfc565b6105d56106733660046142e4565b610d2b565b6106878460ff16848484610d76565b61069e336000356001600160e01b03191683610e21565b6106aa85858585610e68565b5050505050565b600a5460009081908190819060ff1660028111156106d1576106d161439d565b600b54600c54600e54935093509350935090919293565b6106fe336000356001600160e01b03191661110d565b8051825114610739576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107935761078183828151811061075a5761075a614841565b602002602001015183838151811061077457610774614841565b6020026020010151611129565b8061078b8161486d565b91505061073c565b505050565b6107a4848484846111d3565b6107bb336000356001600160e01b03191683610e21565b6106aa8585858561123c565b6107e48160018111156107dc576107dc61439d565b60ff166112f5565b6107fb336000356001600160e01b03191683610e21565b6108048261133c565b5050565b6108128282611399565b610829336000356001600160e01b03191683610e21565b8160000361083d5761083a83610adb565b91505b6108478383611408565b600154601d546040517fc8fea2fb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291821660248201526044810185905291169063c8fea2fb90606401600060405180830381600087803b1580156108b857600080fd5b505af11580156108cc573d6000803e3d6000fd5b50505050610793838361148c565b6108f0336000356001600160e01b03191661110d565b60045460ff1661092c576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b61096d848484846111d3565b610984336000356001600160e01b03191683610e21565b6106aa858585856114a0565b60008060008061099f85611560565b805160208201516040909201519097919650945092505050565b6109c2816115eb565b6109d9336000356001600160e01b03191683610e21565b610804826115ff565b6109ec8282611689565b610a03336000356001600160e01b03191683610e21565b61079383836116e3565b610a23336000356001600160e01b03191661110d565b60045460ff1615610a475760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610a8a8383836116ed565b610aa1336000356001600160e01b03191683610e21565b610aac84848461177f565b50505050565b610abb816115eb565b610ad2336000356001600160e01b03191683610e21565b610804826117d5565b6000610ae68261185f565b92915050565b600054610100900460ff1615808015610b0c5750600054600160ff909116105b80610b265750303b158015610b26575060005460ff166001145b610b9d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610bc0576000805461ff0019166101001790555b610bca8383611922565b8015610793576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b6000610c29601d546001600160a01b031690565b905090565b6040517f8d0ee58400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6b8383836116ed565b610c82336000356001600160e01b03191683610e21565b610aac8484846119b8565b600080600080600080610c9f87611a0c565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610d0884848484610d76565b610d1f336000356001600160e01b03191683610e21565b6106aa85858585611a40565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610d6157610d6161439d565b14610d6d578015610d6f565b805b9392505050565b60408051600480825260a08201909252606091602082016080803683370190505090508481600081518110610dad57610dad614841565b6020026020010181815250508381600181518110610dcd57610dcd614841565b6020026020010181815250508281600281518110610ded57610ded614841565b6020026020010181815250508181600381518110610e0d57610e0d614841565b602002602001018181525050949350505050565b610e2c838383611adb565b610793578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610b94939291906148c1565b60ff8416610f19576000811180610e7f5750600082115b15610f145782600003610eb15760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b94565b801580610ebd57508281115b15610ee757604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b94565b81600003610f1457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b611076565b82600003610f465760405163bea499cb60e01b815260ff8516600482015260248101849052604401610b94565b801580610f5e5750610f5b6224ea00846148f3565b81115b15610f8857604051639e12fccf60e01b815260ff8516600482015260248101829052604401610b94565b81600003610fb557604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b60001960ff851601610ff757601c610fcc83611b79565b1115610f1457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b60011960ff85160161103f5761100c82611b90565b61101583611b79565b14610f1457604051635686bf5960e11b815260ff8516600482015260248101839052604401610b94565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610b94565b8360ff16600281111561108b5761108b61439d565b600a805460ff191660018360028111156110a7576110a761439d565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b6040805160008152602081019091526108049083908390610e21565b6001600160a01b038216611169576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061117e57611179601083611bb3565b611189565b611189601083611bc8565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c826040516111c7911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061121357611213614841565b602002602001018181525050836001600160a01b031681600181518110610dcd57610dcd614841565b6001600160a01b03841661127c576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090206112a090848484611bdd565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b60408051600180825281830190925260609160208083019080368337019050509050818160008151811061132b5761132b614841565b602002602001018181525050919050565b600f805482919060ff19166001838181111561135a5761135a61439d565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a8160405161138e91906143b3565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106113d6576113d6614841565b60200260200101818152505081816001815181106113f6576113f6614841565b60200260200101818152505092915050565b6114128282611cad565b6001600160a01b038216611452576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610804576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114968282611cf3565b6108048282611d79565b6001600160a01b0384166114e0576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b6020526040902061150490848484611da1565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611552929190918252602082015260400190565b60405180910390a350505050565b61158d604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0380831660009081526015602052604090208054909116156115b657806115b9565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b6060610ae6826001600160a01b03166112f5565b6001600160a01b03811661163f576040517f24bdcc7d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517fb7041340e0c2a075059bf0488a71c767724be15dae8e737f8460007325e8d85790600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106116c0576116c0614841565b6020026020010181815250508160001c816001815181106113f6576113f6614841565b6108048282611f00565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b03168160008151811061172c5761172c614841565b602002602001018181525050828160018151811061174c5761174c614841565b602002602001018181525050818160028151811061176c5761176c614841565b6020026020010181815250509392505050565b61178c6016848484611da1565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b6001600160a01b038116611815576040517f602a8a6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383169081179091556040517f1614e726b084b514c185bf6bca77bc3eb2242e5b905c019703431dd46a9bd03490600090a250565b60008061186b83611560565b80519091506001600160a01b03166118865750600092915050565b60006118958260000151611f45565b9050816020015181106118ac575060009392505050565b60006118bb8360000151611fe9565b90506000818385604001516118d0919061490a565b6118da919061491d565b905083600001516001600160a01b0316866001600160a01b0316146119165761191161190a85600001518861203a565b8290612046565b611918565b805b9695505050505050565b600054610100900460ff1661197b5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b611984826120b8565b6119ae6040518060400160405280836001600160a01b03168152602001846020015181525061212a565b610804828261218e565b6119c56012848484611bdd565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d34590606001610c08565b6001600160a01b038082166000908152601b602052604081208054919290911615611a375780610d6f565b60169392505050565b670de0b6b3a7640000811115611a82576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016110ff565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611b30908790309088908890600401614930565b602060405180830381865afa158015611b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b71919061496c565b949350505050565b6000611b71611b8b620151808461499f565b6121e7565b60008080611ba4611b8b620151808661499f565b5091509150611b718282612283565b6000610d6f836001600160a01b038416612309565b6000610d6f836001600160a01b038416612403565b60006001600160a01b038416158015611bf4575082155b8015611bfe575081155b905060006001600160a01b03851615801590611c225750821580611c225750838310155b905081158015611c30575080155b15611c80576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b94565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b611cb78282612452565b611cc1828261245c565b611ccb8282612480565b611cd5828261256c565b611cdf828261275b565b611ce982826127a5565b61080482826127af565b60035415610804576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015611d5d57600080fd5b505af1158015611d71573d6000803e3d6000fd5b505050505050565b611d8382826128cc565b611d8d828261296e565b611d978282612990565b6108048282612bda565b60006001600160a01b038416158015611db8575082155b8015611dc2575081155b905060006001600160a01b03851615801590611dde5750600084115b8015611dea5750600083115b905081158015611df8575080155b15611e48576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610b94565b60038601839055600186018490558115611e6f576000600287018190556004870155611edb565b8560040154600003611e965760006002870155611e8c834261491d565b6004870155611edb565b85546001600160a01b03868116911614611edb578554600090611ec2906001600160a01b03168761203a565b6002880154909150611ed49082612c07565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b8115611f3b576040517fade7e16800000000000000000000000000000000000000000000000000000000815260048101839052602401610b94565b6108048282612c64565b601c546001546040517fd581ae930000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928392169063d581ae93906024015b602060405180830381865afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd391906149b3565b9050610d6f61190a611fe3612ce7565b8561203a565b601c546001546040517fd62912340000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928392169063d629123490602401611f92565b6000610d6f8383612d6e565b6000828202831580159061206957508284828161206557612065614989565b0414155b1561209157604051637472527d60e11b81526004810185905260248101849052604401610b94565b80156120ae57670de0b6b3a7640000600019820104600101611b71565b6000949350505050565b600054610100900460ff166121115760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61211e8160200151612f6d565b61212781613023565b50565b600054610100900460ff166121835760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051612127906115ff565b600054610100900460ff166108045760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161224457612244614989565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806122945750816003145b8061229f5750816005145b806122aa5750816007145b806122b55750816008145b806122c0575081600a145b806122cb575081600c145b156122d85750601f610ae6565b816002146122e85750601e610ae6565b6122f183613087565b6122fc57601c6122ff565b601d5b60ff169392505050565b600081815260018301602052604081205480156123f257600061232d60018361490a565b85549091506000906123419060019061490a565b90508181146123a657600086600001828154811061236157612361614841565b906000526020600020015490508087600001848154811061238457612384614841565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123b7576123b76149cc565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ae6565b6000915050610ae6565b5092915050565b600081815260018301602052604081205461244a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ae6565b506000610ae6565b61080482826130c3565b60045460ff16156108045760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806124bf575081513a11155b9050806125045781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610b94565b602082015115610aac57600061251a483a61490a565b602084015190915081111580611d715760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610b94918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156125a85760405163013ce60b60e01b815242600482015260248101839052604401610b94565b60008460028111156125bc576125bc61439d565b0361267557826000036125d157505050505050565b806000036125eb576125e3834261491d565b600d55611d71565b60006125f7834261490a565b90506000612605858361499f565b9050600061261386836148f3565b61261d908461490a565b9050838111156126495760405163013ce60b60e01b815242600482015260248101869052604401610b94565b8561265583600161491d565b61265f91906148f3565b612669908661491d565b600d5550611d71915050565b81421015801561268e575061268a818361491d565b4211155b1561269d576125e38284613116565b600060018560028111156126b3576126b361439d565b146126c6576126c142611b90565b6126cf565b6126cf83611b79565b905060006126dd84836131ae565b9050804210156127095760405163013ce60b60e01b815242600482015260248101829052604401610b94565b6000612715848361491d565b905042811080156127425760405163013ce60b60e01b815242600482015260248101839052604401610b94565b61274c8388613116565b600d5550505050505050505050565b61276482610d2b565b610804576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b94565b61080482826131cd565b60006127ba83611a0c565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061280957505050565b6000836001600160a01b031682600001516001600160a01b0316146128455761284061283985846000015161203a565b8490612c07565b612847565b825b905060008260800151421061285d576000612863565b82604001515b61286d908361491d565b905082602001518111156106aa57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610b94565b60006128d783611a0c565b80549091506001600160a01b03166128ee57505050565b80546000906001600160a01b0385811691161461292457815461291f906128399086906001600160a01b031661203a565b612926565b825b90508160040154421061294f57600060028301556003820154612949904261491d565b60048301555b80826002016000828254612963919061491d565b909155505050505050565b600d5460000361297c575050565b612987600d546133c0565b50506000600d55565b6005546000036129cc576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612a05919061490a565b90506000612a133a836148f3565b90506000836040015160001480612a2e575083604001518211155b905080612a78578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610b94929190918252602082015260400190565b6000600555606084015115801590612a905750600085115b15611d71576000612b63306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afc91906149e2565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5d91906149e2565b8861203a565b90506000612b718483612046565b90506000612b7f82896133f5565b90508660600151811115612bcf5760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610b94918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b60008282028315801590612c2a575082848281612c2657612c26614989565b0414155b15612c5257604051637472527d60e11b81526004810185905260248101849052604401610b94565b670de0b6b3a764000090049392505050565b8082148015612c7257508115155b15612cac576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610b94565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015612d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2991906149e2565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de891906149e2565b90506001600160a01b038116612e39576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b94565b6000612e436134be565b90508051600014612ed457816001600160a01b031663355efdd9612e668761353e565b612e6f8761353e565b846040518463ffffffff1660e01b8152600401612e8e939291906149ff565b602060405180830381865afa158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf91906149b3565b612f64565b816001600160a01b031663ac41865a612eec8761353e565b612ef58761353e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6491906149b3565b95945050505050565b600054610100900460ff16612fc65760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051612fd190613572565b612fd9613642565b612fe681602001516136a5565b612ff38160400151613707565b6130008160600151613769565b61300d81608001516137cb565b61301a8160a0015161382d565b6121278161388f565b600054610100900460ff1661307c5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051612127906117d5565b6000613094600483614a6a565b1580156130aa57506130a7606483614a6a565b15155b80610ae657506130bc61019083614a6a565b1592915050565b600254156108045760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401611d43565b600080600080613125866138e8565b919450925090506000613138868461491d565b90506000613147600c83614a6a565b90506000613156600c8461499f565b613160908761491d565b905060006002600a5460ff16600281111561317d5761317d61439d565b146131885784613192565b6131928284612283565b90506131a08a838584613907565b9a9950505050505050505050565b60008060006131bc426138e8565b5091509150612f6485838387613907565b60006131d883611560565b80519091506001600160a01b0316613227576040517f5d9cf5e90000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610b94565b600061324161323a85846000015161203a565b8490612046565b905060006132528360000151611f45565b602084015190915081108015906132a55760208401516040517ffa3fa77f000000000000000000000000000000000000000000000000000000008152610b94918491600401918252602082015260400190565b60006132b48560000151611fe9565b9050808411806132fa576040517fa121d4ff0000000000000000000000000000000000000000000000000000000081526004810186905260248101839052604401610b94565b600082613307868861491d565b613311919061490a565b6020880151909150811080156133635760208801516040517fe74f4059000000000000000000000000000000000000000000000000000000008152610b94918491600401918252602082015260400190565b6040880151821180156133b3578289604001516040517f8ba92fcc000000000000000000000000000000000000000000000000000000008152600401610b94929190918252602082015260400190565b5050505050505050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad0649060200161138e565b600081600003613431576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361344157506000610ae6565b670de0b6b3a76400008381029084828161345d5761345d614989565b041461349f576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610b94565b8260018203816134b1576134b1614989565b0460010191505092915050565b606060006134ca61392f565b9050368111156134e857505060408051600081526020810190915290565b8067ffffffffffffffff811115613501576135016140af565b6040519080825280601f01601f19166020018201604052801561352b576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161461356a5781610ae6565b610ae6612ce7565b600054610100900460ff166135cb5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61363981600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363491906149e2565b61394a565b612127816139ac565b600054610100900460ff1661369b5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b6136a3613a3a565b565b600054610100900460ff166136fe5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613a93565b600054610100900460ff166137605760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613b08565b600054610100900460ff166137c25760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613b7d565b600054610100900460ff166138245760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613c2b565b600054610100900460ff166138865760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613d09565b600054610100900460ff166121275760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b600080806138fa6201518085046121e7565b9196909550909350915050565b6000612f6484848461391889613de7565b6139218a613e05565b61392a8b613e21565b613e2e565b600060243610156139405750600090565b50601f1936013590565b600054610100900460ff166139a35760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b61212781613e8a565b600054610100900460ff16613a055760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051600180546001600160a01b0319166001600160a01b039092169190911790556020810151604082015161212791906116e3565b600054610100900460ff166136a35760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b600054610100900460ff16613aec5760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b6121278160000151826020015183604001518460600151611a40565b600054610100900460ff16613b615760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b6121278160000151826020015183604001518460600151610e68565b600054610100900460ff16613bd65760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051613be19061133c565b60005b81602001515181101561080457613c1982602001518281518110613c0a57613c0a614841565b60200260200101516001611129565b80613c238161486d565b915050613be4565b600054610100900460ff16613c845760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051805160208201516040830151613c9d9291906119b8565b60005b82602001515181101561079357600083602001518281518110613cc557613cc5614841565b60200260200101519050600081602001519050613cf4826000015182600001518360200151846040015161123c565b50508080613d019061486d565b915050613ca0565b600054610100900460ff16613d625760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b8051805160208201516040830151613d7b92919061177f565b60005b82602001515181101561079357600083602001518281518110613da357613da3614841565b60200260200101519050600081602001519050613dd282600001518260000151836020015184604001516114a0565b50508080613ddf9061486d565b915050613d7e565b600080613df76201518084614a6a565b9050610d6f610e108261499f565b600080613e14610e1084614a6a565b9050610d6f603c8261499f565b6000610ae6603c83614a6a565b600081613e3c603c856148f3565b613e48610e10876148f3565b62015180613e578b8b8b613f23565b613e6191906148f3565b613e6b919061491d565b613e75919061491d565b613e7f919061491d565b979650505050505050565b600054610100900460ff16613ee35760405162461bcd60e51b815260206004820152602b6024820152600080516020614b2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610b94565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006107b2841015613f3457600080fd5b838383600062253d8c60046064600c613f4e600e88614a7e565b613f589190614a9e565b613f6488611324614acc565b613f6e9190614acc565b613f789190614a9e565b613f83906003614af4565b613f8d9190614a9e565b600c80613f9b600e88614a7e565b613fa59190614a9e565b613fb090600c614af4565b613fbb600288614a7e565b613fc59190614a7e565b613fd19061016f614af4565b613fdb9190614a9e565b6004600c613fea600e89614a7e565b613ff49190614a9e565b614000896112c0614acc565b61400a9190614acc565b614016906105b5614af4565b6140209190614a9e565b61402c617d4b87614a7e565b6140369190614acc565b6140409190614acc565b61404a9190614a7e565b6140549190614a7e565b98975050505050505050565b803560ff8116811461407157600080fd5b919050565b6000806000806080858703121561408c57600080fd5b61409585614060565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156140e8576140e86140af565b60405290565b6040805190810167ffffffffffffffff811182821017156140e8576140e86140af565b60405160c0810167ffffffffffffffff811182821017156140e8576140e86140af565b604051601f8201601f1916810167ffffffffffffffff8111828210171561415d5761415d6140af565b604052919050565b600067ffffffffffffffff82111561417f5761417f6140af565b5060051b60200190565b6001600160a01b038116811461212757600080fd5b600082601f8301126141af57600080fd5b813560206141c46141bf83614165565b614134565b82815260059290921b840181019181810190868411156141e357600080fd5b8286015b848110156142075780356141fa81614189565b83529183019183016141e7565b509695505050505050565b801515811461212757600080fd5b6000806040838503121561423357600080fd5b823567ffffffffffffffff8082111561424b57600080fd5b6142578683870161419e565b935060209150818501358181111561426e57600080fd5b85019050601f8101861361428157600080fd5b803561428f6141bf82614165565b81815260059190911b820183019083810190888311156142ae57600080fd5b928401925b828410156142d55783356142c681614212565b825292840192908401906142b3565b80955050505050509250929050565b6000602082840312156142f657600080fd5b8135610d6f81614189565b6000806000806080858703121561431757600080fd5b843561432281614189565b9350602085013561433281614189565b93969395505050506040820135916060013590565b80356002811061407157600080fd5b60006020828403121561436857600080fd5b610d6f82614347565b6000806040838503121561438457600080fd5b823561438f81614189565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106143d557634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156143ee57600080fd5b50508035926020909101359150565b60008060006060848603121561441257600080fd5b833561441d81614189565b95602085013595506040909401359392505050565b60006060828403121561444457600080fd5b6040516060810181811067ffffffffffffffff82111715614467576144676140af565b604052905080823561447881614189565b8082525060208301356020820152604083013560408201525092915050565b6000608082840312156144a957600080fd5b6144b16140c5565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156144ed57600080fd5b6144f56140c5565b905061450082614060565b815260208201356020820152604082013560408201526060820135606082015292915050565b60006040828403121561453857600080fd5b6145406140ee565b905061454b82614347565b8152602082013567ffffffffffffffff81111561456757600080fd5b6145738482850161419e565b60208301525092915050565b60006080828403121561459157600080fd5b6145996140ee565b905081356145a681614189565b81526145b58360208401614432565b602082015292915050565b600060808083850312156145d357600080fd5b6145db6140ee565b91506145e78484614432565b8252606083013567ffffffffffffffff81111561460357600080fd5b8301601f8101851361461457600080fd5b803560206146246141bf83614165565b82815260079290921b8301810191818101908884111561464357600080fd5b938201935b838510156146695761465a898661457f565b82529385019390820190614648565b808388015250505050505092915050565b60006040828403121561468c57600080fd5b6146946140ee565b905081356146a181614189565b8152602082013567ffffffffffffffff808211156146be57600080fd5b908301906101c082860312156146d357600080fd5b6146db614111565b6146e58684614432565b81526146f48660608501614497565b60208201526147068660e085016144db565b60408201526101608301358281111561471e57600080fd5b61472a87828601614526565b6060830152506101808301358281111561474357600080fd5b61474f878286016145c0565b6080830152506101a08301358281111561476857600080fd5b614774878286016145c0565b60a083015250602084015250909392505050565b6000806040838503121561479b57600080fd5b823567ffffffffffffffff8111156147b257600080fd5b6147be8582860161467a565b92505060208301356147cf81614189565b809150509250929050565b6000602082840312156147ec57600080fd5b813567ffffffffffffffff81111561480357600080fd5b611b718482850161467a565b6000806000806080858703121561482557600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161487f5761487f614857565b5060010190565b600081518084526020808501945080840160005b838110156148b65781518752958201959082019060010161489a565b509495945050505050565b6001600160a01b03841681526001600160e01b031983166020820152606060408201526000612f646060830184614886565b8082028115828204841417610ae657610ae6614857565b81810381811115610ae657610ae6614857565b80820180821115610ae657610ae6614857565b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526119186080830184614886565b60006020828403121561497e57600080fd5b8151610d6f81614212565b634e487b7160e01b600052601260045260246000fd5b6000826149ae576149ae614989565b500490565b6000602082840312156149c557600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156149f457600080fd5b8151610d6f81614189565b60006001600160a01b038086168352602081861681850152606060408501528451915081606085015260005b82811015614a4757858101820151858201608001528101614a2b565b50506000608082850101526080601f19601f830116840101915050949350505050565b600082614a7957614a79614989565b500690565b81810360008312801583831316838312821617156123fc576123fc614857565b600082614aad57614aad614989565b600160ff1b821460001984141615614ac757614ac7614857565b500590565b8082018281126000831280158216821582161715614aec57614aec614857565b505092915050565b80820260008212600160ff1b84141615614b1057614b10614857565b8181058314821517610ae657610ae661485756fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122048f9a762c80b605dc2b97b697bbd8374316f260d2eb397d835bb51ac461a3cf464736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
