{
  "_format": "hh-sol-artifact-1",
  "contractName": "JulswapV2Pool",
  "sourceName": "contracts/JulswapV2Pool.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "name": "Collect",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "name": "CollectProtocol",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paid0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paid1",
          "type": "uint256"
        }
      ],
      "name": "Flash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "observationCardinalityNextOld",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "observationCardinalityNextNew",
          "type": "uint16"
        }
      ],
      "name": "IncreaseObservationCardinalityNext",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "Initialize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol0Old",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol1Old",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol0New",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol1New",
          "type": "uint8"
        }
      ],
      "name": "SetFeeProtocol",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount0Requested",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1Requested",
          "type": "uint128"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "amount0Requested",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1Requested",
          "type": "uint128"
        }
      ],
      "name": "collectProtocol",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeGrowthGlobal0X128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeGrowthGlobal1X128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "flash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "observationCardinalityNext",
          "type": "uint16"
        }
      ],
      "name": "increaseObservationCardinalityNext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidity",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLiquidityPerTick",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "observations",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "blockTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "int56",
          "name": "tickCumulative",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityCumulativeX128",
          "type": "uint160"
        },
        {
          "internalType": "bool",
          "name": "initialized",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32[]",
          "name": "secondsAgos",
          "type": "uint32[]"
        }
      ],
      "name": "observe",
      "outputs": [
        {
          "internalType": "int56[]",
          "name": "tickCumulatives",
          "type": "int56[]"
        },
        {
          "internalType": "uint160[]",
          "name": "secondsPerLiquidityCumulativeX128s",
          "type": "uint160[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed1",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFees",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "token0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "token1",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "feeProtocol0",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "feeProtocol1",
          "type": "uint8"
        }
      ],
      "name": "setFeeProtocol",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "slot0",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "uint16",
          "name": "observationIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationCardinality",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationCardinalityNext",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "feeProtocol",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "unlocked",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        }
      ],
      "name": "snapshotCumulativesInside",
      "outputs": [
        {
          "internalType": "int56",
          "name": "tickCumulativeInside",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityInsideX128",
          "type": "uint160"
        },
        {
          "internalType": "uint32",
          "name": "secondsInside",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "zeroForOne",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "amountSpecified",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceLimitX96",
          "type": "uint160"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int16",
          "name": "",
          "type": "int16"
        }
      ],
      "name": "tickBitmap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tickSpacing",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "ticks",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidityGross",
          "type": "uint128"
        },
        {
          "internalType": "int128",
          "name": "liquidityNet",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthOutside0X128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthOutside1X128",
          "type": "uint256"
        },
        {
          "internalType": "int56",
          "name": "tickCumulativeOutside",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityOutsideX128",
          "type": "uint160"
        },
        {
          "internalType": "uint32",
          "name": "secondsOutside",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "initialized",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token0",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002ae217901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c6156ad6200024a60003980611fb25280614bd55280614c0c525080610bb8528061289e5280614c405280614c72525080610ca7528061198f52806119c652806128e652508061118c5280611a495280611eb852806123ed52806128c25280613f0952508061088a52806112ba5280611a185280611e5252806123675280613dc052508061203f5280612226528061287a525080612b5952506156ad6000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c806370cf754a116100ce578063c45a015511610087578063c45a015514610789578063d0c93a7c14610791578063d21220a7146107b0578063ddca3f43146107b8578063f3058399146107d8578063f30dba93146107e0578063f637731d146108625761016e565b806370cf754a146105805780638206a4d11461058857806385b66729146105b0578063883bdbfd146105ed578063a34123a7146106f4578063a38807f21461072e5761016e565b80633850c7bd1161012b5780633850c7bd146103195780633c8a7d8d146103725780634614131914610412578063490e6cbc1461042c5780634f1eb3d8146104b6578063514ea4bf146105075780635339c296146105605761016e565b80630dfe168114610173578063128acb08146101975780631a686502146102445780631ad8b03b14610268578063252c09d71461029f57806332148f67146102f6575b600080fd5b61017b610888565b604080516001600160a01b039092168252519081900360200190f35b61022b600480360360a08110156101ad57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460018302840111600160201b8311171561022057600080fd5b5090925090506108ac565b6040805192835260208301919091528051918290030190f35b61024c611472565b604080516001600160801b039092168252519081900360200190f35b610270611481565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102bc600480360360208110156102b557600080fd5b503561149b565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103176004803603602081101561030c57600080fd5b503561ffff166114e0565b005b6103216115da565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61022b600480360360a081101561038857600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a081016080820135600160201b8111156103d457600080fd5b8201836020820111156103e657600080fd5b803590602001918460018302840111600160201b8311171561040757600080fd5b50909250905061162a565b61041a6118e6565b60408051918252519081900360200190f35b6103176004803603608081101561044257600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561047857600080fd5b82018360208201111561048a57600080fd5b803590602001918460018302840111600160201b831117156104ab57600080fd5b5090925090506118ec565b610270600480360360a08110156104cc57600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d47565b6105246004803603602081101561051d57600080fd5b5035611f61565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61041a6004803603602081101561057657600080fd5b503560010b611f9e565b61024c611fb0565b6103176004803603604081101561059e57600080fd5b5060ff81358116916020013516611fd4565b610270600480360360608110156105c657600080fd5b506001600160a01b03813516906001600160801b03602082013581169160400135166121b8565b61065b6004803603602081101561060357600080fd5b810190602081018135600160201b81111561061d57600080fd5b82018360208201111561062f57600080fd5b803590602001918460208302840111600160201b8311171561065057600080fd5b509092509050612485565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561069f578181015183820152602001610687565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106de5781810151838201526020016106c6565b5050505090500194505050505060405180910390f35b61022b6004803603606081101561070a57600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612512565b6107586004803603604081101561074457600080fd5b508035600290810b9160200135900b612689565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b61017b612878565b61079961289c565b6040805160029290920b8252519081900360200190f35b61017b6128c0565b6107c06128e4565b6040805162ffffff9092168252519081900360200190f35b61041a612908565b610800600480360360208110156107f657600080fd5b503560020b61290e565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b6103176004803603602081101561087857600080fd5b50356001600160a01b0316612978565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108b7612b4e565b856108ee576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109a7576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b876109f25780600001516001600160a01b0316866001600160a01b03161180156109ed575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a24565b80600001516001600160a01b0316866001600160a01b0316108015610a2457506401000276a36001600160a01b038716115b610a5b576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610a8a5760048460a0015160ff16901c610a9d565b60108460a0015160ff1681610a9b57fe5b065b60ff1681526004546001600160801b03166020820152604001610abe612b85565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b3a57600254610b3e565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610b8d5750886001600160a01b031681604001516001600160a01b031614155b15610f7e57610b9a61563d565b60408201516001600160a01b031681526060820151610bdd906006907f00000000000000000000000000000000000000000000000000000000000000008f612b8a565b15156040830152600290810b810b60208301819052620d89e719910b1215610c0e57620d89e7196020820152610c2d565b6020810151620d89e860029190910b1315610c2d57620d89e860208201525b610c3a8160200151612ccc565b6001600160a01b031660608201526040820151610ccb908d610c74578b6001600160a01b031683606001516001600160a01b031611610c8e565b8b6001600160a01b031683606001516001600160a01b0316105b610c9c578260600151610c9e565b8b5b60c085015185517f0000000000000000000000000000000000000000000000000000000000000000612ff3565b60c085015260a084015260808301526001600160a01b031660408301526103e8610cf36131e5565b8260c001510281610d0057fe5b60c0830180519290910490910390528215610d5457610d288160c001518260800151016133a5565b825103825260a0810151610d4a90610d3f906133a5565b6020840151906133bb565b6020830152610d8f565b610d618160a001516133a5565b825101825260c08101516080820151610d8991610d7e91016133a5565b6020840151906133d7565b60208301525b835160ff1615610dd5576000846000015160ff168260c0015181610daf57fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e1457610e088160c00151600160801b8460c001516001600160801b03166133ed565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f3d57806040015115610f14578360a00151610e9e57610e7c846040015160008760200151886040015188602001518a60600151600861349d909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610eea82602001518e610eb557600154610ebb565b84608001515b8f610eca578560800151610ece565b6002545b608089015160608a015160408b0151600595949392919061362f565b90508c15610ef6576000035b610f048360c00151826136e9565b6001600160801b031660c0840152505b8b610f23578060200151610f2c565b60018160200151035b600290810b900b6060830152610f78565b80600001516001600160a01b031682604001516001600160a01b031614610f7857610f6b826040015161379f565b600290810b900b60608301525b50610b67565b836020015160020b816060015160020b1461104c57600080610fcc86604001518660400151886020015188602001518a606001518b608001516008613a9e909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b03909116179055506110719050565b6040810151600080546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110b75760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561110757608081015160015560a08101516001600160801b0316156111025760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b61114d565b608081015160025560a08101516001600160801b03161561114d5760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b15151461116657602081015181518b03611173565b80600001518a0381602001515b90965094508a156112ac5760008512156111b5576111b57f00000000000000000000000000000000000000000000000000000000000000008d87600003613c24565b60006111bf613d72565b9050336001600160a01b0316631c22ccb588888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561124357600080fd5b505af1158015611257573d6000803e3d6000fd5b50505050611263613d72565b61126d8289613eab565b11156112a6576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b506113d6565b60008612156112e3576112e37f00000000000000000000000000000000000000000000000000000000000000008d88600003613c24565b60006112ed613ebb565b9050336001600160a01b0316631c22ccb588888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561137157600080fd5b505af1158015611385573d6000803e3d6000fd5b50505050611391613ebb565b61139b8288613eab565b11156113d4576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114ac57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611524576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611539612b4e565b60008054600160d81b900461ffff169061155560088385613f53565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115c2576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff16611671576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b03851661169157600080fd5b6000806116df60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016116d58a6001600160801b0316613ff6565b600f0b9052614007565b92509250508193508092506000806000861115611701576116fe613d72565b91505b84156117125761170f613ebb565b90505b336001600160a01b031663dc121a3687878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050505060008611156117ff576117bd613d72565b6117c78388613eab565b11156117ff576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561184f5761180d613ebb565b6118178287613eab565b111561184f576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff16611930576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611945612b4e565b6004546001600160801b031680611987576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119bc867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f4240614247565b905060006119f3867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f4240614247565b905060006119ff613d72565b90506000611a0b613ebb565b90508815611a3e57611a3e7f00000000000000000000000000000000000000000000000000000000000000008b8b613c24565b8715611a6f57611a6f7f00000000000000000000000000000000000000000000000000000000000000008b8a613c24565b336001600160a01b031663f9b762dc85858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611af157600080fd5b505af1158015611b05573d6000803e3d6000fd5b505050506000611b13613d72565b90506000611b1f613ebb565b905081611b2c8588613eab565b1115611b64576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611b6f8487613eab565b1115611ba7576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c365760008054600160e81b9004600f16908115611bda578160ff168481611bd457fe5b04611bdd565b60005b90506001600160801b03811615611c1057600380546001600160801b038082168401166001600160801b03199091161790555b611c2a818503600160801b8d6001600160801b03166133ed565b60018054909101905550505b8015611cc15760008054600160e81b900460041c600f16908115611c66578160ff168381611c6057fe5b04611c69565b60005b90506001600160801b03811615611c9b57600380546001600160801b03600160801b8083048216850182160291161790555b611cb5818403600160801b8d6001600160801b03166133ed565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611d8e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611da86007338989614281565b60038101549091506001600160801b0390811690861611611dc95784611dd8565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e005783611e16565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611e7b576003810180546001600160801b031981166001600160801b03918216869003821617909155611e7b907f0000000000000000000000000000000000000000000000000000000000000000908a908616613c24565b6001600160801b03821615611ee1576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611ee1907f0000000000000000000000000000000000000000000000000000000000000000908a908516613c24565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612018576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b50516001600160a01b031633146120c557600080fd5b60ff821615806120e8575060048260ff16101580156120e85750600a8260ff1611155b8015612112575060ff81161580612112575060048160ff16101580156121125750600a8160ff1611155b61211b57600080fd5b60008054610ff0600484901b16840160ff908116600160e81b90810260ff60e81b19841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff166121ff576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561226c57600080fd5b505afa158015612280573d6000803e3d6000fd5b505050506040513d602081101561229657600080fd5b50516001600160a01b031633146122ac57600080fd5b6003546001600160801b03908116908516116122c857836122d5565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116122fb578261230f565b600354600160801b90046001600160801b03165b90506001600160801b03821615612390576003546001600160801b038381169116141561233e57600019909101905b600380546001600160801b031981166001600160801b03918216859003821617909155612390907f00000000000000000000000000000000000000000000000000000000000000009087908516613c24565b6001600160801b03811615612416576003546001600160801b03828116600160801b9092041614156123c157600019015b600380546001600160801b03600160801b808304821685900382160291811691909117909155612416907f00000000000000000000000000000000000000000000000000000000000000009087908416613c24565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b606080612490612b4e565b61250761249b612b85565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b9004166142e5565b915091509250929050565b600080548190600160f01b900460ff16612559576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b91810191909152819081906125b290606081016125a56001600160801b038a16613ff6565b600003600f0b9052614007565b92509250925081600003945080600003935060008511806125d35750600084115b15612612576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b6000806000612696612b4e565b6126a0858561443f565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b93600160381b82046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061270457600080fd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061274557600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b121590506127ee57509390940396509003935090039050612871565b8a60020b816020015160020b121561286257600061280a612b85565b6020830151604084015160045460608601519394506000938493612840936008938893879392916001600160801b03169061349d565b9a9003989098039b505094909603929092039650909103039250612871915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b0316156129bb576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b60006129c68261379f565b90506000806129de6129d6612b85565b600890614508565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b6001600160a01b0319909116871762ffffff60a01b1916600160a01b62ffffff9787900b97909716969096029590951763ffffffff60b81b1916600160c81b9091021761ffff60d81b1916600160d81b9096029590951761ffff60e81b191692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612af757fe5b05029050600083600281900b620d89e881612b0e57fe5b0502905060008460020b83830360020b81612b2557fe5b0560010190508062ffffff166001600160801b03801681612b4257fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b8357600080fd5b565b425b90565b60008060008460020b8660020b81612b9e57fe5b05905060008660020b128015612bc557508460020b8660020b81612bbe57fe5b0760020b15155b15612bcf57600019015b8315612c4457600080612be183614554565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612c2657888360ff16860302612c39565b88612c3082614566565b840360ff168603025b965050505050612cc2565b600080612c5383600101614554565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612ca557888360ff0360ff16866001010102612cbb565b8883612cb083614600565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612ce3578260020b612ceb565b8260020b6000035b9050620d89e8811115612d29576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612d3d57600160801b612d4f565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615612d79576ffff97272373d413259a46990580e213a0260801c5b6004821615612d98576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612db7576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612dd6576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612df5576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612e14576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612e33576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612e53576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612e73576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612e93576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612eb3576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ed3576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612ef3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612f13576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612f33576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612f54576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612f74576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612f93576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612fb0576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612fcb578060001981612fc757fe5b0490505b600160201b810615612fde576001612fe1565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061307857600061302c8989620f42400362ffffff16620f42406133ed565b905082613045576130408c8c8c60016146ea565b613052565b6130528b8d8c6001614765565b9550858110613063578a9650613072565b61306f8c8b8386614810565b96505b506130c2565b8161308f5761308a8b8b8b6000614765565b61309c565b61309c8a8c8b60006146ea565b93508388600003106130b0578995506130c2565b6130bf8b8a8a6000038561485c565b95505b6001600160a01b038a8116908716148215613125578080156130e15750815b6130f7576130f2878d8c6001614765565b6130f9565b855b9550808015613106575081155b61311c57613117878d8c60006146ea565b61311e565b845b945061316f565b80801561312f5750815b613145576131408c888c60016146ea565b613147565b855b9550808015613154575081155b61316a576131658c888c6000614765565b61316c565b845b94505b8115801561317f57508860000385115b1561318b578860000394505b8180156131aa57508a6001600160a01b0316876001600160a01b031614155b156131b95785890393506131d6565b6131d3868962ffffff168a620f42400362ffffff16614247565b93505b50505095509550955095915050565b604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1781529151815160009384938493735a41f637c3f7553dba6ddc2d3ca92641096577ea93919290918291908083835b602083106132695780518252601f19909201916020918201910161324a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146132c9576040519150601f19603f3d011682016040523d82523d6000602084013e6132ce565b606091505b50915091508180156132e257506020815110155b6132eb57600080fd5b600081806020019051602081101561330257600080fd5b5051905068056bc75e2d631000008110156133235760009350505050612b87565b683635c9adc5dea000008110156133405760199350505050612b87565b69021e19e0c9bab240000081101561335e5760329350505050612b87565b69152d02c7e14af680000081101561337c5760649350505050612b87565b69d3c21bcecceda100000081101561339a5760fa9350505050612b87565b6101f4935050505090565b6000600160ff1b82106133b757600080fd5b5090565b808203828113156000831215146133d157600080fd5b92915050565b818101828112156000831215146133d157600080fd5b6000808060001985870986860292508281109083900303905080613423576000841161341857600080fd5b508290049050613496565b80841161342f57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613543576000898661ffff1661ffff81106134be57fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461352f5761352c818a89886148a8565b90505b806020015181604001519250925050613623565b8688036000806135588c8c858c8c8c8c61494b565b91509150816000015163ffffffff168363ffffffff16141561358a578160200151826040015194509450505050613623565b805163ffffffff848116911614156135b2578060200151816040015194509450505050613623565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816135e057fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161361257fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b03600160381b808504821690960316909402600160381b600160d81b031990921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561374e57826001600160801b03168260000384039150816001600160801b031610613749576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6133d1565b826001600160801b03168284019150816001600160801b031610156133d1576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906137db575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613810576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106138a457607f810383901c91506138ae565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613a8f57886001600160a01b0316613a7382612ccc565b6001600160a01b03161115613a885781613a8a565b805b613a91565b815b9998505050505050505050565b6000806000898961ffff1661ffff8110613ab457fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613b235788859250925050613623565b8461ffff168461ffff16118015613b4457506001850361ffff168961ffff16145b15613b5157839150613b55565b8491505b8161ffff168960010161ffff1681613b6957fe5b069250613b78818989896148a8565b8a8461ffff1661ffff8110613b8957fe5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02600160581b600160f81b031960069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613ca05780518252601f199092019160209182019101613c81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613d02576040519150601f19603f3d011682016040523d82523d6000602084013e613d07565b606091505b5091509150818015613d35575080511580613d355750808060200190516020811015613d3257600080fd5b50515b613d6b576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613e0b5780518252601f199092019160209182019101613dec565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613e6b576040519150601f19603f3d011682016040523d82523d6000602084013e613e70565b606091505b5091509150818015613e8457506020815110155b613e8d57600080fd5b808060200190516020811015613ea257600080fd5b50519250505090565b808201828110156133d157600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613e0b5780518252601f199092019160209182019101613dec565b6000808361ffff1611613f91576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613fa7575081613496565b825b8261ffff168161ffff161015613fed576001858261ffff1661ffff8110613fcc57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613fa9565b50909392505050565b80600f81900b8114612b4957600080fd5b6000806000614014612b4e565b6140268460200151856040015161443f565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c0850152885190890151948901519289015193946140ca9491939092909190614b45565b93508460600151600f0b60001461423f57846020015160020b816020015160020b121561411f576141186141018660200151612ccc565b61410e8760400151612ccc565b8760600151614cfa565b925061423f565b846040015160020b816020015160020b12156142155760045460408201516001600160801b039091169061417190614155612b85565b6020850151606086015160808701516008949392918791613a9e565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b9390921692909202179055815160408701516141c191906141b790612ccc565b8860600151614cfa565b93506141df6141d38760200151612ccc565b83516060890151614d3e565b92506141ef8187606001516136e9565b600480546001600160801b0319166001600160801b03929092169190911790555061423f565b61423c6142258660200151612ccc565b6142328760400151612ccc565b8760600151614d3e565b91505b509193909250565b60006142548484846133ed565b90506000828061426057fe5b848609111561349657600019811061427757600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614325576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561433d57600080fd5b50604051908082528060200260200182016040528015614367578160200160208202803683370190505b509150865167ffffffffffffffff8111801561438257600080fd5b506040519080825280602002602001820160405280156143ac578160200160208202803683370190505b50905060005b8751811015614432576143dd8a8a8a84815181106143cc57fe5b60200260200101518a8a8a8a61349d565b8483815181106143e957fe5b602002602001018484815181106143fc57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b815250505080806001019150506143b2565b5097509795505050505050565b8060020b8260020b1261447f576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b12156144c2576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614504576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b600080821161457457600080fd5b600160801b821061458757608091821c91015b600160401b821061459a57604091821c91015b600160201b82106145ad57602091821c91015b6201000082106145bf57601091821c91015b61010082106145d057600891821c91015b601082106145e057600491821c91015b600482106145f057600291821c91015b60028210612b4957600101919050565b600080821161460e57600080fd5b5060ff6001600160801b0382161561462957607f1901614631565b608082901c91505b67ffffffffffffffff82161561464a57603f1901614652565b604082901c91505b63ffffffff82161561466757601f190161466f565b602082901c91505b61ffff82161561468257600f190161468a565b601082901c91505b60ff82161561469c57600719016146a4565b600882901c91505b600f8216156146b657600319016146be565b600482901c91505b60038216156146d057600119016146d8565b600282901c91505b6001821615612b495760001901919050565b6000836001600160a01b0316856001600160a01b0316111561470a579293925b8161473757614732836001600160801b03168686036001600160a01b0316600160601b6133ed565b61475a565b61475a836001600160801b03168686036001600160a01b0316600160601b614247565b90505b949350505050565b6000836001600160a01b0316856001600160a01b03161115614785579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166147af57600080fd5b836147df57866001600160a01b03166147d28383896001600160a01b03166133ed565b816147d957fe5b04614805565b6148056147f68383896001600160a01b0316614247565b886001600160a01b0316614d6d565b979650505050505050565b600080856001600160a01b03161161482757600080fd5b6000846001600160801b03161161483d57600080fd5b8161484f576147328585856001614d78565b61475a8585856001614e59565b600080856001600160a01b03161161487357600080fd5b6000846001600160801b03161161488957600080fd5b8161489b576147328585856000614e59565b61475a8585856000614d78565b6148b0615679565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b031611614904576001614906565b845b6001600160801b031663ffffffff60801b608085901b168161492457fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614953615679565b61495b615679565b888561ffff1661ffff811061496c57fe5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff161515606082015292506149d090899089614f3c565b15614a08578663ffffffff16826000015163ffffffff1614156149f257613623565b816149ff838989886148a8565b91509150613623565b888361ffff168660010161ffff1681614a1d57fe5b0661ffff1661ffff8110614a2d57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614ae257604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614af188836000015189614f3c565b614b28576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614b358989898887614ffd565b9150915097509795505050505050565b6000614b546007878787614281565b60015460025491925090600080600f87900b15614c9a576000614b75612b85565b6000805460045492935090918291614bbf9160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b90041661349d565b9092509050614bf960058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061519b565b9450614c3060058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061519b565b93508415614c6457614c6460068d7f0000000000000000000000000000000000000000000000000000000000000000615354565b8315614c9657614c9660068c7f0000000000000000000000000000000000000000000000000000000000000000615354565b5050505b600080614cac60058c8c8b8a8a6153ba565b9092509050614cbd878a8484615466565b600089600f0b1215614ceb578315614cda57614cda60058c6155fb565b8215614ceb57614ceb60058b6155fb565b50505050505095945050505050565b60008082600f0b12614d2057614d1b614d168585856001614765565b6133a5565b61475d565b614d33614d168585856000036000614765565b600003949350505050565b60008082600f0b12614d5a57614d1b614d1685858560016146ea565b614d33614d1685858560000360006146ea565b808204910615150190565b60008115614deb5760006001600160a01b03841115614dae57614da984600160601b876001600160801b03166133ed565b614dc6565b6001600160801b038516606085901b81614dc457fe5b045b9050614de3614dde6001600160a01b03881683613eab565b615627565b91505061475d565b60006001600160a01b03841115614e1957614e1484600160601b876001600160801b0316614247565b614e30565b614e30606085901b6001600160801b038716614d6d565b905080866001600160a01b031611614e4757600080fd5b6001600160a01b03861603905061475d565b600082614e6757508361475d565b600160601b600160e01b03606085901b168215614ef5576001600160a01b03861684810290858281614e9557fe5b041415614ec657818101828110614ec457614eba83896001600160a01b031683614247565b935050505061475d565b505b614eec82614ee7878a6001600160a01b03168681614ee057fe5b0490613eab565b614d6d565b9250505061475d565b6001600160a01b03861684810290858281614f0c57fe5b04148015614f1957508082115b614f2257600080fd5b808203614eba614dde846001600160a01b038b1684614247565b60008363ffffffff168363ffffffff1611158015614f6657508363ffffffff168263ffffffff1611155b15614f82578163ffffffff168363ffffffff1611159050613496565b60008463ffffffff168463ffffffff1611614fa9578363ffffffff16600160201b01614fb1565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614fe1578363ffffffff16600160201b01614fe9565b8363ffffffff165b64ffffffffff169091111595945050505050565b615005615679565b61500d615679565b60008361ffff168560010161ffff168161502357fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161505057fe5b0661ffff811061505c57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082018190529095506150c65780600101925061503b565b898661ffff1682600101816150d757fe5b0661ffff81106150e357fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820152855190945060009061514d908b908b614f3c565b905080801561516657506151668a8a8760000151614f3c565b15615171575061518e565b8061518157600182039250615188565b8160010193505b5061503b565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b0316826151c6828d6136e9565b9050846001600160801b0316816001600160801b03161115615214576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b0382811615908216158114159450156152b9578c60020b8e60020b136152a157600183018b9055600283018a9055600383018054600160381b600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b038216178355856153025782546152fd906152f890600160801b9004600f90810b810b908f900b6133d7565b613ff6565b615323565b8254615323906152f890600160801b9004600f90810b810b908f900b6133bb565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161536357fe5b0760020b1561537157600080fd5b60008061538c8360020b8560020b8161538657fe5b05614554565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b1261540057505060018201546002830154615413565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561543557505060018301546002840154615448565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6155055781516001600160801b03166154fd576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615514565b815161551190866136e9565b90505b60006155388360200151860384600001516001600160801b0316600160801b6133ed565b9050600061555e8460400151860385600001516001600160801b0316600160801b6133ed565b905086600f0b6000146155855787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b0382161515806155b357506000816001600160801b0316115b156155f1576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612b4957600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016e5760003560e01c806370cf754a116100ce578063c45a015511610087578063c45a015514610789578063d0c93a7c14610791578063d21220a7146107b0578063ddca3f43146107b8578063f3058399146107d8578063f30dba93146107e0578063f637731d146108625761016e565b806370cf754a146105805780638206a4d11461058857806385b66729146105b0578063883bdbfd146105ed578063a34123a7146106f4578063a38807f21461072e5761016e565b80633850c7bd1161012b5780633850c7bd146103195780633c8a7d8d146103725780634614131914610412578063490e6cbc1461042c5780634f1eb3d8146104b6578063514ea4bf146105075780635339c296146105605761016e565b80630dfe168114610173578063128acb08146101975780631a686502146102445780631ad8b03b14610268578063252c09d71461029f57806332148f67146102f6575b600080fd5b61017b610888565b604080516001600160a01b039092168252519081900360200190f35b61022b600480360360a08110156101ad57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a081016080820135600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460018302840111600160201b8311171561022057600080fd5b5090925090506108ac565b6040805192835260208301919091528051918290030190f35b61024c611472565b604080516001600160801b039092168252519081900360200190f35b610270611481565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102bc600480360360208110156102b557600080fd5b503561149b565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103176004803603602081101561030c57600080fd5b503561ffff166114e0565b005b6103216115da565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61022b600480360360a081101561038857600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a081016080820135600160201b8111156103d457600080fd5b8201836020820111156103e657600080fd5b803590602001918460018302840111600160201b8311171561040757600080fd5b50909250905061162a565b61041a6118e6565b60408051918252519081900360200190f35b6103176004803603608081101561044257600080fd5b6001600160a01b038235169160208101359160408201359190810190608081016060820135600160201b81111561047857600080fd5b82018360208201111561048a57600080fd5b803590602001918460018302840111600160201b831117156104ab57600080fd5b5090925090506118ec565b610270600480360360a08110156104cc57600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d47565b6105246004803603602081101561051d57600080fd5b5035611f61565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61041a6004803603602081101561057657600080fd5b503560010b611f9e565b61024c611fb0565b6103176004803603604081101561059e57600080fd5b5060ff81358116916020013516611fd4565b610270600480360360608110156105c657600080fd5b506001600160a01b03813516906001600160801b03602082013581169160400135166121b8565b61065b6004803603602081101561060357600080fd5b810190602081018135600160201b81111561061d57600080fd5b82018360208201111561062f57600080fd5b803590602001918460208302840111600160201b8311171561065057600080fd5b509092509050612485565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561069f578181015183820152602001610687565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156106de5781810151838201526020016106c6565b5050505090500194505050505060405180910390f35b61022b6004803603606081101561070a57600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612512565b6107586004803603604081101561074457600080fd5b508035600290810b9160200135900b612689565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b61017b612878565b61079961289c565b6040805160029290920b8252519081900360200190f35b61017b6128c0565b6107c06128e4565b6040805162ffffff9092168252519081900360200190f35b61041a612908565b610800600480360360208110156107f657600080fd5b503560020b61290e565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b6103176004803603602081101561087857600080fd5b50356001600160a01b0316612978565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108b7612b4e565b856108ee576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109a7576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b876109f25780600001516001600160a01b0316866001600160a01b03161180156109ed575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a24565b80600001516001600160a01b0316866001600160a01b0316108015610a2457506401000276a36001600160a01b038716115b610a5b576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610a8a5760048460a0015160ff16901c610a9d565b60108460a0015160ff1681610a9b57fe5b065b60ff1681526004546001600160801b03166020820152604001610abe612b85565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b3a57600254610b3e565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610b8d5750886001600160a01b031681604001516001600160a01b031614155b15610f7e57610b9a61563d565b60408201516001600160a01b031681526060820151610bdd906006907f00000000000000000000000000000000000000000000000000000000000000008f612b8a565b15156040830152600290810b810b60208301819052620d89e719910b1215610c0e57620d89e7196020820152610c2d565b6020810151620d89e860029190910b1315610c2d57620d89e860208201525b610c3a8160200151612ccc565b6001600160a01b031660608201526040820151610ccb908d610c74578b6001600160a01b031683606001516001600160a01b031611610c8e565b8b6001600160a01b031683606001516001600160a01b0316105b610c9c578260600151610c9e565b8b5b60c085015185517f0000000000000000000000000000000000000000000000000000000000000000612ff3565b60c085015260a084015260808301526001600160a01b031660408301526103e8610cf36131e5565b8260c001510281610d0057fe5b60c0830180519290910490910390528215610d5457610d288160c001518260800151016133a5565b825103825260a0810151610d4a90610d3f906133a5565b6020840151906133bb565b6020830152610d8f565b610d618160a001516133a5565b825101825260c08101516080820151610d8991610d7e91016133a5565b6020840151906133d7565b60208301525b835160ff1615610dd5576000846000015160ff168260c0015181610daf57fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e1457610e088160c00151600160801b8460c001516001600160801b03166133ed565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f3d57806040015115610f14578360a00151610e9e57610e7c846040015160008760200151886040015188602001518a60600151600861349d909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610eea82602001518e610eb557600154610ebb565b84608001515b8f610eca578560800151610ece565b6002545b608089015160608a015160408b0151600595949392919061362f565b90508c15610ef6576000035b610f048360c00151826136e9565b6001600160801b031660c0840152505b8b610f23578060200151610f2c565b60018160200151035b600290810b900b6060830152610f78565b80600001516001600160a01b031682604001516001600160a01b031614610f7857610f6b826040015161379f565b600290810b900b60608301525b50610b67565b836020015160020b816060015160020b1461104c57600080610fcc86604001518660400151886020015188602001518a606001518b608001516008613a9e909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b03909116179055506110719050565b6040810151600080546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110b75760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561110757608081015160015560a08101516001600160801b0316156111025760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b61114d565b608081015160025560a08101516001600160801b03161561114d5760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b15151461116657602081015181518b03611173565b80600001518a0381602001515b90965094508a156112ac5760008512156111b5576111b57f00000000000000000000000000000000000000000000000000000000000000008d87600003613c24565b60006111bf613d72565b9050336001600160a01b0316631c22ccb588888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561124357600080fd5b505af1158015611257573d6000803e3d6000fd5b50505050611263613d72565b61126d8289613eab565b11156112a6576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b506113d6565b60008612156112e3576112e37f00000000000000000000000000000000000000000000000000000000000000008d88600003613c24565b60006112ed613ebb565b9050336001600160a01b0316631c22ccb588888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561137157600080fd5b505af1158015611385573d6000803e3d6000fd5b50505050611391613ebb565b61139b8288613eab565b11156113d4576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114ac57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611524576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611539612b4e565b60008054600160d81b900461ffff169061155560088385613f53565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115c2576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff16611671576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b03851661169157600080fd5b6000806116df60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016116d58a6001600160801b0316613ff6565b600f0b9052614007565b92509250508193508092506000806000861115611701576116fe613d72565b91505b84156117125761170f613ebb565b90505b336001600160a01b031663dc121a3687878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b5050505060008611156117ff576117bd613d72565b6117c78388613eab565b11156117ff576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561184f5761180d613ebb565b6118178287613eab565b111561184f576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff16611930576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611945612b4e565b6004546001600160801b031680611987576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119bc867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f4240614247565b905060006119f3867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f4240614247565b905060006119ff613d72565b90506000611a0b613ebb565b90508815611a3e57611a3e7f00000000000000000000000000000000000000000000000000000000000000008b8b613c24565b8715611a6f57611a6f7f00000000000000000000000000000000000000000000000000000000000000008b8a613c24565b336001600160a01b031663f9b762dc85858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611af157600080fd5b505af1158015611b05573d6000803e3d6000fd5b505050506000611b13613d72565b90506000611b1f613ebb565b905081611b2c8588613eab565b1115611b64576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611b6f8487613eab565b1115611ba7576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c365760008054600160e81b9004600f16908115611bda578160ff168481611bd457fe5b04611bdd565b60005b90506001600160801b03811615611c1057600380546001600160801b038082168401166001600160801b03199091161790555b611c2a818503600160801b8d6001600160801b03166133ed565b60018054909101905550505b8015611cc15760008054600160e81b900460041c600f16908115611c66578160ff168381611c6057fe5b04611c69565b60005b90506001600160801b03811615611c9b57600380546001600160801b03600160801b8083048216850182160291161790555b611cb5818403600160801b8d6001600160801b03166133ed565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611d8e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611da86007338989614281565b60038101549091506001600160801b0390811690861611611dc95784611dd8565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e005783611e16565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611e7b576003810180546001600160801b031981166001600160801b03918216869003821617909155611e7b907f0000000000000000000000000000000000000000000000000000000000000000908a908616613c24565b6001600160801b03821615611ee1576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611ee1907f0000000000000000000000000000000000000000000000000000000000000000908a908516613c24565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612018576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b50516001600160a01b031633146120c557600080fd5b60ff821615806120e8575060048260ff16101580156120e85750600a8260ff1611155b8015612112575060ff81161580612112575060048160ff16101580156121125750600a8160ff1611155b61211b57600080fd5b60008054610ff0600484901b16840160ff908116600160e81b90810260ff60e81b19841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff166121ff576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b15801561226c57600080fd5b505afa158015612280573d6000803e3d6000fd5b505050506040513d602081101561229657600080fd5b50516001600160a01b031633146122ac57600080fd5b6003546001600160801b03908116908516116122c857836122d5565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116122fb578261230f565b600354600160801b90046001600160801b03165b90506001600160801b03821615612390576003546001600160801b038381169116141561233e57600019909101905b600380546001600160801b031981166001600160801b03918216859003821617909155612390907f00000000000000000000000000000000000000000000000000000000000000009087908516613c24565b6001600160801b03811615612416576003546001600160801b03828116600160801b9092041614156123c157600019015b600380546001600160801b03600160801b808304821685900382160291811691909117909155612416907f00000000000000000000000000000000000000000000000000000000000000009087908416613c24565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b606080612490612b4e565b61250761249b612b85565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b9004166142e5565b915091509250929050565b600080548190600160f01b900460ff16612559576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b91810191909152819081906125b290606081016125a56001600160801b038a16613ff6565b600003600f0b9052614007565b92509250925081600003945080600003935060008511806125d35750600084115b15612612576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b6000806000612696612b4e565b6126a0858561443f565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b93600160381b82046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061270457600080fd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff168061274557600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b121590506127ee57509390940396509003935090039050612871565b8a60020b816020015160020b121561286257600061280a612b85565b6020830151604084015160045460608601519394506000938493612840936008938893879392916001600160801b03169061349d565b9a9003989098039b505094909603929092039650909103039250612871915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b0316156129bb576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b60006129c68261379f565b90506000806129de6129d6612b85565b600890614508565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b6001600160a01b0319909116871762ffffff60a01b1916600160a01b62ffffff9787900b97909716969096029590951763ffffffff60b81b1916600160c81b9091021761ffff60d81b1916600160d81b9096029590951761ffff60e81b191692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612af757fe5b05029050600083600281900b620d89e881612b0e57fe5b0502905060008460020b83830360020b81612b2557fe5b0560010190508062ffffff166001600160801b03801681612b4257fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b8357600080fd5b565b425b90565b60008060008460020b8660020b81612b9e57fe5b05905060008660020b128015612bc557508460020b8660020b81612bbe57fe5b0760020b15155b15612bcf57600019015b8315612c4457600080612be183614554565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612c2657888360ff16860302612c39565b88612c3082614566565b840360ff168603025b965050505050612cc2565b600080612c5383600101614554565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612ca557888360ff0360ff16866001010102612cbb565b8883612cb083614600565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612ce3578260020b612ceb565b8260020b6000035b9050620d89e8811115612d29576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612d3d57600160801b612d4f565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615612d79576ffff97272373d413259a46990580e213a0260801c5b6004821615612d98576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612db7576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612dd6576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612df5576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612e14576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612e33576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612e53576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612e73576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612e93576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612eb3576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ed3576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612ef3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612f13576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612f33576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612f54576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612f74576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612f93576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612fb0576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612fcb578060001981612fc757fe5b0490505b600160201b810615612fde576001612fe1565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061307857600061302c8989620f42400362ffffff16620f42406133ed565b905082613045576130408c8c8c60016146ea565b613052565b6130528b8d8c6001614765565b9550858110613063578a9650613072565b61306f8c8b8386614810565b96505b506130c2565b8161308f5761308a8b8b8b6000614765565b61309c565b61309c8a8c8b60006146ea565b93508388600003106130b0578995506130c2565b6130bf8b8a8a6000038561485c565b95505b6001600160a01b038a8116908716148215613125578080156130e15750815b6130f7576130f2878d8c6001614765565b6130f9565b855b9550808015613106575081155b61311c57613117878d8c60006146ea565b61311e565b845b945061316f565b80801561312f5750815b613145576131408c888c60016146ea565b613147565b855b9550808015613154575081155b61316a576131658c888c6000614765565b61316c565b845b94505b8115801561317f57508860000385115b1561318b578860000394505b8180156131aa57508a6001600160a01b0316876001600160a01b031614155b156131b95785890393506131d6565b6131d3868962ffffff168a620f42400362ffffff16614247565b93505b50505095509550955095915050565b604080513360248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1781529151815160009384938493735a41f637c3f7553dba6ddc2d3ca92641096577ea93919290918291908083835b602083106132695780518252601f19909201916020918201910161324a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146132c9576040519150601f19603f3d011682016040523d82523d6000602084013e6132ce565b606091505b50915091508180156132e257506020815110155b6132eb57600080fd5b600081806020019051602081101561330257600080fd5b5051905068056bc75e2d631000008110156133235760009350505050612b87565b683635c9adc5dea000008110156133405760199350505050612b87565b69021e19e0c9bab240000081101561335e5760329350505050612b87565b69152d02c7e14af680000081101561337c5760649350505050612b87565b69d3c21bcecceda100000081101561339a5760fa9350505050612b87565b6101f4935050505090565b6000600160ff1b82106133b757600080fd5b5090565b808203828113156000831215146133d157600080fd5b92915050565b818101828112156000831215146133d157600080fd5b6000808060001985870986860292508281109083900303905080613423576000841161341857600080fd5b508290049050613496565b80841161342f57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613543576000898661ffff1661ffff81106134be57fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461352f5761352c818a89886148a8565b90505b806020015181604001519250925050613623565b8688036000806135588c8c858c8c8c8c61494b565b91509150816000015163ffffffff168363ffffffff16141561358a578160200151826040015194509450505050613623565b805163ffffffff848116911614156135b2578060200151816040015194509450505050613623565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816135e057fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161361257fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b03600160381b808504821690960316909402600160381b600160d81b031990921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561374e57826001600160801b03168260000384039150816001600160801b031610613749576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6133d1565b826001600160801b03168284019150816001600160801b031610156133d1576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906137db575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613810576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106138a457607f810383901c91506138ae565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613a8f57886001600160a01b0316613a7382612ccc565b6001600160a01b03161115613a885781613a8a565b805b613a91565b815b9998505050505050505050565b6000806000898961ffff1661ffff8110613ab457fe5b60408051608081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613b235788859250925050613623565b8461ffff168461ffff16118015613b4457506001850361ffff168961ffff16145b15613b5157839150613b55565b8491505b8161ffff168960010161ffff1681613b6957fe5b069250613b78818989896148a8565b8a8461ffff1661ffff8110613b8957fe5b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02600160581b600160f81b031960069390930b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613ca05780518252601f199092019160209182019101613c81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613d02576040519150601f19603f3d011682016040523d82523d6000602084013e613d07565b606091505b5091509150818015613d35575080511580613d355750808060200190516020811015613d3257600080fd5b50515b613d6b576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613e0b5780518252601f199092019160209182019101613dec565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613e6b576040519150601f19603f3d011682016040523d82523d6000602084013e613e70565b606091505b5091509150818015613e8457506020815110155b613e8d57600080fd5b808060200190516020811015613ea257600080fd5b50519250505090565b808201828110156133d157600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613e0b5780518252601f199092019160209182019101613dec565b6000808361ffff1611613f91576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613fa7575081613496565b825b8261ffff168161ffff161015613fed576001858261ffff1661ffff8110613fcc57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613fa9565b50909392505050565b80600f81900b8114612b4957600080fd5b6000806000614014612b4e565b6140268460200151856040015161443f565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c0850152885190890151948901519289015193946140ca9491939092909190614b45565b93508460600151600f0b60001461423f57846020015160020b816020015160020b121561411f576141186141018660200151612ccc565b61410e8760400151612ccc565b8760600151614cfa565b925061423f565b846040015160020b816020015160020b12156142155760045460408201516001600160801b039091169061417190614155612b85565b6020850151606086015160808701516008949392918791613a9e565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b9390921692909202179055815160408701516141c191906141b790612ccc565b8860600151614cfa565b93506141df6141d38760200151612ccc565b83516060890151614d3e565b92506141ef8187606001516136e9565b600480546001600160801b0319166001600160801b03929092169190911790555061423f565b61423c6142258660200151612ccc565b6142328760400151612ccc565b8760600151614d3e565b91505b509193909250565b60006142548484846133ed565b90506000828061426057fe5b848609111561349657600019811061427757600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614325576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561433d57600080fd5b50604051908082528060200260200182016040528015614367578160200160208202803683370190505b509150865167ffffffffffffffff8111801561438257600080fd5b506040519080825280602002602001820160405280156143ac578160200160208202803683370190505b50905060005b8751811015614432576143dd8a8a8a84815181106143cc57fe5b60200260200101518a8a8a8a61349d565b8483815181106143e957fe5b602002602001018484815181106143fc57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b815250505080806001019150506143b2565b5097509795505050505050565b8060020b8260020b1261447f576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b12156144c2576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614504576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b600080821161457457600080fd5b600160801b821061458757608091821c91015b600160401b821061459a57604091821c91015b600160201b82106145ad57602091821c91015b6201000082106145bf57601091821c91015b61010082106145d057600891821c91015b601082106145e057600491821c91015b600482106145f057600291821c91015b60028210612b4957600101919050565b600080821161460e57600080fd5b5060ff6001600160801b0382161561462957607f1901614631565b608082901c91505b67ffffffffffffffff82161561464a57603f1901614652565b604082901c91505b63ffffffff82161561466757601f190161466f565b602082901c91505b61ffff82161561468257600f190161468a565b601082901c91505b60ff82161561469c57600719016146a4565b600882901c91505b600f8216156146b657600319016146be565b600482901c91505b60038216156146d057600119016146d8565b600282901c91505b6001821615612b495760001901919050565b6000836001600160a01b0316856001600160a01b0316111561470a579293925b8161473757614732836001600160801b03168686036001600160a01b0316600160601b6133ed565b61475a565b61475a836001600160801b03168686036001600160a01b0316600160601b614247565b90505b949350505050565b6000836001600160a01b0316856001600160a01b03161115614785579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166147af57600080fd5b836147df57866001600160a01b03166147d28383896001600160a01b03166133ed565b816147d957fe5b04614805565b6148056147f68383896001600160a01b0316614247565b886001600160a01b0316614d6d565b979650505050505050565b600080856001600160a01b03161161482757600080fd5b6000846001600160801b03161161483d57600080fd5b8161484f576147328585856001614d78565b61475a8585856001614e59565b600080856001600160a01b03161161487357600080fd5b6000846001600160801b03161161488957600080fd5b8161489b576147328585856000614e59565b61475a8585856000614d78565b6148b0615679565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b031611614904576001614906565b845b6001600160801b031663ffffffff60801b608085901b168161492457fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614953615679565b61495b615679565b888561ffff1661ffff811061496c57fe5b60408051608081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff161515606082015292506149d090899089614f3c565b15614a08578663ffffffff16826000015163ffffffff1614156149f257613623565b816149ff838989886148a8565b91509150613623565b888361ffff168660010161ffff1681614a1d57fe5b0661ffff1661ffff8110614a2d57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614ae257604080516080810182528a5463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614af188836000015189614f3c565b614b28576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614b358989898887614ffd565b9150915097509795505050505050565b6000614b546007878787614281565b60015460025491925090600080600f87900b15614c9a576000614b75612b85565b6000805460045492935090918291614bbf9160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b90041661349d565b9092509050614bf960058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061519b565b9450614c3060058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061519b565b93508415614c6457614c6460068d7f0000000000000000000000000000000000000000000000000000000000000000615354565b8315614c9657614c9660068c7f0000000000000000000000000000000000000000000000000000000000000000615354565b5050505b600080614cac60058c8c8b8a8a6153ba565b9092509050614cbd878a8484615466565b600089600f0b1215614ceb578315614cda57614cda60058c6155fb565b8215614ceb57614ceb60058b6155fb565b50505050505095945050505050565b60008082600f0b12614d2057614d1b614d168585856001614765565b6133a5565b61475d565b614d33614d168585856000036000614765565b600003949350505050565b60008082600f0b12614d5a57614d1b614d1685858560016146ea565b614d33614d1685858560000360006146ea565b808204910615150190565b60008115614deb5760006001600160a01b03841115614dae57614da984600160601b876001600160801b03166133ed565b614dc6565b6001600160801b038516606085901b81614dc457fe5b045b9050614de3614dde6001600160a01b03881683613eab565b615627565b91505061475d565b60006001600160a01b03841115614e1957614e1484600160601b876001600160801b0316614247565b614e30565b614e30606085901b6001600160801b038716614d6d565b905080866001600160a01b031611614e4757600080fd5b6001600160a01b03861603905061475d565b600082614e6757508361475d565b600160601b600160e01b03606085901b168215614ef5576001600160a01b03861684810290858281614e9557fe5b041415614ec657818101828110614ec457614eba83896001600160a01b031683614247565b935050505061475d565b505b614eec82614ee7878a6001600160a01b03168681614ee057fe5b0490613eab565b614d6d565b9250505061475d565b6001600160a01b03861684810290858281614f0c57fe5b04148015614f1957508082115b614f2257600080fd5b808203614eba614dde846001600160a01b038b1684614247565b60008363ffffffff168363ffffffff1611158015614f6657508363ffffffff168263ffffffff1611155b15614f82578163ffffffff168363ffffffff1611159050613496565b60008463ffffffff168463ffffffff1611614fa9578363ffffffff16600160201b01614fb1565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614fe1578363ffffffff16600160201b01614fe9565b8363ffffffff165b64ffffffffff169091111595945050505050565b615005615679565b61500d615679565b60008361ffff168560010161ffff168161502357fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161505057fe5b0661ffff811061505c57fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082018190529095506150c65780600101925061503b565b898661ffff1682600101816150d757fe5b0661ffff81106150e357fe5b60408051608081018252929091015463ffffffff81168352600160201b8104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820152855190945060009061514d908b908b614f3c565b905080801561516657506151668a8a8760000151614f3c565b15615171575061518e565b8061518157600182039250615188565b8160010193505b5061503b565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b0316826151c6828d6136e9565b9050846001600160801b0316816001600160801b03161115615214576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b0382811615908216158114159450156152b9578c60020b8e60020b136152a157600183018b9055600283018a9055600383018054600160381b600160d81b031916600160381b6001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b038216178355856153025782546152fd906152f890600160801b9004600f90810b810b908f900b6133d7565b613ff6565b615323565b8254615323906152f890600160801b9004600f90810b810b908f900b6133bb565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161536357fe5b0760020b1561537157600080fd5b60008061538c8360020b8560020b8161538657fe5b05614554565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b1261540057505060018201546002830154615413565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561543557505060018301546002840154615448565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6155055781516001600160801b03166154fd576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615514565b815161551190866136e9565b90505b60006155388360200151860384600001516001600160801b0316600160801b6133ed565b9050600061555e8460400151860385600001516001600160801b0316600160801b6133ed565b905086600f0b6000146155855787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b0382161515806155b357506000816001600160801b0316115b156155f1576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612b4957600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
