{
  "_format": "hh-sol-artifact-1",
  "contractName": "LendingPool",
  "sourceName": "contracts/protocol/lendingpool/LendingPool.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowRateMode",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowRate",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "referral",
          "type": "uint16"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "referral",
          "type": "uint16"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "FlashLoan",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "healthFactorLiquidationThreshold",
          "type": "uint256"
        }
      ],
      "name": "HealthFactorLiquidationThresholdUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "collateralAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "debtAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "debtToCover",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidatedCollateralAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "receiveAToken",
          "type": "bool"
        }
      ],
      "name": "LiquidationCall",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "RebalanceStableBorrowRate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "repayer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Repay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidityRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stableBorrowRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "variableBorrowRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidityIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "variableBorrowIndex",
          "type": "uint256"
        }
      ],
      "name": "ReserveDataUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "ReserveUsedAsCollateralDisabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "ReserveUsedAsCollateralEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rateMode",
          "type": "uint256"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserve",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "FLASHLOAN_PREMIUM_TOTAL",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LENDINGPOOL_REVISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_NUMBER_RESERVES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_STABLE_RATE_BORROW_SIZE_PERCENT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "interestRateMode",
          "type": "uint256"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        }
      ],
      "name": "borrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balanceFromBefore",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balanceToBefore",
          "type": "uint256"
        }
      ],
      "name": "finalizeTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiverAddress",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "modes",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "flashLoan",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressesProvider",
      "outputs": [
        {
          "internalType": "contract ILendingPoolAddressesProvider",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getConfiguration",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "data",
              "type": "uint256"
            }
          ],
          "internalType": "struct DataTypes.ReserveConfigurationMap",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getHealthFactorLiquidationThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getReserveData",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "data",
                  "type": "uint256"
                }
              ],
              "internalType": "struct DataTypes.ReserveConfigurationMap",
              "name": "configuration",
              "type": "tuple"
            },
            {
              "internalType": "uint128",
              "name": "liquidityIndex",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "variableBorrowIndex",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "currentLiquidityRate",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "currentVariableBorrowRate",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "currentStableBorrowRate",
              "type": "uint128"
            },
            {
              "internalType": "uint40",
              "name": "lastUpdateTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "aTokenAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stableDebtTokenAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "variableDebtTokenAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "interestRateStrategyAddress",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "id",
              "type": "uint8"
            }
          ],
          "internalType": "struct DataTypes.ReserveData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getReserveNormalizedIncome",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getReserveNormalizedVariableDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReservesList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getUserAccountData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalCollateralETH",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalDebtETH",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "availableBorrowsETH",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "currentLiquidationThreshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "ltv",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "healthFactor",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getUserConfiguration",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[2]",
              "name": "data",
              "type": "uint256[2]"
            },
            {
              "internalType": "uint256",
              "name": "healthFactorLiquidationThreshold",
              "type": "uint256"
            }
          ],
          "internalType": "struct DataTypes.UserConfigurationMap",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "aTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "stableDebtAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "variableDebtAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "interestRateStrategyAddress",
          "type": "address"
        }
      ],
      "name": "initReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ILendingPoolAddressesProvider",
          "name": "provider",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateralAsset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "debtAsset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "debtToCover",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "receiveAToken",
          "type": "bool"
        }
      ],
      "name": "liquidationCall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "rebalanceStableBorrowRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rateMode",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        }
      ],
      "name": "repay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "configuration",
          "type": "uint256"
        }
      ],
      "name": "setConfiguration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "newHealthFactorLiquidationThreshold",
          "type": "uint256"
        }
      ],
      "name": "setHealthFactorLiquidationThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "val",
          "type": "bool"
        }
      ],
      "name": "setPause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rateStrategyAddress",
          "type": "address"
        }
      ],
      "name": "setReserveInterestRateStrategyAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "useAsCollateral",
          "type": "bool"
        }
      ],
      "name": "setUserUseReserveAsCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "rateMode",
          "type": "uint256"
        }
      ],
      "name": "swapBorrowRateMode",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000805534801561001457600080fd5b50615abd80620000256000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063ab9c4b5d11610104578063cd112382116100a2578063e82fec2f11610071578063e82fec2f1461040b578063e8eda9df14610413578063f8119d5114610426578063fe65acfe1461042e576101d9565b8063cd112382146103bd578063d15e0053146103d0578063d1946dbc146103e3578063d5ed3933146103f8576101d9565b8063bedb86fb116100de578063bedb86fb14610352578063bf92857c14610365578063c44b11f71461038a578063c4d66de8146103aa576101d9565b8063ab9c4b5d14610319578063b3b8c8e51461032c578063b8d292761461033f576101d9565b8063573ade811161017c5780637a708e921161014b5780637a708e92146102d85780638afaff02146102eb57806394ba89a2146102f3578063a415bcad14610306576101d9565b8063573ade811461028a5780635a3b74b91461029d5780635c975abb146102b057806369328dec146102c5576101d9565b806335ea6a75116101b857806335ea6a7514610224578063386497fd146102445780634417a583146102575780635114ee3e14610277576101d9565b8062a718a9146101de578063074b2e43146101f35780631d2118f914610211575b600080fd5b6101f16101ec366004614d2e565b610443565b005b6101fb610619565b60405161020891906159b3565b60405180910390f35b6101f161021f366004614c86565b61061f565b610237610232366004614c4e565b610658565b604051610208919061578e565b6101fb610252366004614c4e565b61073a565b61026a610265366004614c4e565b610761565b6040516102089190615976565b6101f1610285366004614f10565b6107ca565b6101fb610298366004614fcd565b610839565b6101f16102ab366004614ee3565b610b65565b6102b8610d2a565b60405161020891906155ca565b6101fb6102d3366004614f3b565b610d33565b6101f16102e6366004614cbe565b61105d565b6101fb61113f565b6101f1610301366004614f10565b611144565b6101f1610314366004615016565b6114b1565b6101f1610327366004614deb565b6115bf565b6101fb61033a366004614c4e565b611c93565b6101f161034d366004614f10565b611cf2565b6101f1610360366004615055565b611d16565b610378610373366004614c4e565b611d91565b60405161020896959493929190615a05565b61039d610398366004614c4e565b611ea5565b6040516102089190615784565b6101f16103b8366004614c4e565b611ed8565b6101f16103cb366004614c86565b611f81565b6101fb6103de366004614c4e565b6121f7565b6103eb612218565b604051610208919061557d565b6101f1610406366004614d87565b6122bd565b6101fb612506565b6101f1610421366004614f7c565b61250c565b6101fb6127be565b6104366127c4565b604051610208919061529c565b61044b6127d3565b6034546040805163712d917160e01b815290516000926001600160a01b03169163712d9171916004808301926020929190829003018186803b15801561049057600080fd5b505afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190614c6a565b905060006060826001600160a01b031688888888886040516024016104f1959493929190615324565b60408051601f198184030181529181526020820180516001600160e01b031662a718a960e01b179052516105259190615280565b600060405180830381855af49150503d8060008114610560576040519150601f19603f3d011682016040523d82523d6000602084013e610565565b606091505b50915091508160405180604001604052806002815260200161323360f01b815250906105ad5760405162461bcd60e51b81526004016105a491906155d5565b60405180910390fd5b5060006060828060200190518101906105c691906150a5565b9150915081600014816040516020016105df9190615280565b6040516020818303038152906040529061060c5760405162461bcd60e51b81526004016105a491906155d5565b5050505050505050505050565b603b5490565b610627612811565b6001600160a01b03918216600090815260356020526040902060070180546001600160a01b03191691909216179055565b61066061495e565b506001600160a01b0381811660009081526035602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff166101608201525b919050565b6001600160a01b038116600090815260356020526040812061075b906128d0565b92915050565b6107696149c9565b6001600160a01b03821660009081526036602052604090819020815160808101835291829081018260028282826020028201915b81548152602001906001019080831161079d57505050505081526020016002820154815250509050919050565b6107d261294d565b6001600160a01b03821660009081526036602052604090206107f49082612a0c565b816001600160a01b03167fb4c357dea76fc2161034143537a26c6743101401042b516310719af0b8d33ffc8260405161082d91906159b3565b60405180910390a25050565b60006108436127d3565b6001600160a01b038516600090815260356020526040812090806108678584612a14565b91509150600086600281111561087957fe5b60405163fa0c214960e01b815290915073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9063fa0c2149906108bd9087908c9086908c908a908a90600401615934565b60006040518083038186803b1580156108d557600080fd5b505af41580156108e9573d6000803e3d6000fd5b5060009250600191506108f99050565b82600281111561090557fe5b146109105782610912565b835b90508089101561091f5750875b61092885612b29565b600182600281111561093657fe5b14156109a7576005850154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac90610970908a9085906004016152e1565b600060405180830381600087803b15801561098a57600080fd5b505af115801561099e573d6000803e3d6000fd5b50505050610a25565b60068501546001860154604051637a94c56560e11b81526001600160a01b039092169163f5298aca916109f2918b918691600160801b9091046001600160801b0316906004016152fa565b600060405180830381600087803b158015610a0c57600080fd5b505af1158015610a20573d6000803e3d6000fd5b505050505b60048501546001600160a01b0316610a41868c83856000612bf6565b610a5582610a4f8787612f5e565b90612f83565b610a8d5760078601546001600160a01b0389166000908152603660205260408120610a8d929091600160a01b90910460ff1690612fc5565b610aa26001600160a01b038c16338385613052565b6040516388dd91a160e01b81526001600160a01b038216906388dd91a190610ad090339086906004016152e1565b600060405180830381600087803b158015610aea57600080fd5b505af1158015610afe573d6000803e3d6000fd5b50505050336001600160a01b0316886001600160a01b03168c6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610b4f91906159b3565b60405180910390a4509998505050505050505050565b610b6d6127d3565b6001600160a01b03808316600090815260356020818152604080842033855260368352938190206038546034548351631f94a27560e31b81529351969773__$de8c0cf1a7d7c36c802af9a64fb9d86036$__97635fa297e5978a978d978d9792969295603795939493169263fca513a892600480840193919291829003018186803b158015610bfb57600080fd5b505afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c339190614c6a565b6040518963ffffffff1660e01b8152600401610c569897969594939291906158af565b60006040518083038186803b158015610c6e57600080fd5b505af4158015610c82573d6000803e3d6000fd5b505050506007810154336000908152603660205260409020610cae91600160a01b900460ff16846130b0565b8115610cee5760405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610d25565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050565b60395460ff1690565b6000610d3d6127d3565b6001600160a01b0380851660009081526035602052604080822060048082015492516370a0823160e01b8152919492909216929183916370a0823191610d859133910161529c565b60206040518083038186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd5919061508d565b905085600019811415610de55750805b73__$de8c0cf1a7d7c36c802af9a64fb9d86036$__63d09db04a898385603560366000336001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7c57600080fd5b505afa158015610e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb49190614c6a565b6040518963ffffffff1660e01b8152600401610ed798979695949392919061544d565b60006040518083038186803b158015610eef57600080fd5b505af4158015610f03573d6000803e3d6000fd5b50505050610f1084612b29565b610f1e848985600085612bf6565b81811415610f88576007840154336000908152603660205260408120610f51929091600160a01b90910460ff16906130b0565b60405133906001600160a01b038a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6001840154604051636b81068560e11b81526001600160a01b0385169163d7020d0a91610fc99133918b9187916001600160801b03909116906004016152b0565b600060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b0316896001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161104891906159b3565b60405180910390a493505050505b9392505050565b611065612811565b61106e8561312b565b6040518060400160405280600281526020016106e760f31b815250906110a75760405162461bcd60e51b81526004016105a491906155d5565b506001600160a01b038516600090815260356020526040908190209051630acce25f60e21b815273__$22cd43a9dda9ce44e9b92ba393b88fb9ac$__91632b33897c916110ff91908890889088908890600401615881565b60006040518083038186803b15801561111757600080fd5b505af415801561112b573d6000803e3d6000fd5b5050505061113885613164565b5050505050565b600281565b61114c6127d3565b6001600160a01b038216600090815260356020526040812090806111703384612a14565b91509150600084600281111561118257fe5b3360009081526036602052604090819020905163a8695b1d60e01b815291925073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9163a8695b1d916111d3918891908890889088906004016158f1565b60006040518083038186803b1580156111eb57600080fd5b505af41580156111ff573d6000803e3d6000fd5b5050505061120c84612b29565b600181600281111561121a57fe5b141561132a576005840154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac9061125490339087906004016152e1565b600060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916112d291339182918991600160801b90046001600160801b0316906004016152b0565b602060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113249190615071565b50611440565b60068401546001850154604051637a94c56560e11b81526001600160a01b039092169163f5298aca916113759133918791600160801b9091046001600160801b0316906004016152fa565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916113ec913391829188916001600160801b0316906004016152b0565b602060405180830381600087803b15801561140657600080fd5b505af115801561141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143e9190615071565b505b600484015461145e90859088906001600160a01b0316600080612bf6565b336001600160a01b0316866001600160a01b03167fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca6876040516114a191906159b3565b60405180910390a3505050505050565b6114b96127d3565b6001600160a01b038581166000908152603560209081526040808320938516835260369091529081902081516080810180845261152c93919291839190820190839060029082845b815481526020019060010190808311611501575050505050815260200160028201548152505061326d565b61155a576001600160a01b038216600090815260366020526040902061155a90670de0b6b3a7640000612a0c565b60408051610100810182526001600160a01b038089168252336020830152848116928201929092526060810187905260808101869052600483015490911660a082015261ffff841660c0820152600160e08201526115b790613274565b505050505050565b6115c76127d3565b6115cf6149e9565b61163c8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525061376d92505050565b60608a67ffffffffffffffff8111801561165557600080fd5b5060405190808252806020026020018201604052801561167f578160200160208202803683370190505b50905060608b67ffffffffffffffff8111801561169b57600080fd5b506040519080825280602002602001820160405280156116c5578160200160208202803683370190505b506001600160a01b038f1684526000604085015290505b60408301518c111561188957603560008e8e86604001518181106116fc57fe5b90506020020160208101906117119190614c4e565b6001600160a01b03166001600160a01b0316815260200190815260200160002060040160009054906101000a90046001600160a01b03168284604001518151811061175857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506117af6127106117a9603b548e8e886040015181811061179457fe5b905060200201356137ab90919063ffffffff16565b906137e5565b818460400151815181106117bf57fe5b602002602001018181525050818360400151815181106117db57fe5b60200260200101516001600160a01b0316634efecaa58f8d8d876040015181811061180257fe5b905060200201356040518363ffffffff1660e01b81526004016118269291906152e1565b602060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611878919061508d565b5060408301805160010190526116dc565b82600001516001600160a01b031663920f5c848e8e8e8e86338d8d6040518963ffffffff1660e01b81526004016118c79897969594939291906154b9565b602060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190615071565b604051806040016040528060028152602001611b1b60f11b815250906119525760405162461bcd60e51b81526004016105a491906155d5565b50600060408401525b60408301518c1115611c83578c8c846040015181811061197757fe5b905060200201602081019061198c9190614c4e565b6001600160a01b0316606084015260408301518b908b908181106119ac57fe5b905060200201358360a0018181525050808360400151815181106119cc57fe5b60200260200101518360c0018181525050818360400151815181106119ed57fe5b60209081029190910101516001600160a01b0316608084015260c083015160a0840151611a1991612f5e565b60e0840152600089898560400151818110611a3057fe5b905060200201356002811115611a4257fe5b6002811115611a4d57fe5b1415611b7f5760608301516001600160a01b03166000908152603560205260409020611a7890612b29565b611b1883608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af0919061508d565b60c085015160608601516001600160a01b031660009081526035602052604090209190613827565b6060830151608084015160e08501516001600160a01b0383166000908152603560205260408120611b4e94909390929091612bf6565b611b7a8e84608001518560e0015186606001516001600160a01b0316613052909392919063ffffffff16565b611c0e565b611c0e60405180610100016040528085606001516001600160a01b03168152602001336001600160a01b03168152602001896001600160a01b031681526020018560a0015181526020018b8b8760400151818110611bd957fe5b90506020020135815260200185608001516001600160a01b031681526020018661ffff16815260200160001515815250613274565b82606001516001600160a01b0316336001600160a01b03168f6001600160a01b03167f631042c832b07452973831137f2d73e395028b44b250dedc5abb0ee766e168ac8660a001518760c0015189604051611c6b939291906159bc565b60405180910390a4604083018051600101905261195b565b5050505050505050505050505050565b6001600160a01b038116600090815260366020526040808220815160808101808452825493820193845261075b93919291839183906002906001830160608601808311611501575050505050815260200160028201548152505061326d565b611cfa612811565b6001600160a01b03909116600090815260356020526040902055565b611d1e612811565b6039805460ff1916821515179081905560ff1615611d64576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611d8e565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b6001600160a01b038116600090815260366020526040808220815160808101835283928392839283928392611e82928a9260359290829081018260028282826020028201915b815481526020019060010190808311611dd75750505091835250506002919091015460209182015260385460345460408051631f94a27560e31b815290516037946001600160a01b039093169263fca513a89260048082019391829003018186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d9190614c6a565b6138e4565b93995091975090945092509050611e9a868684613da5565b935091939550919395565b611ead614a35565b506001600160a01b031660009081526035602090815260409182902082519182019092529054815290565b6000611ee2613dd9565b60015490915060ff1680611ef95750611ef9613dde565b80611f05575060005481115b611f215760405162461bcd60e51b81526004016105a4906156b5565b60015460ff16158015611f40576001805460ff19168117905560008290555b603480546001600160a01b0319166001600160a01b0385161790556109c4603a556009603b55610100603c558015610d25576001805460ff19169055505050565b611f896127d3565b6001600160a01b038083166000908152603560205260408082206005810154600682015460048084015494516370a0823160e01b81529396928316959183169490921692909185916370a0823191611fe3918a910161529c565b60206040518083038186803b158015611ffb57600080fd5b505afa15801561200f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612033919061508d565b60405163548cad0960e01b815290915073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9063548cad09906120759088908b90899089908990600401615881565b60006040518083038186803b15801561208d57600080fd5b505af41580156120a1573d6000803e3d6000fd5b505050506120ae85612b29565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac906120dc90899085906004016152e1565b600060405180830381600087803b1580156120f657600080fd5b505af115801561210a573d6000803e3d6000fd5b505050600386015460405163b3f1c93d60e01b81526001600160a01b038716925063b3f1c93d9161214d918a91829187916001600160801b0316906004016152b0565b602060405180830381600087803b15801561216757600080fd5b505af115801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f9190615071565b506121ae858884600080612bf6565b856001600160a01b0316876001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a350505050505050565b6001600160a01b038116600090815260356020526040812061075b90613de4565b60608060385467ffffffffffffffff8111801561223457600080fd5b5060405190808252806020026020018201604052801561225e578160200160208202803683370190505b50905060005b6038548110156122b75760008181526037602052604090205482516001600160a01b039091169083908390811061229757fe5b6001600160a01b0390921660209283029190910190910152600101612264565b50905090565b6122c56127d3565b6001600160a01b038681166000908152603560209081526040918290206004015482518084019093526002835261363360f01b9183019190915290911633146123215760405162461bcd60e51b81526004016105a491906155d5565b506123dd85603560366000896001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a057600080fd5b505afa1580156123b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d89190614c6a565b613e43565b6001600160a01b03868116600090815260356020526040902060070154600160a01b900460ff1690858116908716146124fd5761241a8385612f83565b612486576001600160a01b03861660009081526036602052604081209061244490829084906130b0565b866001600160a01b0316886001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a3505b8115801561249357508315155b156124fd576001600160a01b03851660009081526036602052604090206124bc818360016130b0565b856001600160a01b0316886001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a3505b50505050505050565b603a5490565b6125146127d3565b6001600160a01b0384811660009081526035602090815260408083209386168352603690915290819020815160808101808452825493820193845261258493919291839183906002906001830160608601808311611501575050505050815260200160028201548152505061326d565b6125b2576001600160a01b03831660009081526036602052604090206125b290670de0b6b3a7640000612a0c565b604051630eca322b60e01b815273__$de8c0cf1a7d7c36c802af9a64fb9d86036$__90630eca322b906125eb9084908890600401615926565b60006040518083038186803b15801561260357600080fd5b505af4158015612617573d6000803e3d6000fd5b5050505060048101546001600160a01b031661263282612b29565b612640828783886000612bf6565b6126556001600160a01b038716338388613052565b6001820154604051630ab714fb60e11b81526000916001600160a01b0384169163156e29f6916126979189918b916001600160801b03909116906004016152fa565b602060405180830381600087803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e99190615071565b905080156127635760078301546001600160a01b038616600090815260366020526040902061272391600160a01b900460ff1660016130b0565b846001600160a01b0316876001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b8361ffff16856001600160a01b0316886001600160a01b03167fde6857219544bb5b7746f48ed30be6386fefc61b2f864cacf559893bf50fd951338a6040516127ad9291906152e1565b60405180910390a450505050505050565b603c5490565b6034546001600160a01b031690565b6039546040805180820190915260028152610d8d60f21b60208201529060ff1615611d8e5760405162461bcd60e51b81526004016105a491906155d5565b603454604080516385c858b160e01b8152905133926001600160a01b0316916385c858b1916004808301926020929190829003018186803b15801561285557600080fd5b505afa158015612869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288d9190614c6a565b6001600160a01b03161460405180604001604052806002815260200161323760f01b81525090611d8e5760405162461bcd60e51b81526004016105a491906155d5565b600381015460009064ffffffffff600160801b909104811690421681141561290e5750506001810154600160801b90046001600160801b0316610735565b60018301546002840154600091612945916001600160801b03600160801b9283900481169261293f92041685613f2b565b90613f38565b949350505050565b603454604080516306f0975360e21b8152905133926001600160a01b031691631bc25d4c916004808301926020929190829003018186803b15801561299157600080fd5b505afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c6a565b6001600160a01b03161460405180604001604052806002815260200161383160f01b81525090611d8e5760405162461bcd60e51b81526004016105a491906155d5565b600290910155565b60058101546040516370a0823160e01b815260009182916001600160a01b03909116906370a0823190612a4b90879060040161529c565b60206040518083038186803b158015612a6357600080fd5b505afa158015612a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9b919061508d565b60068401546040516370a0823160e01b81526001600160a01b03909116906370a0823190612acd90889060040161529c565b60206040518083038186803b158015612ae557600080fd5b505afa158015612af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1d919061508d565b915091505b9250929050565b60068101546040805163b1bf962d60e01b815290516000926001600160a01b03169163b1bf962d916004808301926020929190829003018186803b158015612b7057600080fd5b505afa158015612b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba8919061508d565b60018301546003840154919250600160801b8082046001600160801b03908116939216910464ffffffffff16600080612be48787868887613fcb565b915091506124fd878787858588614128565b612bfe614a48565b60058601546001600160a01b031680825260408051637b98f4df60e11b8152815163f731e9be92600480840193919291829003018186803b158015612c4257600080fd5b505afa158015612c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7a919061514c565b60c083015260408083019190915260018701546006880154825163b1bf962d60e01b81529251612d1f93600160801b9093046001600160801b0316926001600160a01b039092169163b1bf962d916004808301926020929190829003018186803b158015612ce757600080fd5b505afa158015612cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293f919061508d565b60e082018190526007870154604083015160c08401516001600160a01b03909216926329db497d9289928992899289929190612d5a8f6142eb565b6040518963ffffffff1660e01b8152600401612d7d9897969594939291906153a5565b60606040518083038186803b158015612d9557600080fd5b505afa158015612da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcd919061516f565b60a0840152608083015260608201819052604080518082019091526002815261353360f01b6020820152906001600160801b031015612e1f5760405162461bcd60e51b81526004016105a491906155d5565b506080810151604080518082019091526002815261353560f01b6020820152906001600160801b031015612e665760405162461bcd60e51b81526004016105a491906155d5565b5060a08101516040805180820190915260028152610d4d60f21b6020820152906001600160801b031015612ead5760405162461bcd60e51b81526004016105a491906155d5565b506060810151600287018054608084015160038a0180546001600160801b03199081166001600160801b038085169190911790925560a08701519316818616178116600160801b84831681029190911790945560018b01546040516001600160a01b038c16967f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a96612f4e96919594919380831693919004909116906159d6565b60405180910390a2505050505050565b6000828201838110156110565760405162461bcd60e51b81526004016105a490615608565b600061105683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506142f6565b604080518082019091526002815261373760f01b602082015261010083106130005760405162461bcd60e51b81526004016105a491906155d5565b50607f82169160809004600283028261301a57600061301d565b60015b60ff16901b836002026001901b1985600001836002811061303a57fe5b0154161784826002811061304a57fe5b015550505050565b6130aa846323b872dd60e01b85858560405160240161307393929190615358565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614322565b50505050565b604080518082019091526002815261373760f01b602082015261010083106130eb5760405162461bcd60e51b81526004016105a491906155d5565b50607f82169160809004600160028402018261310857600061310b565b60015b60ff16901b836002026001016001901b1985600001836002811061303a57fe5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612945575050151592915050565b603854603c54604080518082019091526002815261363560f01b60208201529082106131a35760405162461bcd60e51b81526004016105a491906155d5565b506001600160a01b038216600090815260356020526040812060070154600160a01b900460ff1615158061320c57506000805260376020527fa0a618d80eda9243166be83cb7421d97e9dab6ddddd3c70ac7a6b4440256e8e7546001600160a01b038481169116145b905080610d2557506001600160a01b03919091166000818152603560209081526040808320600701805460ff60a01b1916600160a01b60ff8816021790558483526037909152902080546001600160a01b0319169091179055600101603855565b6020015190565b80516001600160a01b0390811660009081526035602090815260408083208186015185168452603683528184206034548351631f94a27560e31b81529351929691959491169263fca513a89260048083019392829003018186803b1580156132db57600080fd5b505afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133139190614c6a565b905060006133b461332385614407565b600a0a6117a98760600151856001600160a01b031663b3596f078a600001516040518263ffffffff1660e01b815260040161335e919061529c565b60206040518083038186803b15801561337657600080fd5b505afa15801561338a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ae919061508d565b906137ab565b905073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__63721a92f986600001518688604001518960600151868b60800151603a5460358c60376038548e6040518d63ffffffff1660e01b81526004016134199c9b9a999897969594939291906153e9565b60006040518083038186803b15801561343157600080fd5b505af4158015613445573d6000803e3d6000fd5b5050505061345284612b29565b60008060018760800151600281111561346757fe5b600281111561347257fe5b1415613527576003860154600587015460208901516040808b015160608c0151915163b3f1c93d60e01b81526001600160801b0390951696506001600160a01b039093169363b3f1c93d936134ce93929091889060040161537c565b602060405180830381600087803b1580156134e857600080fd5b505af11580156134fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135209190615071565b90506135d6565b600686015460208801516040808a015160608b015160018b0154925163b3f1c93d60e01b81526001600160a01b039095169463b3f1c93d946135819490939291600160801b9091046001600160801b0316906004016152b0565b602060405180830381600087803b15801561359b57600080fd5b505af11580156135af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d39190615071565b90505b80156135f85760078601546135f8908690600160a01b900460ff166001612fc5565b61362787600001518860a0015160008a60e0015161361757600061361d565b8a606001515b8a93929190612bf6565b8660e00151156136bf578660a001516001600160a01b0316634efecaa5886020015189606001516040518363ffffffff1660e01b815260040161366b9291906152e1565b602060405180830381600087803b15801561368557600080fd5b505af1158015613699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bd919061508d565b505b8660c0015161ffff1687604001516001600160a01b031688600001516001600160a01b03167fc6a898309e823ee50bac64e45ca8adba6690e99e7841c45d754e2a38e9019d9b8a602001518b606001518c608001516001600281111561372157fe5b8e60800151600281111561373157fe5b600281111561373c57fe5b1461375b5760028d0154600160801b90046001600160801b031661375d565b885b6040516127ad9493929190615493565b805182511460405180604001604052806002815260200161373360f01b81525090610d255760405162461bcd60e51b81526004016105a491906155d5565b6000826137ba5750600061075b565b828202828482816137c757fe5b04146110565760405162461bcd60e51b81526004016105a490615674565b600061105683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614411565b600061384461383584614448565b61383e84614448565b90614498565b9050600061385a613853614543565b8390612f5e565b60018601549091506138769082906001600160801b0316613f38565b604080518082019091526002815261353160f01b60208201529091506001600160801b038211156138ba5760405162461bcd60e51b81526004016105a491906155d5565b5060019490940180546001600160801b0319166001600160801b0390951694909417909355505050565b60008060008060006138f4614a96565b6138fd8a614553565b1561391b576000806000806000199550955095509550955050613d97565b600060e08201525b878160e001511015613cf65760e081015161393f908b906145a8565b61394857613ce6565b60e0810151600090815260208a81526040808320546001600160a01b03166101e085018190528352908d9052902061397f8161461a565b506080860181905260c08601929092525060a0840191909152600a0a60208301526101e082015160405163b3596f0760e01b81526001600160a01b038a169163b3596f07916139d1919060040161529c565b60206040518083038186803b1580156139e957600080fd5b505afa1580156139fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a21919061508d565b825260c082015115801590613a41575060e0820151613a41908c90614645565b15613b5f578060040160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b8152600401613a89919061529c565b60206040518083038186803b158015613aa157600080fd5b505afa158015613ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad9919061508d565b6040830181905260208301518351600092613af892916117a9916137ab565b610120840151909150613b0b9082612f5e565b61012084015260a0830151613b3190613b259083906137ab565b61016085015190612f5e565b61016084015260c0830151613b5790613b4b9083906137ab565b61018085015190612f5e565b610180840152505b60e0820151613b6f908c906146bf565b15613ce4578060050160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b8152600401613bb7919061529c565b60206040518083038186803b158015613bcf57600080fd5b505afa158015613be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c07919061508d565b826060018181525050613cb18160060160009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b8152600401613c56919061529c565b60206040518083038186803b158015613c6e57600080fd5b505afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca6919061508d565b606084015190612f5e565b6060830181905260208301518351613cdd92613cd192916117a9916137ab565b61014084015190612f5e565b6101408301525b505b60e0810180516001019052613923565b600081610120015111613d0a576000613d1f565b610120810151610160820151613d1f916137e5565b610160820152610120810151613d36576000613d4b565b610120810151610180820151613d4b916137e5565b6101808201819052610120820151610140830151613d689261471d565b610100820181905261012082015161014083015161016084015161018090940151919850965091945090925090505b965096509650965096915050565b600080613db28584614741565b905083811015613dc6576000915050611056565b613dd08185612f83565b95945050505050565b600290565b303b1590565b600381015460009064ffffffffff600160801b9091048116904216811415613e1b57505060018101546001600160801b0316610735565b60018301546002840154600091612945916001600160801b039182169161293f9116856147b0565b6040805160808101808352600092613e96928a928a928a918391820190839060029082845b815481526020019060010190808311613e6857505050505081526020016002820154815250508787876138e4565b60408051608081018083528c54928201928352929750613ee6965094508a93508492509083906002906001830160608601808311611501575050505050815260200160028201548152505061326d565b811015604051806040016040528060018152602001601b60f91b81525090613f215760405162461bcd60e51b81526004016105a491906155d5565b5050505050505050565b60006110568383426147ee565b6000821580613f45575081155b15613f525750600061075b565b816b019d971e4fe8401e740000001981613f6857fe5b0483111560405180604001604052806002815260200161068760f31b81525090613fa55760405162461bcd60e51b81526004016105a491906155d5565b506b033b2e3c9fd0803ce80000006002815b048385020181613fc357fe5b049392505050565b600285015460009081906001600160801b0316858582156140f9576000613ff284886147b0565b9050613ffe818a613f38565b604080518082019091526002815261353160f01b60208201529093506001600160801b038411156140425760405162461bcd60e51b81526004016105a491906155d5565b5060018b0180546001600160801b0319166001600160801b03851617905589156140f75760028b015460009061408890600160801b90046001600160801b031689613f2b565b9050614094818a613f38565b6040805180820190915260028152611a9960f11b60208201529093506001600160801b038411156140d85760405162461bcd60e51b81526004016105a491906155d5565b505060018b0180546001600160801b03808516600160801b0291161790555b505b600399909901805464ffffffffff60801b1916600160801b4264ffffffffff1602179055989650505050505050565b614130614b30565b614139876142eb565b610120820181905261414b57506115b7565b8660050160009054906101000a90046001600160a01b03166001600160a01b031663797743386040518163ffffffff1660e01b815260040160806040518083038186803b15801561419b57600080fd5b505afa1580156141af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d3919061519c565b64ffffffffff1661014085015260a0840152825260208201526141f68686613f38565b60808201526142058684613f38565b606082015260a0810151610140820151614227919064ffffffffff85166147ee565b60c08201819052602082015161423c91613f38565b604082018190526080820151825160608401516142619392610a4f9290918391612f5e565b60e082018190526101208201516142789190614741565b6101008201819052156124fd57600480880154610100830151604051637df5bd3b60e01b81526001600160a01b0390921692637df5bd3b926142bd9291899101615926565b600060405180830381600087803b1580156142d757600080fd5b505af115801561060c573d6000803e3d6000fd5b5460401c61ffff1690565b6000818484111561431a5760405162461bcd60e51b81526004016105a491906155d5565b505050900390565b614334826001600160a01b031661312b565b6143505760405162461bcd60e51b81526004016105a49061574d565b60006060836001600160a01b03168360405161436c9190615280565b6000604051808303816000865af19150503d80600081146143a9576040519150601f19603f3d011682016040523d82523d6000602084013e6143ae565b606091505b5091509150816143d05760405162461bcd60e51b81526004016105a49061563f565b8051156130aa57808060200190518101906143eb9190615071565b6130aa5760405162461bcd60e51b81526004016105a490615703565b5460301c60ff1690565b600081836144325760405162461bcd60e51b81526004016105a491906155d5565b50600083858161443e57fe5b0495945050505050565b6000633b9aca0082810290839082041460405180604001604052806002815260200161068760f31b815250906144915760405162461bcd60e51b81526004016105a491906155d5565b5092915050565b604080518082019091526002815261035360f41b6020820152600090826144d25760405162461bcd60e51b81526004016105a491906155d5565b5060408051808201909152600280825261068760f31b60208301528304906b033b2e3c9fd0803ce80000008219048511156145205760405162461bcd60e51b81526004016105a491906155d5565b5082816b033b2e3c9fd0803ce80000008602018161453a57fe5b04949350505050565b6b033b2e3c9fd0803ce800000090565b6000805b600260ff8216101561459f57825160ff82166002811061457357fe5b60200201511515806145885750602083015115155b15614597576000915050610735565b600101614557565b50600192915050565b6000610100821060405180604001604052806002815260200161373760f01b815250906145e85760405162461bcd60e51b81526004016105a491906155d5565b508251607f8316926080900490600280850291908390811061460657fe5b6020020151901c6003161515949350505050565b5461ffff80821692601083901c821692602081901c831692603082901c60ff169260409290921c1690565b6000610100821060405180604001604052806002815260200161373760f01b815250906146855760405162461bcd60e51b81526004016105a491906155d5565b50600060808304905060808306925082600202600101846000015182600281106146ab57fe5b6020020151901c6001161515949350505050565b6000610100821060405180604001604052806002815260200161373760f01b815250906146ff5760405162461bcd60e51b81526004016105a491906155d5565b508251607f831692608090049060028085029190839081106146ab57fe5b60008261472d5750600019611056565b6129458361473b8685614741565b906148c4565b600082158061474e575081155b1561475b5750600061075b565b81611388198161476757fe5b0483111560405180604001604052806002815260200161068760f31b815250906147a45760405162461bcd60e51b81526004016105a491906155d5565b50612710600281613fb7565b6000806147c44264ffffffffff8516612f83565b90506129456147d1614543565b6301e133806147e087856137ab565b816147e757fe5b0490612f5e565b6000806148028364ffffffffff8616612f83565b90508061481957614811614543565b915050611056565b600019810160006002831161482f576000614834565b600283035b90506301e13380870460006148498280613f38565b905060006148578284613f38565b90506000600261486b846133ae8a8a6137ab565b8161487257fe5b04905060006006614889846133ae89818d8d6137ab565b8161489057fe5b0490506148b4816148ae84816148a68a8e6137ab565b6148ae614543565b90612f5e565b9c9b505050505050505050505050565b604080518082019091526002815261035360f41b6020820152600090826148fe5760405162461bcd60e51b81526004016105a491906155d5565b5060408051808201909152600280825261068760f31b6020830152830490670de0b6b3a76400008219048511156149485760405162461bcd60e51b81526004016105a491906155d5565b508281670de0b6b3a76400008602018161453a57fe5b604051806101800160405280614972614a35565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101609091015290565b60405180604001604052806149dc614b91565b8152602001600081525090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b6040518060200160405280600081525090565b60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806102400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681526020016000151581526020016000151581525090565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600064ffffffffff1681525090565b60405180604001604052806002906020820280368337509192915050565b803561075b81615a64565b60008083601f840112614bcb578182fd5b50813567ffffffffffffffff811115614be2578182fd5b6020830191508360208083028501011115612b2257600080fd5b60008083601f840112614c0d578182fd5b50813567ffffffffffffffff811115614c24578182fd5b602083019150836020828501011115612b2257600080fd5b803561ffff8116811461075b57600080fd5b600060208284031215614c5f578081fd5b813561105681615a64565b600060208284031215614c7b578081fd5b815161105681615a64565b60008060408385031215614c98578081fd5b8235614ca381615a64565b91506020830135614cb381615a64565b809150509250929050565b600080600080600060a08688031215614cd5578081fd5b8535614ce081615a64565b94506020860135614cf081615a64565b93506040860135614d0081615a64565b92506060860135614d1081615a64565b91506080860135614d2081615a64565b809150509295509295909350565b600080600080600060a08688031215614d45578081fd5b8535614d5081615a64565b94506020860135614d6081615a64565b93506040860135614d7081615a64565b9250606086013591506080860135614d2081615a79565b60008060008060008060c08789031215614d9f578081fd5b8635614daa81615a64565b95506020870135614dba81615a64565b94506040870135614dca81615a64565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080600080600060e08c8e031215614e0b578485fd5b614e158d8d614baf565b9a5067ffffffffffffffff8060208e01351115614e30578586fd5b614e408e60208f01358f01614bba565b909b50995060408d0135811015614e55578586fd5b614e658e60408f01358f01614bba565b909950975060608d0135811015614e7a578586fd5b614e8a8e60608f01358f01614bba565b9097509550614e9c8e60808f01614baf565b94508060a08e01351115614eae578384fd5b50614ebf8d60a08e01358e01614bfc565b9093509150614ed18d60c08e01614c3c565b90509295989b509295989b9093969950565b60008060408385031215614ef5578081fd5b8235614f0081615a64565b91506020830135614cb381615a79565b60008060408385031215614f22578182fd5b8235614f2d81615a64565b946020939093013593505050565b600080600060608486031215614f4f578081fd5b8335614f5a81615a64565b9250602084013591506040840135614f7181615a64565b809150509250925092565b60008060008060808587031215614f91578182fd5b8435614f9c81615a64565b9350602085013592506040850135614fb381615a64565b9150614fc28660608701614c3c565b905092959194509250565b60008060008060808587031215614fe2578182fd5b8435614fed81615a64565b93506020850135925060408501359150606085013561500b81615a64565b939692955090935050565b600080600080600060a0868803121561502d578283fd5b853561503881615a64565b94506020860135935060408601359250614d108760608801614c3c565b600060208284031215615066578081fd5b813561105681615a79565b600060208284031215615082578081fd5b815161105681615a79565b60006020828403121561509e578081fd5b5051919050565b600080604083850312156150b7578182fd5b82519150602083015167ffffffffffffffff808211156150d5578283fd5b818501915085601f8301126150e8578283fd5b8151818111156150f6578384fd5b604051601f8201601f191681016020018381118282101715615116578586fd5b60405281815283820160200188101561512d578485fd5b61513e826020830160208701615a38565b809450505050509250929050565b6000806040838503121561515e578182fd5b505080516020909101519092909150565b600080600060608486031215615183578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156151b1578182fd5b845193506020850151925060408501519150606085015164ffffffffff8116811461500b578182fd5b6001600160a01b0316815260200190565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156152275781518752958201959082019060010161520b565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b519052565b6001600160801b03169052565b64ffffffffff169052565b60ff169052565b60008251615292818460208701615a38565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015260408201526001600160801b03909116606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835260208301919091526001600160801b0316604082015260600190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252901515608082015260a00190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a083015260c082015260e08101919091526101000190565b6001600160a01b039c8d168152602081019b909b52988b1660408b015260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408301529091166101608201526101800190565b6001600160a01b039889168152602081019790975260408701959095526060860193909352608085019190915260a084015260c083015290911660e08201526101000190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b600060a0820160a08352806154ce8b836159b3565b90508b9150825b8b81101561550157602083016154f4836154ef8387614baf565b6151da565b90935091506001016154d5565b5083810360208501528881526001600160fb1b03891115615520578283fd5b602089029150818a6020830137016020818101838152848303909101604085015261554b81896151f8565b91505061555b60608401876151eb565b828103608084015261556e818587615232565b9b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156155be5783516001600160a01b031683529284019291840191600101615599565b50909695505050505050565b901515815260200190565b60006020825282518060208401526155f4816040850160208701615a38565b601f01601f19169190910160400192915050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b9051815260200190565b6000610180820190506157a282845161525c565b60208301516157b46020840182615261565b5060408301516157c76040840182615261565b5060608301516157da6060840182615261565b5060808301516157ed6080840182615261565b5060a083015161580060a0840182615261565b5060c083015161581360c084018261526e565b5060e083015161582660e08401826151eb565b506101008084015161583a828501826151eb565b50506101208084015161584f828501826151eb565b505061014080840151615864828501826151eb565b50506101608084015161587982850182615279565b505092915050565b9485526001600160a01b03938416602086015291831660408501528216606084015216608082015260a00190565b9788526001600160a01b03968716602089015294151560408801526060870193909352608086019190915260a085015260c08401521660e08201526101000190565b600060a08201905086825285602083015284604083015283606083015261591783615a2d565b60808301529695505050505050565b918252602082015260400190565b8681526020810186905260c0810161594b86615a2d565b60408301526001600160a01b03949094166060820152608081019290925260a0909101529392505050565b815160608201908260005b60028110156159a0578251825260209283019290910190600101615981565b5050506020830151604083015292915050565b90815260200190565b928352602083019190915261ffff16604082015260600190565b948552602085019390935260408401919091526001600160801b03908116606084015216608082015260a00190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b806003811061073557fe5b60005b83811015615a53578181015183820152602001615a3b565b838111156130aa5750506000910152565b6001600160a01b0381168114611d8e57600080fd5b8015158114611d8e57600080fdfea26469706673582212200ed4e95da06514573c7238d755049a2997ae242f3ab33f5c4842b1e844e0a82764736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101d95760003560e01c8063ab9c4b5d11610104578063cd112382116100a2578063e82fec2f11610071578063e82fec2f1461040b578063e8eda9df14610413578063f8119d5114610426578063fe65acfe1461042e576101d9565b8063cd112382146103bd578063d15e0053146103d0578063d1946dbc146103e3578063d5ed3933146103f8576101d9565b8063bedb86fb116100de578063bedb86fb14610352578063bf92857c14610365578063c44b11f71461038a578063c4d66de8146103aa576101d9565b8063ab9c4b5d14610319578063b3b8c8e51461032c578063b8d292761461033f576101d9565b8063573ade811161017c5780637a708e921161014b5780637a708e92146102d85780638afaff02146102eb57806394ba89a2146102f3578063a415bcad14610306576101d9565b8063573ade811461028a5780635a3b74b91461029d5780635c975abb146102b057806369328dec146102c5576101d9565b806335ea6a75116101b857806335ea6a7514610224578063386497fd146102445780634417a583146102575780635114ee3e14610277576101d9565b8062a718a9146101de578063074b2e43146101f35780631d2118f914610211575b600080fd5b6101f16101ec366004614d2e565b610443565b005b6101fb610619565b60405161020891906159b3565b60405180910390f35b6101f161021f366004614c86565b61061f565b610237610232366004614c4e565b610658565b604051610208919061578e565b6101fb610252366004614c4e565b61073a565b61026a610265366004614c4e565b610761565b6040516102089190615976565b6101f1610285366004614f10565b6107ca565b6101fb610298366004614fcd565b610839565b6101f16102ab366004614ee3565b610b65565b6102b8610d2a565b60405161020891906155ca565b6101fb6102d3366004614f3b565b610d33565b6101f16102e6366004614cbe565b61105d565b6101fb61113f565b6101f1610301366004614f10565b611144565b6101f1610314366004615016565b6114b1565b6101f1610327366004614deb565b6115bf565b6101fb61033a366004614c4e565b611c93565b6101f161034d366004614f10565b611cf2565b6101f1610360366004615055565b611d16565b610378610373366004614c4e565b611d91565b60405161020896959493929190615a05565b61039d610398366004614c4e565b611ea5565b6040516102089190615784565b6101f16103b8366004614c4e565b611ed8565b6101f16103cb366004614c86565b611f81565b6101fb6103de366004614c4e565b6121f7565b6103eb612218565b604051610208919061557d565b6101f1610406366004614d87565b6122bd565b6101fb612506565b6101f1610421366004614f7c565b61250c565b6101fb6127be565b6104366127c4565b604051610208919061529c565b61044b6127d3565b6034546040805163712d917160e01b815290516000926001600160a01b03169163712d9171916004808301926020929190829003018186803b15801561049057600080fd5b505afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190614c6a565b905060006060826001600160a01b031688888888886040516024016104f1959493929190615324565b60408051601f198184030181529181526020820180516001600160e01b031662a718a960e01b179052516105259190615280565b600060405180830381855af49150503d8060008114610560576040519150601f19603f3d011682016040523d82523d6000602084013e610565565b606091505b50915091508160405180604001604052806002815260200161323360f01b815250906105ad5760405162461bcd60e51b81526004016105a491906155d5565b60405180910390fd5b5060006060828060200190518101906105c691906150a5565b9150915081600014816040516020016105df9190615280565b6040516020818303038152906040529061060c5760405162461bcd60e51b81526004016105a491906155d5565b5050505050505050505050565b603b5490565b610627612811565b6001600160a01b03918216600090815260356020526040902060070180546001600160a01b03191691909216179055565b61066061495e565b506001600160a01b0381811660009081526035602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff166101608201525b919050565b6001600160a01b038116600090815260356020526040812061075b906128d0565b92915050565b6107696149c9565b6001600160a01b03821660009081526036602052604090819020815160808101835291829081018260028282826020028201915b81548152602001906001019080831161079d57505050505081526020016002820154815250509050919050565b6107d261294d565b6001600160a01b03821660009081526036602052604090206107f49082612a0c565b816001600160a01b03167fb4c357dea76fc2161034143537a26c6743101401042b516310719af0b8d33ffc8260405161082d91906159b3565b60405180910390a25050565b60006108436127d3565b6001600160a01b038516600090815260356020526040812090806108678584612a14565b91509150600086600281111561087957fe5b60405163fa0c214960e01b815290915073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9063fa0c2149906108bd9087908c9086908c908a908a90600401615934565b60006040518083038186803b1580156108d557600080fd5b505af41580156108e9573d6000803e3d6000fd5b5060009250600191506108f99050565b82600281111561090557fe5b146109105782610912565b835b90508089101561091f5750875b61092885612b29565b600182600281111561093657fe5b14156109a7576005850154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac90610970908a9085906004016152e1565b600060405180830381600087803b15801561098a57600080fd5b505af115801561099e573d6000803e3d6000fd5b50505050610a25565b60068501546001860154604051637a94c56560e11b81526001600160a01b039092169163f5298aca916109f2918b918691600160801b9091046001600160801b0316906004016152fa565b600060405180830381600087803b158015610a0c57600080fd5b505af1158015610a20573d6000803e3d6000fd5b505050505b60048501546001600160a01b0316610a41868c83856000612bf6565b610a5582610a4f8787612f5e565b90612f83565b610a8d5760078601546001600160a01b0389166000908152603660205260408120610a8d929091600160a01b90910460ff1690612fc5565b610aa26001600160a01b038c16338385613052565b6040516388dd91a160e01b81526001600160a01b038216906388dd91a190610ad090339086906004016152e1565b600060405180830381600087803b158015610aea57600080fd5b505af1158015610afe573d6000803e3d6000fd5b50505050336001600160a01b0316886001600160a01b03168c6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610b4f91906159b3565b60405180910390a4509998505050505050505050565b610b6d6127d3565b6001600160a01b03808316600090815260356020818152604080842033855260368352938190206038546034548351631f94a27560e31b81529351969773__$de8c0cf1a7d7c36c802af9a64fb9d86036$__97635fa297e5978a978d978d9792969295603795939493169263fca513a892600480840193919291829003018186803b158015610bfb57600080fd5b505afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c339190614c6a565b6040518963ffffffff1660e01b8152600401610c569897969594939291906158af565b60006040518083038186803b158015610c6e57600080fd5b505af4158015610c82573d6000803e3d6000fd5b505050506007810154336000908152603660205260409020610cae91600160a01b900460ff16846130b0565b8115610cee5760405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610d25565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050565b60395460ff1690565b6000610d3d6127d3565b6001600160a01b0380851660009081526035602052604080822060048082015492516370a0823160e01b8152919492909216929183916370a0823191610d859133910161529c565b60206040518083038186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd5919061508d565b905085600019811415610de55750805b73__$de8c0cf1a7d7c36c802af9a64fb9d86036$__63d09db04a898385603560366000336001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7c57600080fd5b505afa158015610e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb49190614c6a565b6040518963ffffffff1660e01b8152600401610ed798979695949392919061544d565b60006040518083038186803b158015610eef57600080fd5b505af4158015610f03573d6000803e3d6000fd5b50505050610f1084612b29565b610f1e848985600085612bf6565b81811415610f88576007840154336000908152603660205260408120610f51929091600160a01b90910460ff16906130b0565b60405133906001600160a01b038a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6001840154604051636b81068560e11b81526001600160a01b0385169163d7020d0a91610fc99133918b9187916001600160801b03909116906004016152b0565b600060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b0316896001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161104891906159b3565b60405180910390a493505050505b9392505050565b611065612811565b61106e8561312b565b6040518060400160405280600281526020016106e760f31b815250906110a75760405162461bcd60e51b81526004016105a491906155d5565b506001600160a01b038516600090815260356020526040908190209051630acce25f60e21b815273__$22cd43a9dda9ce44e9b92ba393b88fb9ac$__91632b33897c916110ff91908890889088908890600401615881565b60006040518083038186803b15801561111757600080fd5b505af415801561112b573d6000803e3d6000fd5b5050505061113885613164565b5050505050565b600281565b61114c6127d3565b6001600160a01b038216600090815260356020526040812090806111703384612a14565b91509150600084600281111561118257fe5b3360009081526036602052604090819020905163a8695b1d60e01b815291925073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9163a8695b1d916111d3918891908890889088906004016158f1565b60006040518083038186803b1580156111eb57600080fd5b505af41580156111ff573d6000803e3d6000fd5b5050505061120c84612b29565b600181600281111561121a57fe5b141561132a576005840154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac9061125490339087906004016152e1565b600060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916112d291339182918991600160801b90046001600160801b0316906004016152b0565b602060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113249190615071565b50611440565b60068401546001850154604051637a94c56560e11b81526001600160a01b039092169163f5298aca916113759133918791600160801b9091046001600160801b0316906004016152fa565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d916113ec913391829188916001600160801b0316906004016152b0565b602060405180830381600087803b15801561140657600080fd5b505af115801561141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143e9190615071565b505b600484015461145e90859088906001600160a01b0316600080612bf6565b336001600160a01b0316866001600160a01b03167fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca6876040516114a191906159b3565b60405180910390a3505050505050565b6114b96127d3565b6001600160a01b038581166000908152603560209081526040808320938516835260369091529081902081516080810180845261152c93919291839190820190839060029082845b815481526020019060010190808311611501575050505050815260200160028201548152505061326d565b61155a576001600160a01b038216600090815260366020526040902061155a90670de0b6b3a7640000612a0c565b60408051610100810182526001600160a01b038089168252336020830152848116928201929092526060810187905260808101869052600483015490911660a082015261ffff841660c0820152600160e08201526115b790613274565b505050505050565b6115c76127d3565b6115cf6149e9565b61163c8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525061376d92505050565b60608a67ffffffffffffffff8111801561165557600080fd5b5060405190808252806020026020018201604052801561167f578160200160208202803683370190505b50905060608b67ffffffffffffffff8111801561169b57600080fd5b506040519080825280602002602001820160405280156116c5578160200160208202803683370190505b506001600160a01b038f1684526000604085015290505b60408301518c111561188957603560008e8e86604001518181106116fc57fe5b90506020020160208101906117119190614c4e565b6001600160a01b03166001600160a01b0316815260200190815260200160002060040160009054906101000a90046001600160a01b03168284604001518151811061175857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506117af6127106117a9603b548e8e886040015181811061179457fe5b905060200201356137ab90919063ffffffff16565b906137e5565b818460400151815181106117bf57fe5b602002602001018181525050818360400151815181106117db57fe5b60200260200101516001600160a01b0316634efecaa58f8d8d876040015181811061180257fe5b905060200201356040518363ffffffff1660e01b81526004016118269291906152e1565b602060405180830381600087803b15801561184057600080fd5b505af1158015611854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611878919061508d565b5060408301805160010190526116dc565b82600001516001600160a01b031663920f5c848e8e8e8e86338d8d6040518963ffffffff1660e01b81526004016118c79897969594939291906154b9565b602060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190615071565b604051806040016040528060028152602001611b1b60f11b815250906119525760405162461bcd60e51b81526004016105a491906155d5565b50600060408401525b60408301518c1115611c83578c8c846040015181811061197757fe5b905060200201602081019061198c9190614c4e565b6001600160a01b0316606084015260408301518b908b908181106119ac57fe5b905060200201358360a0018181525050808360400151815181106119cc57fe5b60200260200101518360c0018181525050818360400151815181106119ed57fe5b60209081029190910101516001600160a01b0316608084015260c083015160a0840151611a1991612f5e565b60e0840152600089898560400151818110611a3057fe5b905060200201356002811115611a4257fe5b6002811115611a4d57fe5b1415611b7f5760608301516001600160a01b03166000908152603560205260409020611a7890612b29565b611b1883608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af0919061508d565b60c085015160608601516001600160a01b031660009081526035602052604090209190613827565b6060830151608084015160e08501516001600160a01b0383166000908152603560205260408120611b4e94909390929091612bf6565b611b7a8e84608001518560e0015186606001516001600160a01b0316613052909392919063ffffffff16565b611c0e565b611c0e60405180610100016040528085606001516001600160a01b03168152602001336001600160a01b03168152602001896001600160a01b031681526020018560a0015181526020018b8b8760400151818110611bd957fe5b90506020020135815260200185608001516001600160a01b031681526020018661ffff16815260200160001515815250613274565b82606001516001600160a01b0316336001600160a01b03168f6001600160a01b03167f631042c832b07452973831137f2d73e395028b44b250dedc5abb0ee766e168ac8660a001518760c0015189604051611c6b939291906159bc565b60405180910390a4604083018051600101905261195b565b5050505050505050505050505050565b6001600160a01b038116600090815260366020526040808220815160808101808452825493820193845261075b93919291839183906002906001830160608601808311611501575050505050815260200160028201548152505061326d565b611cfa612811565b6001600160a01b03909116600090815260356020526040902055565b611d1e612811565b6039805460ff1916821515179081905560ff1615611d64576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611d8e565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b6001600160a01b038116600090815260366020526040808220815160808101835283928392839283928392611e82928a9260359290829081018260028282826020028201915b815481526020019060010190808311611dd75750505091835250506002919091015460209182015260385460345460408051631f94a27560e31b815290516037946001600160a01b039093169263fca513a89260048082019391829003018186803b158015611e4557600080fd5b505afa158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d9190614c6a565b6138e4565b93995091975090945092509050611e9a868684613da5565b935091939550919395565b611ead614a35565b506001600160a01b031660009081526035602090815260409182902082519182019092529054815290565b6000611ee2613dd9565b60015490915060ff1680611ef95750611ef9613dde565b80611f05575060005481115b611f215760405162461bcd60e51b81526004016105a4906156b5565b60015460ff16158015611f40576001805460ff19168117905560008290555b603480546001600160a01b0319166001600160a01b0385161790556109c4603a556009603b55610100603c558015610d25576001805460ff19169055505050565b611f896127d3565b6001600160a01b038083166000908152603560205260408082206005810154600682015460048084015494516370a0823160e01b81529396928316959183169490921692909185916370a0823191611fe3918a910161529c565b60206040518083038186803b158015611ffb57600080fd5b505afa15801561200f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612033919061508d565b60405163548cad0960e01b815290915073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__9063548cad09906120759088908b90899089908990600401615881565b60006040518083038186803b15801561208d57600080fd5b505af41580156120a1573d6000803e3d6000fd5b505050506120ae85612b29565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac906120dc90899085906004016152e1565b600060405180830381600087803b1580156120f657600080fd5b505af115801561210a573d6000803e3d6000fd5b505050600386015460405163b3f1c93d60e01b81526001600160a01b038716925063b3f1c93d9161214d918a91829187916001600160801b0316906004016152b0565b602060405180830381600087803b15801561216757600080fd5b505af115801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f9190615071565b506121ae858884600080612bf6565b856001600160a01b0316876001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a350505050505050565b6001600160a01b038116600090815260356020526040812061075b90613de4565b60608060385467ffffffffffffffff8111801561223457600080fd5b5060405190808252806020026020018201604052801561225e578160200160208202803683370190505b50905060005b6038548110156122b75760008181526037602052604090205482516001600160a01b039091169083908390811061229757fe5b6001600160a01b0390921660209283029190910190910152600101612264565b50905090565b6122c56127d3565b6001600160a01b038681166000908152603560209081526040918290206004015482518084019093526002835261363360f01b9183019190915290911633146123215760405162461bcd60e51b81526004016105a491906155d5565b506123dd85603560366000896001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a057600080fd5b505afa1580156123b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d89190614c6a565b613e43565b6001600160a01b03868116600090815260356020526040902060070154600160a01b900460ff1690858116908716146124fd5761241a8385612f83565b612486576001600160a01b03861660009081526036602052604081209061244490829084906130b0565b866001600160a01b0316886001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a3505b8115801561249357508315155b156124fd576001600160a01b03851660009081526036602052604090206124bc818360016130b0565b856001600160a01b0316886001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a3505b50505050505050565b603a5490565b6125146127d3565b6001600160a01b0384811660009081526035602090815260408083209386168352603690915290819020815160808101808452825493820193845261258493919291839183906002906001830160608601808311611501575050505050815260200160028201548152505061326d565b6125b2576001600160a01b03831660009081526036602052604090206125b290670de0b6b3a7640000612a0c565b604051630eca322b60e01b815273__$de8c0cf1a7d7c36c802af9a64fb9d86036$__90630eca322b906125eb9084908890600401615926565b60006040518083038186803b15801561260357600080fd5b505af4158015612617573d6000803e3d6000fd5b5050505060048101546001600160a01b031661263282612b29565b612640828783886000612bf6565b6126556001600160a01b038716338388613052565b6001820154604051630ab714fb60e11b81526000916001600160a01b0384169163156e29f6916126979189918b916001600160801b03909116906004016152fa565b602060405180830381600087803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e99190615071565b905080156127635760078301546001600160a01b038616600090815260366020526040902061272391600160a01b900460ff1660016130b0565b846001600160a01b0316876001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b8361ffff16856001600160a01b0316886001600160a01b03167fde6857219544bb5b7746f48ed30be6386fefc61b2f864cacf559893bf50fd951338a6040516127ad9291906152e1565b60405180910390a450505050505050565b603c5490565b6034546001600160a01b031690565b6039546040805180820190915260028152610d8d60f21b60208201529060ff1615611d8e5760405162461bcd60e51b81526004016105a491906155d5565b603454604080516385c858b160e01b8152905133926001600160a01b0316916385c858b1916004808301926020929190829003018186803b15801561285557600080fd5b505afa158015612869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288d9190614c6a565b6001600160a01b03161460405180604001604052806002815260200161323760f01b81525090611d8e5760405162461bcd60e51b81526004016105a491906155d5565b600381015460009064ffffffffff600160801b909104811690421681141561290e5750506001810154600160801b90046001600160801b0316610735565b60018301546002840154600091612945916001600160801b03600160801b9283900481169261293f92041685613f2b565b90613f38565b949350505050565b603454604080516306f0975360e21b8152905133926001600160a01b031691631bc25d4c916004808301926020929190829003018186803b15801561299157600080fd5b505afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614c6a565b6001600160a01b03161460405180604001604052806002815260200161383160f01b81525090611d8e5760405162461bcd60e51b81526004016105a491906155d5565b600290910155565b60058101546040516370a0823160e01b815260009182916001600160a01b03909116906370a0823190612a4b90879060040161529c565b60206040518083038186803b158015612a6357600080fd5b505afa158015612a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9b919061508d565b60068401546040516370a0823160e01b81526001600160a01b03909116906370a0823190612acd90889060040161529c565b60206040518083038186803b158015612ae557600080fd5b505afa158015612af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1d919061508d565b915091505b9250929050565b60068101546040805163b1bf962d60e01b815290516000926001600160a01b03169163b1bf962d916004808301926020929190829003018186803b158015612b7057600080fd5b505afa158015612b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba8919061508d565b60018301546003840154919250600160801b8082046001600160801b03908116939216910464ffffffffff16600080612be48787868887613fcb565b915091506124fd878787858588614128565b612bfe614a48565b60058601546001600160a01b031680825260408051637b98f4df60e11b8152815163f731e9be92600480840193919291829003018186803b158015612c4257600080fd5b505afa158015612c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7a919061514c565b60c083015260408083019190915260018701546006880154825163b1bf962d60e01b81529251612d1f93600160801b9093046001600160801b0316926001600160a01b039092169163b1bf962d916004808301926020929190829003018186803b158015612ce757600080fd5b505afa158015612cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293f919061508d565b60e082018190526007870154604083015160c08401516001600160a01b03909216926329db497d9289928992899289929190612d5a8f6142eb565b6040518963ffffffff1660e01b8152600401612d7d9897969594939291906153a5565b60606040518083038186803b158015612d9557600080fd5b505afa158015612da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcd919061516f565b60a0840152608083015260608201819052604080518082019091526002815261353360f01b6020820152906001600160801b031015612e1f5760405162461bcd60e51b81526004016105a491906155d5565b506080810151604080518082019091526002815261353560f01b6020820152906001600160801b031015612e665760405162461bcd60e51b81526004016105a491906155d5565b5060a08101516040805180820190915260028152610d4d60f21b6020820152906001600160801b031015612ead5760405162461bcd60e51b81526004016105a491906155d5565b506060810151600287018054608084015160038a0180546001600160801b03199081166001600160801b038085169190911790925560a08701519316818616178116600160801b84831681029190911790945560018b01546040516001600160a01b038c16967f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a96612f4e96919594919380831693919004909116906159d6565b60405180910390a2505050505050565b6000828201838110156110565760405162461bcd60e51b81526004016105a490615608565b600061105683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506142f6565b604080518082019091526002815261373760f01b602082015261010083106130005760405162461bcd60e51b81526004016105a491906155d5565b50607f82169160809004600283028261301a57600061301d565b60015b60ff16901b836002026001901b1985600001836002811061303a57fe5b0154161784826002811061304a57fe5b015550505050565b6130aa846323b872dd60e01b85858560405160240161307393929190615358565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614322565b50505050565b604080518082019091526002815261373760f01b602082015261010083106130eb5760405162461bcd60e51b81526004016105a491906155d5565b50607f82169160809004600160028402018261310857600061310b565b60015b60ff16901b836002026001016001901b1985600001836002811061303a57fe5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612945575050151592915050565b603854603c54604080518082019091526002815261363560f01b60208201529082106131a35760405162461bcd60e51b81526004016105a491906155d5565b506001600160a01b038216600090815260356020526040812060070154600160a01b900460ff1615158061320c57506000805260376020527fa0a618d80eda9243166be83cb7421d97e9dab6ddddd3c70ac7a6b4440256e8e7546001600160a01b038481169116145b905080610d2557506001600160a01b03919091166000818152603560209081526040808320600701805460ff60a01b1916600160a01b60ff8816021790558483526037909152902080546001600160a01b0319169091179055600101603855565b6020015190565b80516001600160a01b0390811660009081526035602090815260408083208186015185168452603683528184206034548351631f94a27560e31b81529351929691959491169263fca513a89260048083019392829003018186803b1580156132db57600080fd5b505afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133139190614c6a565b905060006133b461332385614407565b600a0a6117a98760600151856001600160a01b031663b3596f078a600001516040518263ffffffff1660e01b815260040161335e919061529c565b60206040518083038186803b15801561337657600080fd5b505afa15801561338a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ae919061508d565b906137ab565b905073__$de8c0cf1a7d7c36c802af9a64fb9d86036$__63721a92f986600001518688604001518960600151868b60800151603a5460358c60376038548e6040518d63ffffffff1660e01b81526004016134199c9b9a999897969594939291906153e9565b60006040518083038186803b15801561343157600080fd5b505af4158015613445573d6000803e3d6000fd5b5050505061345284612b29565b60008060018760800151600281111561346757fe5b600281111561347257fe5b1415613527576003860154600587015460208901516040808b015160608c0151915163b3f1c93d60e01b81526001600160801b0390951696506001600160a01b039093169363b3f1c93d936134ce93929091889060040161537c565b602060405180830381600087803b1580156134e857600080fd5b505af11580156134fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135209190615071565b90506135d6565b600686015460208801516040808a015160608b015160018b0154925163b3f1c93d60e01b81526001600160a01b039095169463b3f1c93d946135819490939291600160801b9091046001600160801b0316906004016152b0565b602060405180830381600087803b15801561359b57600080fd5b505af11580156135af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d39190615071565b90505b80156135f85760078601546135f8908690600160a01b900460ff166001612fc5565b61362787600001518860a0015160008a60e0015161361757600061361d565b8a606001515b8a93929190612bf6565b8660e00151156136bf578660a001516001600160a01b0316634efecaa5886020015189606001516040518363ffffffff1660e01b815260040161366b9291906152e1565b602060405180830381600087803b15801561368557600080fd5b505af1158015613699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bd919061508d565b505b8660c0015161ffff1687604001516001600160a01b031688600001516001600160a01b03167fc6a898309e823ee50bac64e45ca8adba6690e99e7841c45d754e2a38e9019d9b8a602001518b606001518c608001516001600281111561372157fe5b8e60800151600281111561373157fe5b600281111561373c57fe5b1461375b5760028d0154600160801b90046001600160801b031661375d565b885b6040516127ad9493929190615493565b805182511460405180604001604052806002815260200161373360f01b81525090610d255760405162461bcd60e51b81526004016105a491906155d5565b6000826137ba5750600061075b565b828202828482816137c757fe5b04146110565760405162461bcd60e51b81526004016105a490615674565b600061105683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614411565b600061384461383584614448565b61383e84614448565b90614498565b9050600061385a613853614543565b8390612f5e565b60018601549091506138769082906001600160801b0316613f38565b604080518082019091526002815261353160f01b60208201529091506001600160801b038211156138ba5760405162461bcd60e51b81526004016105a491906155d5565b5060019490940180546001600160801b0319166001600160801b0390951694909417909355505050565b60008060008060006138f4614a96565b6138fd8a614553565b1561391b576000806000806000199550955095509550955050613d97565b600060e08201525b878160e001511015613cf65760e081015161393f908b906145a8565b61394857613ce6565b60e0810151600090815260208a81526040808320546001600160a01b03166101e085018190528352908d9052902061397f8161461a565b506080860181905260c08601929092525060a0840191909152600a0a60208301526101e082015160405163b3596f0760e01b81526001600160a01b038a169163b3596f07916139d1919060040161529c565b60206040518083038186803b1580156139e957600080fd5b505afa1580156139fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a21919061508d565b825260c082015115801590613a41575060e0820151613a41908c90614645565b15613b5f578060040160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b8152600401613a89919061529c565b60206040518083038186803b158015613aa157600080fd5b505afa158015613ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad9919061508d565b6040830181905260208301518351600092613af892916117a9916137ab565b610120840151909150613b0b9082612f5e565b61012084015260a0830151613b3190613b259083906137ab565b61016085015190612f5e565b61016084015260c0830151613b5790613b4b9083906137ab565b61018085015190612f5e565b610180840152505b60e0820151613b6f908c906146bf565b15613ce4578060050160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b8152600401613bb7919061529c565b60206040518083038186803b158015613bcf57600080fd5b505afa158015613be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c07919061508d565b826060018181525050613cb18160060160009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b8152600401613c56919061529c565b60206040518083038186803b158015613c6e57600080fd5b505afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca6919061508d565b606084015190612f5e565b6060830181905260208301518351613cdd92613cd192916117a9916137ab565b61014084015190612f5e565b6101408301525b505b60e0810180516001019052613923565b600081610120015111613d0a576000613d1f565b610120810151610160820151613d1f916137e5565b610160820152610120810151613d36576000613d4b565b610120810151610180820151613d4b916137e5565b6101808201819052610120820151610140830151613d689261471d565b610100820181905261012082015161014083015161016084015161018090940151919850965091945090925090505b965096509650965096915050565b600080613db28584614741565b905083811015613dc6576000915050611056565b613dd08185612f83565b95945050505050565b600290565b303b1590565b600381015460009064ffffffffff600160801b9091048116904216811415613e1b57505060018101546001600160801b0316610735565b60018301546002840154600091612945916001600160801b039182169161293f9116856147b0565b6040805160808101808352600092613e96928a928a928a918391820190839060029082845b815481526020019060010190808311613e6857505050505081526020016002820154815250508787876138e4565b60408051608081018083528c54928201928352929750613ee6965094508a93508492509083906002906001830160608601808311611501575050505050815260200160028201548152505061326d565b811015604051806040016040528060018152602001601b60f91b81525090613f215760405162461bcd60e51b81526004016105a491906155d5565b5050505050505050565b60006110568383426147ee565b6000821580613f45575081155b15613f525750600061075b565b816b019d971e4fe8401e740000001981613f6857fe5b0483111560405180604001604052806002815260200161068760f31b81525090613fa55760405162461bcd60e51b81526004016105a491906155d5565b506b033b2e3c9fd0803ce80000006002815b048385020181613fc357fe5b049392505050565b600285015460009081906001600160801b0316858582156140f9576000613ff284886147b0565b9050613ffe818a613f38565b604080518082019091526002815261353160f01b60208201529093506001600160801b038411156140425760405162461bcd60e51b81526004016105a491906155d5565b5060018b0180546001600160801b0319166001600160801b03851617905589156140f75760028b015460009061408890600160801b90046001600160801b031689613f2b565b9050614094818a613f38565b6040805180820190915260028152611a9960f11b60208201529093506001600160801b038411156140d85760405162461bcd60e51b81526004016105a491906155d5565b505060018b0180546001600160801b03808516600160801b0291161790555b505b600399909901805464ffffffffff60801b1916600160801b4264ffffffffff1602179055989650505050505050565b614130614b30565b614139876142eb565b610120820181905261414b57506115b7565b8660050160009054906101000a90046001600160a01b03166001600160a01b031663797743386040518163ffffffff1660e01b815260040160806040518083038186803b15801561419b57600080fd5b505afa1580156141af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d3919061519c565b64ffffffffff1661014085015260a0840152825260208201526141f68686613f38565b60808201526142058684613f38565b606082015260a0810151610140820151614227919064ffffffffff85166147ee565b60c08201819052602082015161423c91613f38565b604082018190526080820151825160608401516142619392610a4f9290918391612f5e565b60e082018190526101208201516142789190614741565b6101008201819052156124fd57600480880154610100830151604051637df5bd3b60e01b81526001600160a01b0390921692637df5bd3b926142bd9291899101615926565b600060405180830381600087803b1580156142d757600080fd5b505af115801561060c573d6000803e3d6000fd5b5460401c61ffff1690565b6000818484111561431a5760405162461bcd60e51b81526004016105a491906155d5565b505050900390565b614334826001600160a01b031661312b565b6143505760405162461bcd60e51b81526004016105a49061574d565b60006060836001600160a01b03168360405161436c9190615280565b6000604051808303816000865af19150503d80600081146143a9576040519150601f19603f3d011682016040523d82523d6000602084013e6143ae565b606091505b5091509150816143d05760405162461bcd60e51b81526004016105a49061563f565b8051156130aa57808060200190518101906143eb9190615071565b6130aa5760405162461bcd60e51b81526004016105a490615703565b5460301c60ff1690565b600081836144325760405162461bcd60e51b81526004016105a491906155d5565b50600083858161443e57fe5b0495945050505050565b6000633b9aca0082810290839082041460405180604001604052806002815260200161068760f31b815250906144915760405162461bcd60e51b81526004016105a491906155d5565b5092915050565b604080518082019091526002815261035360f41b6020820152600090826144d25760405162461bcd60e51b81526004016105a491906155d5565b5060408051808201909152600280825261068760f31b60208301528304906b033b2e3c9fd0803ce80000008219048511156145205760405162461bcd60e51b81526004016105a491906155d5565b5082816b033b2e3c9fd0803ce80000008602018161453a57fe5b04949350505050565b6b033b2e3c9fd0803ce800000090565b6000805b600260ff8216101561459f57825160ff82166002811061457357fe5b60200201511515806145885750602083015115155b15614597576000915050610735565b600101614557565b50600192915050565b6000610100821060405180604001604052806002815260200161373760f01b815250906145e85760405162461bcd60e51b81526004016105a491906155d5565b508251607f8316926080900490600280850291908390811061460657fe5b6020020151901c6003161515949350505050565b5461ffff80821692601083901c821692602081901c831692603082901c60ff169260409290921c1690565b6000610100821060405180604001604052806002815260200161373760f01b815250906146855760405162461bcd60e51b81526004016105a491906155d5565b50600060808304905060808306925082600202600101846000015182600281106146ab57fe5b6020020151901c6001161515949350505050565b6000610100821060405180604001604052806002815260200161373760f01b815250906146ff5760405162461bcd60e51b81526004016105a491906155d5565b508251607f831692608090049060028085029190839081106146ab57fe5b60008261472d5750600019611056565b6129458361473b8685614741565b906148c4565b600082158061474e575081155b1561475b5750600061075b565b81611388198161476757fe5b0483111560405180604001604052806002815260200161068760f31b815250906147a45760405162461bcd60e51b81526004016105a491906155d5565b50612710600281613fb7565b6000806147c44264ffffffffff8516612f83565b90506129456147d1614543565b6301e133806147e087856137ab565b816147e757fe5b0490612f5e565b6000806148028364ffffffffff8616612f83565b90508061481957614811614543565b915050611056565b600019810160006002831161482f576000614834565b600283035b90506301e13380870460006148498280613f38565b905060006148578284613f38565b90506000600261486b846133ae8a8a6137ab565b8161487257fe5b04905060006006614889846133ae89818d8d6137ab565b8161489057fe5b0490506148b4816148ae84816148a68a8e6137ab565b6148ae614543565b90612f5e565b9c9b505050505050505050505050565b604080518082019091526002815261035360f41b6020820152600090826148fe5760405162461bcd60e51b81526004016105a491906155d5565b5060408051808201909152600280825261068760f31b6020830152830490670de0b6b3a76400008219048511156149485760405162461bcd60e51b81526004016105a491906155d5565b508281670de0b6b3a76400008602018161453a57fe5b604051806101800160405280614972614a35565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101609091015290565b60405180604001604052806149dc614b91565b8152602001600081525090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b6040518060200160405280600081525090565b60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806102400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681526020016000151581526020016000151581525090565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600064ffffffffff1681525090565b60405180604001604052806002906020820280368337509192915050565b803561075b81615a64565b60008083601f840112614bcb578182fd5b50813567ffffffffffffffff811115614be2578182fd5b6020830191508360208083028501011115612b2257600080fd5b60008083601f840112614c0d578182fd5b50813567ffffffffffffffff811115614c24578182fd5b602083019150836020828501011115612b2257600080fd5b803561ffff8116811461075b57600080fd5b600060208284031215614c5f578081fd5b813561105681615a64565b600060208284031215614c7b578081fd5b815161105681615a64565b60008060408385031215614c98578081fd5b8235614ca381615a64565b91506020830135614cb381615a64565b809150509250929050565b600080600080600060a08688031215614cd5578081fd5b8535614ce081615a64565b94506020860135614cf081615a64565b93506040860135614d0081615a64565b92506060860135614d1081615a64565b91506080860135614d2081615a64565b809150509295509295909350565b600080600080600060a08688031215614d45578081fd5b8535614d5081615a64565b94506020860135614d6081615a64565b93506040860135614d7081615a64565b9250606086013591506080860135614d2081615a79565b60008060008060008060c08789031215614d9f578081fd5b8635614daa81615a64565b95506020870135614dba81615a64565b94506040870135614dca81615a64565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080600080600060e08c8e031215614e0b578485fd5b614e158d8d614baf565b9a5067ffffffffffffffff8060208e01351115614e30578586fd5b614e408e60208f01358f01614bba565b909b50995060408d0135811015614e55578586fd5b614e658e60408f01358f01614bba565b909950975060608d0135811015614e7a578586fd5b614e8a8e60608f01358f01614bba565b9097509550614e9c8e60808f01614baf565b94508060a08e01351115614eae578384fd5b50614ebf8d60a08e01358e01614bfc565b9093509150614ed18d60c08e01614c3c565b90509295989b509295989b9093969950565b60008060408385031215614ef5578081fd5b8235614f0081615a64565b91506020830135614cb381615a79565b60008060408385031215614f22578182fd5b8235614f2d81615a64565b946020939093013593505050565b600080600060608486031215614f4f578081fd5b8335614f5a81615a64565b9250602084013591506040840135614f7181615a64565b809150509250925092565b60008060008060808587031215614f91578182fd5b8435614f9c81615a64565b9350602085013592506040850135614fb381615a64565b9150614fc28660608701614c3c565b905092959194509250565b60008060008060808587031215614fe2578182fd5b8435614fed81615a64565b93506020850135925060408501359150606085013561500b81615a64565b939692955090935050565b600080600080600060a0868803121561502d578283fd5b853561503881615a64565b94506020860135935060408601359250614d108760608801614c3c565b600060208284031215615066578081fd5b813561105681615a79565b600060208284031215615082578081fd5b815161105681615a79565b60006020828403121561509e578081fd5b5051919050565b600080604083850312156150b7578182fd5b82519150602083015167ffffffffffffffff808211156150d5578283fd5b818501915085601f8301126150e8578283fd5b8151818111156150f6578384fd5b604051601f8201601f191681016020018381118282101715615116578586fd5b60405281815283820160200188101561512d578485fd5b61513e826020830160208701615a38565b809450505050509250929050565b6000806040838503121561515e578182fd5b505080516020909101519092909150565b600080600060608486031215615183578081fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156151b1578182fd5b845193506020850151925060408501519150606085015164ffffffffff8116811461500b578182fd5b6001600160a01b0316815260200190565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156152275781518752958201959082019060010161520b565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b519052565b6001600160801b03169052565b64ffffffffff169052565b60ff169052565b60008251615292818460208701615a38565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015260408201526001600160801b03909116606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835260208301919091526001600160801b0316604082015260600190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252901515608082015260a00190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03988916815296909716602087015260408601949094526060850192909252608084015260a083015260c082015260e08101919091526101000190565b6001600160a01b039c8d168152602081019b909b52988b1660408b015260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408301529091166101608201526101800190565b6001600160a01b039889168152602081019790975260408701959095526060860193909352608085019190915260a084015260c083015290911660e08201526101000190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b600060a0820160a08352806154ce8b836159b3565b90508b9150825b8b81101561550157602083016154f4836154ef8387614baf565b6151da565b90935091506001016154d5565b5083810360208501528881526001600160fb1b03891115615520578283fd5b602089029150818a6020830137016020818101838152848303909101604085015261554b81896151f8565b91505061555b60608401876151eb565b828103608084015261556e818587615232565b9b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156155be5783516001600160a01b031683529284019291840191600101615599565b50909695505050505050565b901515815260200190565b60006020825282518060208401526155f4816040850160208701615a38565b601f01601f19169190910160400192915050565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b9051815260200190565b6000610180820190506157a282845161525c565b60208301516157b46020840182615261565b5060408301516157c76040840182615261565b5060608301516157da6060840182615261565b5060808301516157ed6080840182615261565b5060a083015161580060a0840182615261565b5060c083015161581360c084018261526e565b5060e083015161582660e08401826151eb565b506101008084015161583a828501826151eb565b50506101208084015161584f828501826151eb565b505061014080840151615864828501826151eb565b50506101608084015161587982850182615279565b505092915050565b9485526001600160a01b03938416602086015291831660408501528216606084015216608082015260a00190565b9788526001600160a01b03968716602089015294151560408801526060870193909352608086019190915260a085015260c08401521660e08201526101000190565b600060a08201905086825285602083015284604083015283606083015261591783615a2d565b60808301529695505050505050565b918252602082015260400190565b8681526020810186905260c0810161594b86615a2d565b60408301526001600160a01b03949094166060820152608081019290925260a0909101529392505050565b815160608201908260005b60028110156159a0578251825260209283019290910190600101615981565b5050506020830151604083015292915050565b90815260200190565b928352602083019190915261ffff16604082015260600190565b948552602085019390935260408401919091526001600160801b03908116606084015216608082015260a00190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b806003811061073557fe5b60005b83811015615a53578181015183820152602001615a3b565b838111156130aa5750506000910152565b6001600160a01b0381168114611d8e57600080fd5b8015158114611d8e57600080fdfea26469706673582212200ed4e95da06514573c7238d755049a2997ae242f3ab33f5c4842b1e844e0a82764736f6c634300060c0033",
  "linkReferences": {
    "contracts/protocol/libraries/logic/ReserveLogic.sol": {
      "ReserveLogic": [
        {
          "length": 20,
          "start": 4341
        }
      ]
    },
    "contracts/protocol/libraries/logic/ValidationLogic.sol": {
      "ValidationLogic": [
        {
          "length": 20,
          "start": 2224
        },
        {
          "length": 20,
          "start": 3025
        },
        {
          "length": 20,
          "start": 3596
        },
        {
          "length": 20,
          "start": 4553
        },
        {
          "length": 20,
          "start": 8298
        },
        {
          "length": 20,
          "start": 9702
        },
        {
          "length": 20,
          "start": 13277
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/protocol/libraries/logic/ReserveLogic.sol": {
      "ReserveLogic": [
        {
          "length": 20,
          "start": 4304
        }
      ]
    },
    "contracts/protocol/libraries/logic/ValidationLogic.sol": {
      "ValidationLogic": [
        {
          "length": 20,
          "start": 2187
        },
        {
          "length": 20,
          "start": 2988
        },
        {
          "length": 20,
          "start": 3559
        },
        {
          "length": 20,
          "start": 4516
        },
        {
          "length": 20,
          "start": 8261
        },
        {
          "length": 20,
          "start": 9665
        },
        {
          "length": 20,
          "start": 13240
        }
      ]
    }
  }
}
