{
  "_format": "hh-sol-artifact-1",
  "contractName": "MuffinHubPositions",
  "sourceName": "contracts/MuffinHubPositions.sol",
  "abi": [
    {
      "inputs": [],
      "name": "FailedBalanceOf",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedTransfer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTick",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTickRangeForLimitOrder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoLiquidityForLimitOrder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotEnoughTokenInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PositionAlreadySettled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PositionNotSettled",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ownerAccRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount1",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CollectProtocol",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ownerAccRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount1",
          "type": "uint256"
        }
      ],
      "name": "CollectSettled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "recipientAccRefId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "governance",
          "type": "address"
        }
      ],
      "name": "GovernanceUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "senderAccRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "PoolCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "positionRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "limitOrderType",
          "type": "uint8"
        }
      ],
      "name": "SetLimitOrderType",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickEnd",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tickStart",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        }
      ],
      "name": "Settle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "senderAccRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "recipientAccRefId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountInDistribution",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountOutDistribution",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "tierData",
          "type": "uint256[]"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "tickSpacing",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "protocolFee",
          "type": "uint8"
        }
      ],
      "name": "UpdateDefaultParameters",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "tickSpacing",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "protocolFee",
          "type": "uint8"
        }
      ],
      "name": "UpdatePool",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint24",
          "name": "sqrtGamma",
          "type": "uint24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "sqrtPrice",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "limitOrderTickSpacingMultiplier",
          "type": "uint8"
        }
      ],
      "name": "UpdateTier",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "senderAccRefId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "accounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint256",
              "name": "positionRefId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accRefId",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "collectAllFees",
              "type": "bool"
            }
          ],
          "internalType": "struct IMuffinHubPositionsActions.BurnParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "collectProtocolFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint256",
              "name": "positionRefId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accRefId",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "collectAllFees",
              "type": "bool"
            }
          ],
          "internalType": "struct IMuffinHubPositionsActions.BurnParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "collectSettled",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "getAllTiers",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "sqrtPrice",
              "type": "uint128"
            },
            {
              "internalType": "uint24",
              "name": "sqrtGamma",
              "type": "uint24"
            },
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "nextTickBelow",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "nextTickAbove",
              "type": "int24"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthGlobal0",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthGlobal1",
              "type": "uint80"
            }
          ],
          "internalType": "struct Tiers.Tier[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDefaultAllowedSqrtGammas",
      "outputs": [
        {
          "internalType": "uint24[]",
          "name": "",
          "type": "uint24[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "getLimitOrderTickSpacingMultipliers",
      "outputs": [
        {
          "internalType": "uint8[]",
          "name": "",
          "type": "uint8[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "getPoolAllowedSqrtGammas",
      "outputs": [
        {
          "internalType": "uint24[]",
          "name": "",
          "type": "uint24[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        }
      ],
      "name": "getPoolDefaultTickSpacing",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "positionRefId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        }
      ],
      "name": "getPositionFeeGrowthInside",
      "outputs": [
        {
          "internalType": "uint80",
          "name": "feeGrowthInside0",
          "type": "uint80"
        },
        {
          "internalType": "uint80",
          "name": "feeGrowthInside1",
          "type": "uint80"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "bool",
          "name": "zeroForOne",
          "type": "bool"
        }
      ],
      "name": "getSettlement",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        },
        {
          "internalType": "uint16",
          "name": "tickSpacing",
          "type": "uint16"
        },
        {
          "internalType": "uint32",
          "name": "nextSnapshotId",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "bool",
          "name": "zeroForOne",
          "type": "bool"
        },
        {
          "internalType": "uint32",
          "name": "snapshotId",
          "type": "uint32"
        }
      ],
      "name": "getSettlementSnapshot",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1",
              "type": "uint80"
            }
          ],
          "internalType": "struct Settlement.Snapshot",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "blockIdx",
          "type": "uint256"
        }
      ],
      "name": "getTickMapBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        }
      ],
      "name": "getTickMapBlockMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "wordIdx",
          "type": "uint256"
        }
      ],
      "name": "getTickMapWord",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxNumOfTiers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "tierId",
              "type": "uint8"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "positionRefId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "senderAccRefId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IMuffinHubPositionsActions.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint24[]",
          "name": "sqrtGammas",
          "type": "uint24[]"
        }
      ],
      "name": "setDefaultAllowedSqrtGammas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "tickSpacing",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "protocolFee",
          "type": "uint8"
        }
      ],
      "name": "setDefaultParameters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "setGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint256",
          "name": "positionRefId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "limitOrderType",
          "type": "uint8"
        }
      ],
      "name": "setLimitOrderType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint24[]",
          "name": "sqrtGammas",
          "type": "uint24[]"
        }
      ],
      "name": "setPoolAllowedSqrtGammas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tickSpacing",
          "type": "uint8"
        }
      ],
      "name": "setPoolDefaultTickSpacing",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tickSpacing",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "protocolFee",
          "type": "uint8"
        }
      ],
      "name": "setPoolParameters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "poolId",
          "type": "bytes32"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "uint24",
          "name": "sqrtGamma",
          "type": "uint24"
        },
        {
          "internalType": "uint8",
          "name": "limitOrderTickSpacingMultiplier",
          "type": "uint8"
        }
      ],
      "name": "setTierParameters",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokens",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "locked",
          "type": "uint8"
        },
        {
          "internalType": "uint248",
          "name": "protocolFeeAmt",
          "type": "uint248"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "underlyings",
      "outputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6000805461ffff60a01b1916601960a21b1790556101206040526201863c6080908152620185d860a0526201857460c0526201851060e052620184ab610100526200004f90600190600562000064565b503480156200005d57600080fd5b506200012e565b82805482825590600052602060002090600901600a90048101928215620001055791602002820160005b83821115620000d257835183826101000a81548162ffffff021916908362ffffff16021790555092602001926003016020816002010492830192600103026200008e565b8015620001035782816101000a81549062ffffff0219169055600301602081600201049283019260010302620000d2565b505b506200011392915062000117565b5090565b5b8082111562000113576000815560010162000118565b614fdb806200013e6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806376f0920f116100f9578063ab033ea911610097578063dec980ec11610071578063dec980ec1461055a578063e48603391461056d578063f212d1c5146105f1578063ff23188c1461062657600080fd5b8063ab033ea914610501578063adcef36814610514578063cbdc36cb1461054757600080fd5b80638e9059d6116100d35780638e9059d61461046757806394eff6e31461047a57806399fb8529146104ba5780639f24b6b1146104cd57600080fd5b806376f0920f146103d357806378029b65146103e657806384ec1e15146103f957600080fd5b806352b7e2cb116101665780635f8f9e1f116101405780635f8f9e1f1461036d57806363af8161146103805780636dd705ee146103955780637266a0e4146103a857600080fd5b806352b7e2cb146102c2578063555ed4ad146102e25780635aa6e6751461032857600080fd5b80632fb07eac116101a25780632fb07eac1461023157806335d603f51461025957806343751ee0146102795780634a3b0d34146102af57600080fd5b806312a85dd2146101c957806313fd4c80146101de5780631bf1a607146101f4575b600080fd5b6101dc6101d73660046144fd565b610639565b005b60065b6040519081526020015b60405180910390f35b610207610202366004614552565b610736565b60408051825169ffffffffffffffffffff90811682526020938401511692810192909252016101eb565b61024461023f3660046145bd565b6107f1565b604080519283526020830191909152016101eb565b61026c6102673660046145f9565b610c0d565b6040516101eb9190614612565b61028c610287366004614713565b610d40565b6040805169ffffffffffffffffffff9384168152929091166020830152016101eb565b6101dc6102bd366004614779565b610d6e565b6102d56102d03660046145f9565b610dd2565b6040516101eb919061479c565b6102f56102f03660046147e3565b610df2565b604080516bffffffffffffffffffffffff909416845261ffff909216602084015263ffffffff16908201526060016101eb565b6000546103489073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101eb565b6101dc61037b366004614875565b610e93565b610388610ec8565b6040516101eb91906148b7565b6101dc6103a33660046148f4565b610f4a565b6101e16103b6366004614940565b600560209081526000928352604080842090915290825290205481565b6101e16103e136600461496a565b611026565b6101dc6103f436600461499f565b611059565b61043a6104073660046145f9565b6007602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff918216911682565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101eb565b6101dc6104753660046149db565b6110da565b6101e161048836600461496a565b600083815260046020908152604080832060ff8616845260020182528083208484526001019091529020549392505050565b6103886104c83660046145f9565b61115e565b6101e16104db366004614779565b600082815260046020908152604080832060ff8516845260020190915290205492915050565b6101dc61050f366004614a5a565b6111ea565b610527610522366004614a75565b61127b565b6040805194855260208501939093529183015260608201526080016101eb565b6101dc610555366004614a88565b611532565b610527610568366004614a75565b611575565b6105b861057b366004614a5a565b60066020526000908152604090205460ff81169061010090047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682565b6040805160ff90931683527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091166020830152016101eb565b6106146105ff3660046145f9565b60009081526002602052604090205460ff1690565b60405160ff90911681526020016101eb565b6101e1610634366004614ad4565b611756565b60005473ffffffffffffffffffffffffffffffffffffffff16331461065d57600080fd5b60008260ff161161066d57600080fd5b600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff8581169182027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16929092177501000000000000000000000000000000000000000000928516928302179092556040805192835260208301919091527f35096a66abfbffecdb17659874bfe9c9c46458e61abf336a4607441a2bc532e9910160405180910390a15050565b6040805180820190915260008082526020820152600086815260046020818152604080842060ff8a1685529092018152818320600288900b84529052812084610780576000610783565b60015b60ff166002811061079657610796614afe565b63ffffffff94909416600090815260029490940201600101602090815260409384902084518086019095525469ffffffffffffffffffff80821686526a01000000000000000000009091041690840152509095945050505050565b600080808061081f6108066020870187614a5a565b6108166040880160208901614a5a565b60049190611848565b90925090506108a061083760e0870160c08801614a5a565b60e087013561084c6060890160408a01614b2d565b61085c60808a0160608b01614b48565b61086c60a08b0160808c01614b48565b61089261087f60c08d0160a08e01614b63565b6bffffffffffffffffffffffff166118ca565b8895949392919060006118fa565b50919550935084905083610100870135156109c65760006108c633896101000135611cd3565b905061091783600560006108dd60208d018d614a5a565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040908101600090812086825290925290205490611d26565b6005600061092860208d018d614a5a565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081208682528352818120949094559195506109799285926005926108dd918e01908e01614a5a565b6005600061098d60408d0160208e01614a5a565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260409081016000908120958152949091529092205590505b811515806109d357508015155b15610ad25760006109ef6109ea60208a018a614a5a565b611d46565b90506000610a066109ea60408b0160208c01614a5a565b905033633d705707610a1b60208c018c614a5a565b610a2b60408d0160208e01614a5a565b87878e806101200190610a3e9190614b91565b6040518763ffffffff1660e01b8152600401610a5f96959493929190614bf6565b600060405180830381600087803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b50610ab29250610aa391505060208b018b614a5a565b610aad8685614cab565b611de8565b610acf610ac560408b0160208c01614a5a565b610aad8584614cab565b50505b60e08701803590610ae69060c08a01614a5a565b73ffffffffffffffffffffffffffffffffffffffff16847fc53ff5211237355d20d63b638bcbf8125b8d938df83b6e65674435942aaa6124610b2e60608c0160408d01614b2d565b610b3e60808d0160608e01614b48565b610b4e60a08e0160808f01614b48565b338e61010001358f60a0016020810190610b689190614b63565b6040805160ff9097168752600295860b60208801529390940b9285019290925273ffffffffffffffffffffffffffffffffffffffff16606084015260808301526bffffffffffffffffffffffff1660a082015260c081018b905260e081018a90526101000160405180910390a4610c048480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b50505050915091565b606060046000838152602001908152602001600020600101805480602002602001604051908101604052809291908181526020016000905b82821015610d355760008481526020908190206040805161010081018252600280870290930180546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104168286015260019081015462ffffff81169383019390935263010000008304840b606083015266010000000000008304840b60808301526901000000000000000000830490930b60a082015269ffffffffffffffffffff6c010000000000000000000000008304811660c083015276010000000000000000000000000000000000000000000090920490911660e082015283529092019101610c45565b505050509050919050565b60008681526004602052604081208190610d5e908888888888611e7a565b915091505b965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d9257600080fd5b60009182526002602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055565b6000818152600460205260409020606090610dec90611f80565b92915050565b600084815260046020818152604080842060ff881685529092018152818320600286900b84529052812081908190819085610e2e576000610e31565b60015b60ff1660028110610e4457610e44614afe565b60020201546bffffffffffffffffffffffff8116996c01000000000000000000000000820461ffff1699506e01000000000000000000000000000090910463ffffffff16975095505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eb757600080fd5b610ec36001838361442f565b505050565b60606001805480602002602001604051908101604052809291908181526020018280548015610f4057602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610f055790505b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f6e57600080fd5b6000848152600460205260409020610f8881858585612071565b8262ffffff168460ff16867f8ba9b3074e943a040d7cc32a0a69db4cada877568ff71021a69579a1f004e440846001018860ff1681548110610fcc57610fcc614afe565b600091825260209182902060029091020154604080517001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff16825260ff8916928201929092520160405180910390a45050505050565b600083815260046020908152604080832060ff8616845260029081018352818420858552019091529020545b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461107d57600080fd5b600083815260046020526040902061109690838361212c565b6040805160ff80851682528316602082015284917f9580ff8b575ec2cb80ff564eac7c041dcd3e5b60869932d1b87dfff585a1b2e9910160405180910390a2505050565b6000806110e960048a8a611848565b90925090506110fd8233868a8a8a896121a8565b6040805160ff8981168252600289810b602084015288900b828401528516606082015290518591339184917f6aeb822cd244fd07ac151aa36b7e0446b826e45afbc63e7449ff9d8810b94d50919081900360800190a4505050505050505050565b6000818152600360209081526040918290208054835181840281018401909452808452606093928301828280156111de57602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff16815260200190600301906020826002010492830192600103820291508084116111a35790505b50505050509050919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461120e57600080fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab91a250565b600080808080806112a26112926020890189614a5a565b61081660408a0160208b01614a5a565b90925090506113113360c08901356112c060608b0160408c01614b2d565b6112d060808c0160608d01614b48565b6112e060a08d0160808e01614b48565b6112f060c08e0160a08f01614b63565b8d6101000160208101906113049190614cc3565b89969594939291906124c1565b92985090965094509250600061132b3360e08a0135611cd3565b90506113378588614cab565b6005600061134860208c018c614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546113a29190614cab565b909155506113b290508487614cab565b600560006113c660408c0160208d01614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546114209190614cab565b909155505060c088013533837f47620c9edb42fa2078ca7272fd369516dfd3a7008f7f8ac55e63618d1c88e0cb61145d60608d0160408e01614b2d565b61146d60808e0160608f01614b48565b8d60800160208101906114809190614b48565b8e60e001358f60a00160208101906114989190614b63565b6040805160ff9096168652600294850b60208701529290930b9184019190915260608301526bffffffffffffffffffffffff16608082015260a081018c905260c081018b905260e081018a905261010081018990526101200160405180910390a46115288380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5050509193509193565b60005473ffffffffffffffffffffffffffffffffffffffff16331461155657600080fd5b600083815260036020526040902061156f90838361442f565b50505050565b6000808080808061158c6112926020890189614a5a565b909250905061160a3360c08901356115aa60608b0160408c01614b2d565b6115ba60808c0160608d01614b48565b6115ca60a08d0160808e01614b48565b6115e08d60a001602081019061087f9190614b63565b6115e990614cde565b8d6101000160208101906115fd9190614cc3565b89969594939291906118fa565b9298509096509450925060006116243360e08a0135611cd3565b90506116308588614cab565b6005600061164160208c018c614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600082825461169b9190614cab565b909155506116ab90508487614cab565b600560006116bf60408c0160208d01614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546117199190614cab565b909155505060c088013533837f25e512703cb4707dd00bf7ff8e3274a018a1a1e8aa39351a4f711c16033d036661145d60608d0160408e01614b2d565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461177b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020805460ff811690915561010090047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166117db8383836126cf565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a18654a5039b989ca382f52bbf82bcdde698ffc4c11fe6c59652a4d1fe70f488360405161183a91815260200190565b60405180910390a392915050565b600080838360405160200161188092919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600081815297909252909520959350505050565b60006b7fffffffffffffffffffffff6bffffffffffffffffffffffff831611156118f6576118f6614d1d565b5090565b6000806000806119098c612766565b611913888861279c565b600086600b0b13156119bb578b5461193390610100900460ff1689614d7b565b60020b1561196d576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8b5461198190610100900460ff1688614d7b565b60020b156119bb576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008c6001018a60ff16815481106119d5576119d5614afe565b906000526020600020906002020190508060010160039054906101000a900460020b60020b8960020b13158015611a1d57506001810154600289810b6301000000909204900b125b15611a84578054611a47906fffffffffffffffffffffffffffffffff16600889901b600c0b612820565b81547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161781555b506000611a958d8b8b8a600161284c565b9050611aa58d8b8a8a600061284c565b80611aad5750805b90508015611afe5760008d6001018b60ff1681548110611acf57611acf614afe565b90600052602060002090600202019050611af28a82612bb590919063ffffffff16565b611afc818a612bb5565b505b50611b0f8c8c8c8c8c8c8c8c612c8f565b90925090506000600b87900b1215611c49576000611b2e8d8b8b612e59565b9050611b3b8d8b8a612e59565b80611b435750805b90508015611c475760008d6001018b60ff1681548110611b6557611b65614afe565b906000526020600020906002020190506000611bb58f60020160008e60ff1681526020019081526020016000208360010160039054906101000a900460020b6001611bb09190614dc4565b613024565b905060008f60030160008e60ff16815260200190815260200160002060008360020b60020b8152602001908152602001600020600001601b9054906101000a900460020b9050818360010160066101000a81548162ffffff021916908360020b62ffffff160217905550808360010160096101000a81548162ffffff021916908360020b62ffffff1602179055505050505b505b85600b0b600014611cc457611cbe8c6001018a60ff1681548110611c6f57611c6f614afe565b600091825260209091206002909102015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611caf8a61318b565b611cb88a61318b565b896134e3565b90945092505b98509850985098945050505050565b600081611cdf57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8516602082015290810183905260600160405160208183030381529060405280519060200120905092915050565b600080828410611d3a578284039150611d3f565b508282035b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff8216738dd5fbce2f6a956c3022ba3663759011dd51e73e1415611d7f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020805460ff1660011415611db657600080fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155611052836135cf565b80611df2836135cf565b1015611e2a576040517fde2cd50d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166002179055565b60008073ffffffffffffffffffffffffffffffffffffffff871615611f745760ff85166000908152600489016020908152604080832081517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d901b16818501527fff0000000000000000000000000000000000000000000000000000000000000060f88b901b16603482015260e889811b603583015288901b6038820152603b8082018c905283518083039091018152605b9091018352805190840120845260058c0190925282208291611f52918888613708565b915091508115611f715780600001518160200151935093505050610d63565b50505b610d5e88868686613810565b6040805160c0810191829052606091600091906006858101918285855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611f9d57505050506001860154929350505067ffffffffffffffff811115611fef57611fef614e27565b604051908082528060200260200182016040528015612018578160200160208202803683370190505b50915060005b825181101561206a5781816006811061203957612039614afe565b602002015183828151811061205057612050614afe565b60ff9092166020928302919091019091015260010161201e565b5050919050565b835460ff1661207f57600080fd5b600184015460ff84161061209257600080fd5b620186a062ffffff831611156120a757600080fd5b81846001018460ff16815481106120c0576120c0614afe565b906000526020600020906002020160010160006101000a81548162ffffff021916908362ffffff16021790555080846006018460ff166006811061210657612106614afe565b602091828204019190066101000a81548160ff021916908360ff16021790555050505050565b825460ff1661213a57600080fd5b60008260ff161161214a57600080fd5b82547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1661010060ff938416027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1617620100009190921602179055565b865460ff166121b657600080fd5b600260ff821611156121c757600080fd5b6121d1838361279c565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089901b166020808301919091527fff0000000000000000000000000000000000000000000000000000000000000060f888901b16603483015260e886811b603584015285901b6038830152603b80830189905283518084039091018152605b9092018352815191810191909120600090815260058a0190915290812090506000886006018660ff166006811061229057612290614afe565b60208104909101548a546122ba9260ff601f90911661010090810a90930481169290910416614e56565b600183015490915060ff161561238e5760ff808716600090815260048b016020908152604080832060038e019092528220600186015486549394612313948b928b9216906bffffffffffffffffffffffff16878961398a565b50600184015490915063ffffffff8083166101009092041614612362576040517f3ec12a8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001690555b60ff8316156124b65781546bffffffffffffffffffffffff166123dd576040517f3ba338b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff8616600090815260048a016020908152604080832060038d019092528220845483926124239290918a908a908a906bffffffffffffffffffffffff1660018a61398a565b909250905061ffff81166124378888614e80565b62ffffff1614612473576040517f51ba015200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060018301805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921660ff8616179190911790555b505050505050505050565b6000806000806124d08c612766565b6124da888861279c565b604080517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608e901b166020808301919091527fff0000000000000000000000000000000000000000000000000000000000000060f88d901b16603483015260e88b811b60358401528a901b6038830152603b8083018e905283518084039091018152605b9092018352815191810191909120600090815260058f0190915290812090506000806125a58f60040160008e60ff168152602001908152602001600020848d8d613708565b91509150816125e0576040517f5a6c1fdc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126146125fa8a6bffffffffffffffffffffffff166118ca565b61260390614cde565b82516020840151869291908c613c7b565b90955093506000915061262890508a61318b565b905060006126358a61318b565b6001848101549192506126799160ff16146126505782612652565b815b838361266b8d6bffffffffffffffffffffffff166118ca565b61267490614cde565b6134e3565b845491985096506bffffffffffffffffffffffff166126bd576001830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001690555b50505098509850985098945050505050565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201528260248201526000806044836000895af191505061273081613f07565b61156f576040517fbfa871c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805460ff1661277457600080fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b8060020b8260020b1215806127d45750600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755135b806127e55750620bd8ab600282900b135b1561281c576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60006fffffffffffffffffffffffffffffffff808416600f84900b019081111561105257611052614d1d565b60ff841660009081526003860160209081526040808320600287900b845291829052822080546bffffffffffffffffffffffff161580156128aa575080546c0100000000000000000000000090046bffffffffffffffffffffffff16155b15612ad957600085600b0b13156129e25760ff871660009081526002890160205260408120906128da8289613024565b905060008460008360020b60020b8152602001908152602001600020600001601b9054906101000a900460020b9050818460000160186101000a81548162ffffff021916908360020b62ffffff1602179055508084600001601b6101000a81548162ffffff021916908360020b62ffffff160217905550888560008460020b60020b8152602001908152602001600020600001601b6101000a81548162ffffff021916908360020b62ffffff160217905550888560008360020b60020b815260200190815260200160002060000160186101000a81548162ffffff021916908360020b62ffffff1602179055506129da8984613f4c90919063ffffffff16565b600195505050505b6000886001018860ff16815481106129fc576129fc614afe565b906000526020600020906002020190508060010160039054906101000a900460020b60020b8760020b13612ad7576001818101805491840180546c0100000000000000000000000090930469ffffffffffffffffffff9081167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000085168117835592547fffffffffffffffffffffffff00000000000000000000000000000000000000009094169092177601000000000000000000000000000000000000000000009093049091166a0100000000000000000000029190911790555b505b8315612b36578054612af9906bffffffffffffffffffffffff1686613fa8565b81547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178155612baa565b8054612b60906c0100000000000000000000000090046bffffffffffffffffffffffff1686613fa8565b81546bffffffffffffffffffffffff919091166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9091161781555b505095945050505050565b600182015463010000009004600290810b9082900b13612c2b57600182015466010000000000009004600290810b9082900b131561281c576001820180547fffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff16660100000000000062ffffff8416021790555050565b600182015469010000000000000000009004600290810b9082900b121561281c5760018201805462ffffff83166901000000000000000000027fffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff9091161790555050565b604080517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b166020808301919091527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16603483015260e887811b603584015286901b6038830152603b8083018a905283518084039091018152605b9092018352815191810191909120600090815260058b019091529081208190600080612d438d8b8b8b613810565b9092509050612d55838884848a613c7b565b6001850154919650945060ff16159150612e4b9050576000612dbc8c60040160008b60ff1681526020019081526020016000208d60030160008c60ff1681526020019081526020016000208a8a8660010160009054906101000a900460ff168b6000613fd0565b600183015490915063ffffffff8083166101009092041614612e0a576040517f3ec12a8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546bffffffffffffffffffffffff16612e49576001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001690555b505b509850989650505050505050565b60ff821660009081526003840160209081526040808320600285900b845291829052822080546bffffffffffffffffffffffff16158015612eb7575080546c0100000000000000000000000090046bffffffffffffffffffffffff16155b1561301b57600284900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4275514801590612ef75750600284900b620bd8ab14155b612f0357612f03614d1d565b80547801000000000000000000000000000000000000000000000000808204600281810b60008181526020888152604080832080547fffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff167b01000000000000000000000000000000000000000000000000000000998a900462ffffff818116909b0291909117909155850b80845281842080547fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16999097169097029790971790945589830b815285812081815560010180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560ff8b168152918b01909252929092206130149087614006565b6001945050505b50509392505050565b60008060008061303385614079565b600082815260028a01602052604090205492955090935091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160ff84161b011680613146576000848152600188810160205260409091205460ff85169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116806131185787547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001871b0116806130f4576130f4614d1d565b6130fd816140a6565b60ff16600081815260018b0160205260409020549096509150505b613121816140a6565b60ff16600886901b179350876002016000858152602001908152602001600020549150505b613180613152826140a6565b60ff16600885901b177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427550190565b979650505050505050565b6000600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755138015906131c85750620bd8ab600283900b13155b6131d157600080fd5b6000808360020b126131e357826131e8565b826000035b62ffffff811691507001000000000000000000000000000000009060011615613221576ffffcb933bd6fad37aa2d162d1a5940010260801c5b6002821615613240576ffff97272373d413259a46990580e213a0260801c5b600482161561325f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561327e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561329d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156132bc576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156132db576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156132fa576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561331a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561333a576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561335a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561337a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561339a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156133ba576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156133da576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156133fa576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561341b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561343b576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561345a576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613477576b048a170391f7dc42444e8fa20260801c5b60008460020b126134b557807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816134b1576134b1614d4c565b0490505b60006701000000000000008206116134ce5760006134d1565b60015b60ff16603882901c0192505050919050565b600080846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff161061354857836fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff1611613542578561354a565b8361354a565b845b955060006008600085600b0b12156135655784600003613567565b845b6bffffffffffffffffffffffff16901b90506000600b85900b126135a457613590858883614157565b925061359d86888361425d565b91506135c5565b6135af878683614157565b60000392506135bf87878361425d565b60000391505b5094509492505050565b604080513060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8616916136619190614ee4565b600060405180830381855afa9150503d806000811461369c576040519150601f19603f3d011682016040523d82523d6000602084013e6136a1565b606091505b50915091508115806136b557508051602014155b156136ec576040517f77b1b94e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808060200190518101906137009190614f1f565b949350505050565b604080518082019091526000808252602082018190529060018581015460ff16148061373b5750600185015460ff166002145b156138075760018581015460009160ff9091161461376b57600285900b6000908152602088905260409020613780565b600284810b6000908152602089905260409020015b8054600188015491925063ffffffff6e01000000000000000000000000000090910481166101009092041610156135c557600186810154610100900463ffffffff166000908152918101602090815260409283902083518085019094525469ffffffffffffffffffff80821685526a01000000000000000000009091041690830152925090505b94509492505050565b60ff831660008181526003860160209081526040808320600286810b855292528083209186900b835282206001880180549394859485929190811061385757613857614afe565b60009182526020909120600291820201600181015490925063010000009004810b9088900b8112156138c0576001808501549084015469ffffffffffffffffffff8083168282160398506a0100000000000000000000928390048116929091041603945061397d565b8660020b8160020b1261390a576001808401549085015469ffffffffffffffffffff8083168282160398506a0100000000000000000000928390048116929091041603945061397d565b600180840154858201549184015469ffffffffffffffffffff8083168482166c0100000000000000000000000084048316030399506a0100000000000000000000928390048116929093048316760100000000000000000000000000000000000000000000909104909216919091030394505b5050505094509492505050565b60008060ff8616600114806139a2575060ff86166002145b6139ae576139ae614d1d565b600060ff87166001146139d357600289900b600090815260208c9052604090206139e8565b600288810b600090815260208d905260409020015b905084613a0f578054613a0a9087906bffffffffffffffffffffffff16614f38565b613a2a565b8054613a2a9087906bffffffffffffffffffffffff16614f65565b81547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178082556e010000000000000000000000000000810463ffffffff1693506c01000000000000000000000000900461ffff16613b4a57805461ffff85166c01000000000000000000000000027fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff90911617815560408051808201825260008082526001602080840182815263ffffffff89168452918601905292902090518154925169ffffffffffffffffffff9081166a0100000000000000000000027fffffffffffffffffffffffff00000000000000000000000000000000000000009094169116179190911790555b80546bffffffffffffffffffffffff16158015613b885781547fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff1682555b60ff881660011415613bf657600289900b600090815260208c90526040902080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682157f010000000000000000000000000000000000000000000000000000000000000002179055613c54565b60028a900b600090815260208c90526040902080547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682157e01000000000000000000000000000000000000000000000000000000000000021790555b5054919a6c0100000000000000000000000090920461ffff16995090975050505050505050565b845460009081906bffffffffffffffffffffffff1681613c9b8289613fa8565b89546bffffffffffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008216178b5590915069ffffffffffffffffffff6c010000000000000000000000008204811689039176010000000000000000000000000000000000000000000090041687038615613d9b578a5469ffffffffffffffffffff8981167601000000000000000000000000000000000000000000000275ffffffffffffffffffffffffffffffffffffffffffff8c83166c0100000000000000000000000002166bffffffffffffffffffffffff93841617178d559085168184168102603890811c985091831602901c9450613ef9565b60008a600b0b1315613ea057826bffffffffffffffffffffffff168269ffffffffffffffffffff16856bffffffffffffffffffffffff160281613de057613de0614d4c565b8c5469ffffffffffffffffffff929091048b0382166c01000000000000000000000000027fffffffffffffffffffff00000000000000000000ffffffffffffffffffffffff909116178c556bffffffffffffffffffffffff808516919086169083160281613e5057613e50614d4c565b8c5475ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000929091048a0369ffffffffffffffffffff1691909102178b55613ef9565b60008a600b0b1215613ef95760388269ffffffffffffffffffff168b6000036bffffffffffffffffffffffff1602901c955060388169ffffffffffffffffffff168b6000036bffffffffffffffffffffffff1602901c94505b505050509550959350505050565b600081613f18573d6000803e3d6000fd5b3d60208114613f30578015613f415760009150613f46565b3d6000803e60005115159150613f46565b600191505b50919050565b6000806000613f5a84614079565b600082815260028901602090815260408083208054600160ff96871681901b909117909155868452808c0190925290912080549290931681901b9091179091558654911b1790945550505050565b60006bffffffffffffffffffffffff808416600b84900b019081111561105257611052614d1d565b6000600b83900b8112613ff8898989898986613fef5789600003613ff1565b895b878a61398a565b509998505050505050505050565b600080600061401484614079565b600082815260028901602052604090208054600160ff84161b191690819055929550909350915061407257600083815260018681016020526040909120805460ff85169290921b19909116908190556140725784546001841b191685555b5050505050565b620bd8ab810160020b601081901c90600881901c90610100831061409f5761409f614d1d565b9193909250565b60008082116140b7576140b7614d1d565b70010000000000000000000000000000000082106140d757608091821c91015b6801000000000000000082106140ef57604091821c91015b640100000000821061410357602091821c91015b62010000821061411557601091821c91015b610100821061412657600891821c91015b6010821061413657600491821c91015b6004821061414657600291821c91015b60028210614152576001015b919050565b60006fffffffffffffffffffffffffffffffff80851690841611801561417b579293925b6fffffffffffffffffffffffffffffffff83811685870382160290808716908616026142257701000000000000000000000000000000000000000000000083106141f357836141de576141d9836901000000000000000000846142f5565b6143fd565b6141d983690100000000000000000084614330565b8361420c576141d9604884901b83808204910615150190565b81604884901b8161421f5761421f614d4c565b046143fd565b93508215614253577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509392505050565b60006fffffffffffffffffffffffffffffffff808516908416108015614281579293925b60008585036fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff160290506142e1826142d75768ffffffffffffffffff8216151569010000000000000000008304016143fd565b604882901c6143fd565b9250811561301b5750506000039392505050565b6000614302848484614330565b90506000828061431457614314614d4c565b8486091115611052578061432781614f95565b95945050505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060001415614388576000841161437d57600080fd5b508290049050611052565b80841161439457600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156118f6576118f6614d1d565b82805482825590600052602060002090600901600a900481019282156144d05791602002820160005b8382111561449f57833562ffffff1683826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302614458565b80156144ce5782816101000a81549062ffffff021916905560030160208160020104928301926001030261449f565b505b506118f69291505b808211156118f657600081556001016144d8565b803560ff8116811461415257600080fd5b6000806040838503121561451057600080fd5b614519836144ec565b9150614527602084016144ec565b90509250929050565b8035600281900b811461415257600080fd5b8035801515811461415257600080fd5b600080600080600060a0868803121561456a57600080fd5b8535945061457a602087016144ec565b935061458860408701614530565b925061459660608701614542565b9150608086013563ffffffff811681146145af57600080fd5b809150509295509295909350565b6000602082840312156145cf57600080fd5b813567ffffffffffffffff8111156145e657600080fd5b8201610140818503121561105257600080fd5b60006020828403121561460b57600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156146e257815180516fffffffffffffffffffffffffffffffff90811686528782015116878601528581015162ffffff168686015260608082015161467b8288018260020b9052565b50506080808201516146918288018260020b9052565b505060a0808201516146a78288018260020b9052565b505060c08181015169ffffffffffffffffffff9081169187019190915260e0918201511690850152610100909301929085019060010161462f565b5091979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461415257600080fd5b60008060008060008060c0878903121561472c57600080fd5b8635955061473c602088016146ef565b945060408701359350614751606088016144ec565b925061475f60808801614530565b915061476d60a08801614530565b90509295509295509295565b6000806040838503121561478c57600080fd5b82359150614527602084016144ec565b6020808252825182820181905260009190848201906040850190845b818110156147d757835160ff16835292840192918401916001016147b8565b50909695505050505050565b600080600080608085870312156147f957600080fd5b84359350614809602086016144ec565b925061481760408601614530565b915061482560608601614542565b905092959194509250565b60008083601f84011261484257600080fd5b50813567ffffffffffffffff81111561485a57600080fd5b6020830191508360208260051b8501011115611d3f57600080fd5b6000806020838503121561488857600080fd5b823567ffffffffffffffff81111561489f57600080fd5b6148ab85828601614830565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156147d757835162ffffff16835292840192918401916001016148d3565b6000806000806080858703121561490a57600080fd5b8435935061491a602086016144ec565b9250604085013562ffffff8116811461493257600080fd5b9150614825606086016144ec565b6000806040838503121561495357600080fd5b61495c836146ef565b946020939093013593505050565b60008060006060848603121561497f57600080fd5b8335925061498f602085016144ec565b9150604084013590509250925092565b6000806000606084860312156149b457600080fd5b833592506149c4602085016144ec565b91506149d2604085016144ec565b90509250925092565b600080600080600080600060e0888a0312156149f657600080fd5b6149ff886146ef565b9650614a0d602089016146ef565b9550614a1b604089016144ec565b9450614a2960608901614530565b9350614a3760808901614530565b925060a08801359150614a4c60c089016144ec565b905092959891949750929550565b600060208284031215614a6c57600080fd5b611052826146ef565b60006101208284031215613f4657600080fd5b600080600060408486031215614a9d57600080fd5b83359250602084013567ffffffffffffffff811115614abb57600080fd5b614ac786828701614830565b9497909650939450505050565b60008060408385031215614ae757600080fd5b614af0836146ef565b9150614527602084016146ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614b3f57600080fd5b611052826144ec565b600060208284031215614b5a57600080fd5b61105282614530565b600060208284031215614b7557600080fd5b81356bffffffffffffffffffffffff8116811461105257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614bc657600080fd5b83018035915067ffffffffffffffff821115614be157600080fd5b602001915036819003821315611d3f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501168301019050979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614cbe57614cbe614c7c565b500190565b600060208284031215614cd557600080fd5b61105282614542565b600081600b0b7fffffffffffffffffffffffffffffffffffffffff800000000000000000000000811415614d1457614d14614c7c565b60000392915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008260020b80614db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b808360020b0791505092915050565b60008160020b8360020b6000821282627fffff03821381151615614dea57614dea614c7c565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000038212811615614e1e57614e1e614c7c565b50019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061ffff80831681851681830481118215151615614e7757614e77614c7c565b02949350505050565b60008160020b8360020b60008112817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000001831281151615614ec357614ec3614c7c565b81627fffff018313811615614eda57614eda614c7c565b5090039392505050565b6000825160005b81811015614f055760208186018101518583015201614eeb565b81811115614f14576000828501525b509190910192915050565b600060208284031215614f3157600080fd5b5051919050565b60006bffffffffffffffffffffffff83811690831681811015614f5d57614f5d614c7c565b039392505050565b60006bffffffffffffffffffffffff808316818516808303821115614f8c57614f8c614c7c565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc757614fc7614c7c565b506001019056fea164736f6c634300080a000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806376f0920f116100f9578063ab033ea911610097578063dec980ec11610071578063dec980ec1461055a578063e48603391461056d578063f212d1c5146105f1578063ff23188c1461062657600080fd5b8063ab033ea914610501578063adcef36814610514578063cbdc36cb1461054757600080fd5b80638e9059d6116100d35780638e9059d61461046757806394eff6e31461047a57806399fb8529146104ba5780639f24b6b1146104cd57600080fd5b806376f0920f146103d357806378029b65146103e657806384ec1e15146103f957600080fd5b806352b7e2cb116101665780635f8f9e1f116101405780635f8f9e1f1461036d57806363af8161146103805780636dd705ee146103955780637266a0e4146103a857600080fd5b806352b7e2cb146102c2578063555ed4ad146102e25780635aa6e6751461032857600080fd5b80632fb07eac116101a25780632fb07eac1461023157806335d603f51461025957806343751ee0146102795780634a3b0d34146102af57600080fd5b806312a85dd2146101c957806313fd4c80146101de5780631bf1a607146101f4575b600080fd5b6101dc6101d73660046144fd565b610639565b005b60065b6040519081526020015b60405180910390f35b610207610202366004614552565b610736565b60408051825169ffffffffffffffffffff90811682526020938401511692810192909252016101eb565b61024461023f3660046145bd565b6107f1565b604080519283526020830191909152016101eb565b61026c6102673660046145f9565b610c0d565b6040516101eb9190614612565b61028c610287366004614713565b610d40565b6040805169ffffffffffffffffffff9384168152929091166020830152016101eb565b6101dc6102bd366004614779565b610d6e565b6102d56102d03660046145f9565b610dd2565b6040516101eb919061479c565b6102f56102f03660046147e3565b610df2565b604080516bffffffffffffffffffffffff909416845261ffff909216602084015263ffffffff16908201526060016101eb565b6000546103489073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101eb565b6101dc61037b366004614875565b610e93565b610388610ec8565b6040516101eb91906148b7565b6101dc6103a33660046148f4565b610f4a565b6101e16103b6366004614940565b600560209081526000928352604080842090915290825290205481565b6101e16103e136600461496a565b611026565b6101dc6103f436600461499f565b611059565b61043a6104073660046145f9565b6007602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff918216911682565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101eb565b6101dc6104753660046149db565b6110da565b6101e161048836600461496a565b600083815260046020908152604080832060ff8616845260020182528083208484526001019091529020549392505050565b6103886104c83660046145f9565b61115e565b6101e16104db366004614779565b600082815260046020908152604080832060ff8516845260020190915290205492915050565b6101dc61050f366004614a5a565b6111ea565b610527610522366004614a75565b61127b565b6040805194855260208501939093529183015260608201526080016101eb565b6101dc610555366004614a88565b611532565b610527610568366004614a75565b611575565b6105b861057b366004614a5a565b60066020526000908152604090205460ff81169061010090047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682565b6040805160ff90931683527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091166020830152016101eb565b6106146105ff3660046145f9565b60009081526002602052604090205460ff1690565b60405160ff90911681526020016101eb565b6101e1610634366004614ad4565b611756565b60005473ffffffffffffffffffffffffffffffffffffffff16331461065d57600080fd5b60008260ff161161066d57600080fd5b600080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff8581169182027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16929092177501000000000000000000000000000000000000000000928516928302179092556040805192835260208301919091527f35096a66abfbffecdb17659874bfe9c9c46458e61abf336a4607441a2bc532e9910160405180910390a15050565b6040805180820190915260008082526020820152600086815260046020818152604080842060ff8a1685529092018152818320600288900b84529052812084610780576000610783565b60015b60ff166002811061079657610796614afe565b63ffffffff94909416600090815260029490940201600101602090815260409384902084518086019095525469ffffffffffffffffffff80821686526a01000000000000000000009091041690840152509095945050505050565b600080808061081f6108066020870187614a5a565b6108166040880160208901614a5a565b60049190611848565b90925090506108a061083760e0870160c08801614a5a565b60e087013561084c6060890160408a01614b2d565b61085c60808a0160608b01614b48565b61086c60a08b0160808c01614b48565b61089261087f60c08d0160a08e01614b63565b6bffffffffffffffffffffffff166118ca565b8895949392919060006118fa565b50919550935084905083610100870135156109c65760006108c633896101000135611cd3565b905061091783600560006108dd60208d018d614a5a565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040908101600090812086825290925290205490611d26565b6005600061092860208d018d614a5a565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081208682528352818120949094559195506109799285926005926108dd918e01908e01614a5a565b6005600061098d60408d0160208e01614a5a565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260409081016000908120958152949091529092205590505b811515806109d357508015155b15610ad25760006109ef6109ea60208a018a614a5a565b611d46565b90506000610a066109ea60408b0160208c01614a5a565b905033633d705707610a1b60208c018c614a5a565b610a2b60408d0160208e01614a5a565b87878e806101200190610a3e9190614b91565b6040518763ffffffff1660e01b8152600401610a5f96959493929190614bf6565b600060405180830381600087803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b50610ab29250610aa391505060208b018b614a5a565b610aad8685614cab565b611de8565b610acf610ac560408b0160208c01614a5a565b610aad8584614cab565b50505b60e08701803590610ae69060c08a01614a5a565b73ffffffffffffffffffffffffffffffffffffffff16847fc53ff5211237355d20d63b638bcbf8125b8d938df83b6e65674435942aaa6124610b2e60608c0160408d01614b2d565b610b3e60808d0160608e01614b48565b610b4e60a08e0160808f01614b48565b338e61010001358f60a0016020810190610b689190614b63565b6040805160ff9097168752600295860b60208801529390940b9285019290925273ffffffffffffffffffffffffffffffffffffffff16606084015260808301526bffffffffffffffffffffffff1660a082015260c081018b905260e081018a90526101000160405180910390a4610c048480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b50505050915091565b606060046000838152602001908152602001600020600101805480602002602001604051908101604052809291908181526020016000905b82821015610d355760008481526020908190206040805161010081018252600280870290930180546fffffffffffffffffffffffffffffffff8082168452700100000000000000000000000000000000909104168286015260019081015462ffffff81169383019390935263010000008304840b606083015266010000000000008304840b60808301526901000000000000000000830490930b60a082015269ffffffffffffffffffff6c010000000000000000000000008304811660c083015276010000000000000000000000000000000000000000000090920490911660e082015283529092019101610c45565b505050509050919050565b60008681526004602052604081208190610d5e908888888888611e7a565b915091505b965096945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d9257600080fd5b60009182526002602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055565b6000818152600460205260409020606090610dec90611f80565b92915050565b600084815260046020818152604080842060ff881685529092018152818320600286900b84529052812081908190819085610e2e576000610e31565b60015b60ff1660028110610e4457610e44614afe565b60020201546bffffffffffffffffffffffff8116996c01000000000000000000000000820461ffff1699506e01000000000000000000000000000090910463ffffffff16975095505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eb757600080fd5b610ec36001838361442f565b505050565b60606001805480602002602001604051908101604052809291908181526020018280548015610f4057602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610f055790505b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f6e57600080fd5b6000848152600460205260409020610f8881858585612071565b8262ffffff168460ff16867f8ba9b3074e943a040d7cc32a0a69db4cada877568ff71021a69579a1f004e440846001018860ff1681548110610fcc57610fcc614afe565b600091825260209182902060029091020154604080517001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff16825260ff8916928201929092520160405180910390a45050505050565b600083815260046020908152604080832060ff8616845260029081018352818420858552019091529020545b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461107d57600080fd5b600083815260046020526040902061109690838361212c565b6040805160ff80851682528316602082015284917f9580ff8b575ec2cb80ff564eac7c041dcd3e5b60869932d1b87dfff585a1b2e9910160405180910390a2505050565b6000806110e960048a8a611848565b90925090506110fd8233868a8a8a896121a8565b6040805160ff8981168252600289810b602084015288900b828401528516606082015290518591339184917f6aeb822cd244fd07ac151aa36b7e0446b826e45afbc63e7449ff9d8810b94d50919081900360800190a4505050505050505050565b6000818152600360209081526040918290208054835181840281018401909452808452606093928301828280156111de57602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff16815260200190600301906020826002010492830192600103820291508084116111a35790505b50505050509050919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461120e57600080fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab91a250565b600080808080806112a26112926020890189614a5a565b61081660408a0160208b01614a5a565b90925090506113113360c08901356112c060608b0160408c01614b2d565b6112d060808c0160608d01614b48565b6112e060a08d0160808e01614b48565b6112f060c08e0160a08f01614b63565b8d6101000160208101906113049190614cc3565b89969594939291906124c1565b92985090965094509250600061132b3360e08a0135611cd3565b90506113378588614cab565b6005600061134860208c018c614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546113a29190614cab565b909155506113b290508487614cab565b600560006113c660408c0160208d01614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546114209190614cab565b909155505060c088013533837f47620c9edb42fa2078ca7272fd369516dfd3a7008f7f8ac55e63618d1c88e0cb61145d60608d0160408e01614b2d565b61146d60808e0160608f01614b48565b8d60800160208101906114809190614b48565b8e60e001358f60a00160208101906114989190614b63565b6040805160ff9096168652600294850b60208701529290930b9184019190915260608301526bffffffffffffffffffffffff16608082015260a081018c905260c081018b905260e081018a905261010081018990526101200160405180910390a46115288380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5050509193509193565b60005473ffffffffffffffffffffffffffffffffffffffff16331461155657600080fd5b600083815260036020526040902061156f90838361442f565b50505050565b6000808080808061158c6112926020890189614a5a565b909250905061160a3360c08901356115aa60608b0160408c01614b2d565b6115ba60808c0160608d01614b48565b6115ca60a08d0160808e01614b48565b6115e08d60a001602081019061087f9190614b63565b6115e990614cde565b8d6101000160208101906115fd9190614cc3565b89969594939291906118fa565b9298509096509450925060006116243360e08a0135611cd3565b90506116308588614cab565b6005600061164160208c018c614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600082825461169b9190614cab565b909155506116ab90508487614cab565b600560006116bf60408c0160208d01614a5a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546117199190614cab565b909155505060c088013533837f25e512703cb4707dd00bf7ff8e3274a018a1a1e8aa39351a4f711c16033d036661145d60608d0160408e01614b2d565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461177b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020805460ff811690915561010090047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166117db8383836126cf565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a18654a5039b989ca382f52bbf82bcdde698ffc4c11fe6c59652a4d1fe70f488360405161183a91815260200190565b60405180910390a392915050565b600080838360405160200161188092919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600081815297909252909520959350505050565b60006b7fffffffffffffffffffffff6bffffffffffffffffffffffff831611156118f6576118f6614d1d565b5090565b6000806000806119098c612766565b611913888861279c565b600086600b0b13156119bb578b5461193390610100900460ff1689614d7b565b60020b1561196d576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8b5461198190610100900460ff1688614d7b565b60020b156119bb576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008c6001018a60ff16815481106119d5576119d5614afe565b906000526020600020906002020190508060010160039054906101000a900460020b60020b8960020b13158015611a1d57506001810154600289810b6301000000909204900b125b15611a84578054611a47906fffffffffffffffffffffffffffffffff16600889901b600c0b612820565b81547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161781555b506000611a958d8b8b8a600161284c565b9050611aa58d8b8a8a600061284c565b80611aad5750805b90508015611afe5760008d6001018b60ff1681548110611acf57611acf614afe565b90600052602060002090600202019050611af28a82612bb590919063ffffffff16565b611afc818a612bb5565b505b50611b0f8c8c8c8c8c8c8c8c612c8f565b90925090506000600b87900b1215611c49576000611b2e8d8b8b612e59565b9050611b3b8d8b8a612e59565b80611b435750805b90508015611c475760008d6001018b60ff1681548110611b6557611b65614afe565b906000526020600020906002020190506000611bb58f60020160008e60ff1681526020019081526020016000208360010160039054906101000a900460020b6001611bb09190614dc4565b613024565b905060008f60030160008e60ff16815260200190815260200160002060008360020b60020b8152602001908152602001600020600001601b9054906101000a900460020b9050818360010160066101000a81548162ffffff021916908360020b62ffffff160217905550808360010160096101000a81548162ffffff021916908360020b62ffffff1602179055505050505b505b85600b0b600014611cc457611cbe8c6001018a60ff1681548110611c6f57611c6f614afe565b600091825260209091206002909102015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611caf8a61318b565b611cb88a61318b565b896134e3565b90945092505b98509850985098945050505050565b600081611cdf57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8516602082015290810183905260600160405160208183030381529060405280519060200120905092915050565b600080828410611d3a578284039150611d3f565b508282035b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff8216738dd5fbce2f6a956c3022ba3663759011dd51e73e1415611d7f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020805460ff1660011415611db657600080fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155611052836135cf565b80611df2836135cf565b1015611e2a576040517fde2cd50d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166002179055565b60008073ffffffffffffffffffffffffffffffffffffffff871615611f745760ff85166000908152600489016020908152604080832081517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d901b16818501527fff0000000000000000000000000000000000000000000000000000000000000060f88b901b16603482015260e889811b603583015288901b6038820152603b8082018c905283518083039091018152605b9091018352805190840120845260058c0190925282208291611f52918888613708565b915091508115611f715780600001518160200151935093505050610d63565b50505b610d5e88868686613810565b6040805160c0810191829052606091600091906006858101918285855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611f9d57505050506001860154929350505067ffffffffffffffff811115611fef57611fef614e27565b604051908082528060200260200182016040528015612018578160200160208202803683370190505b50915060005b825181101561206a5781816006811061203957612039614afe565b602002015183828151811061205057612050614afe565b60ff9092166020928302919091019091015260010161201e565b5050919050565b835460ff1661207f57600080fd5b600184015460ff84161061209257600080fd5b620186a062ffffff831611156120a757600080fd5b81846001018460ff16815481106120c0576120c0614afe565b906000526020600020906002020160010160006101000a81548162ffffff021916908362ffffff16021790555080846006018460ff166006811061210657612106614afe565b602091828204019190066101000a81548160ff021916908360ff16021790555050505050565b825460ff1661213a57600080fd5b60008260ff161161214a57600080fd5b82547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1661010060ff938416027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1617620100009190921602179055565b865460ff166121b657600080fd5b600260ff821611156121c757600080fd5b6121d1838361279c565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089901b166020808301919091527fff0000000000000000000000000000000000000000000000000000000000000060f888901b16603483015260e886811b603584015285901b6038830152603b80830189905283518084039091018152605b9092018352815191810191909120600090815260058a0190915290812090506000886006018660ff166006811061229057612290614afe565b60208104909101548a546122ba9260ff601f90911661010090810a90930481169290910416614e56565b600183015490915060ff161561238e5760ff808716600090815260048b016020908152604080832060038e019092528220600186015486549394612313948b928b9216906bffffffffffffffffffffffff16878961398a565b50600184015490915063ffffffff8083166101009092041614612362576040517f3ec12a8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001690555b60ff8316156124b65781546bffffffffffffffffffffffff166123dd576040517f3ba338b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff8616600090815260048a016020908152604080832060038d019092528220845483926124239290918a908a908a906bffffffffffffffffffffffff1660018a61398a565b909250905061ffff81166124378888614e80565b62ffffff1614612473576040517f51ba015200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060018301805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921660ff8616179190911790555b505050505050505050565b6000806000806124d08c612766565b6124da888861279c565b604080517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608e901b166020808301919091527fff0000000000000000000000000000000000000000000000000000000000000060f88d901b16603483015260e88b811b60358401528a901b6038830152603b8083018e905283518084039091018152605b9092018352815191810191909120600090815260058f0190915290812090506000806125a58f60040160008e60ff168152602001908152602001600020848d8d613708565b91509150816125e0576040517f5a6c1fdc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126146125fa8a6bffffffffffffffffffffffff166118ca565b61260390614cde565b82516020840151869291908c613c7b565b90955093506000915061262890508a61318b565b905060006126358a61318b565b6001848101549192506126799160ff16146126505782612652565b815b838361266b8d6bffffffffffffffffffffffff166118ca565b61267490614cde565b6134e3565b845491985096506bffffffffffffffffffffffff166126bd576001830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001690555b50505098509850985098945050505050565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201528260248201526000806044836000895af191505061273081613f07565b61156f576040517fbfa871c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805460ff1661277457600080fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b8060020b8260020b1215806127d45750600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755135b806127e55750620bd8ab600282900b135b1561281c576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60006fffffffffffffffffffffffffffffffff808416600f84900b019081111561105257611052614d1d565b60ff841660009081526003860160209081526040808320600287900b845291829052822080546bffffffffffffffffffffffff161580156128aa575080546c0100000000000000000000000090046bffffffffffffffffffffffff16155b15612ad957600085600b0b13156129e25760ff871660009081526002890160205260408120906128da8289613024565b905060008460008360020b60020b8152602001908152602001600020600001601b9054906101000a900460020b9050818460000160186101000a81548162ffffff021916908360020b62ffffff1602179055508084600001601b6101000a81548162ffffff021916908360020b62ffffff160217905550888560008460020b60020b8152602001908152602001600020600001601b6101000a81548162ffffff021916908360020b62ffffff160217905550888560008360020b60020b815260200190815260200160002060000160186101000a81548162ffffff021916908360020b62ffffff1602179055506129da8984613f4c90919063ffffffff16565b600195505050505b6000886001018860ff16815481106129fc576129fc614afe565b906000526020600020906002020190508060010160039054906101000a900460020b60020b8760020b13612ad7576001818101805491840180546c0100000000000000000000000090930469ffffffffffffffffffff9081167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000085168117835592547fffffffffffffffffffffffff00000000000000000000000000000000000000009094169092177601000000000000000000000000000000000000000000009093049091166a0100000000000000000000029190911790555b505b8315612b36578054612af9906bffffffffffffffffffffffff1686613fa8565b81547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178155612baa565b8054612b60906c0100000000000000000000000090046bffffffffffffffffffffffff1686613fa8565b81546bffffffffffffffffffffffff919091166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9091161781555b505095945050505050565b600182015463010000009004600290810b9082900b13612c2b57600182015466010000000000009004600290810b9082900b131561281c576001820180547fffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff16660100000000000062ffffff8416021790555050565b600182015469010000000000000000009004600290810b9082900b121561281c5760018201805462ffffff83166901000000000000000000027fffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff9091161790555050565b604080517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b166020808301919091527fff0000000000000000000000000000000000000000000000000000000000000060f889901b16603483015260e887811b603584015286901b6038830152603b8083018a905283518084039091018152605b9092018352815191810191909120600090815260058b019091529081208190600080612d438d8b8b8b613810565b9092509050612d55838884848a613c7b565b6001850154919650945060ff16159150612e4b9050576000612dbc8c60040160008b60ff1681526020019081526020016000208d60030160008c60ff1681526020019081526020016000208a8a8660010160009054906101000a900460ff168b6000613fd0565b600183015490915063ffffffff8083166101009092041614612e0a576040517f3ec12a8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546bffffffffffffffffffffffff16612e49576001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001690555b505b509850989650505050505050565b60ff821660009081526003840160209081526040808320600285900b845291829052822080546bffffffffffffffffffffffff16158015612eb7575080546c0100000000000000000000000090046bffffffffffffffffffffffff16155b1561301b57600284900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4275514801590612ef75750600284900b620bd8ab14155b612f0357612f03614d1d565b80547801000000000000000000000000000000000000000000000000808204600281810b60008181526020888152604080832080547fffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff167b01000000000000000000000000000000000000000000000000000000998a900462ffffff818116909b0291909117909155850b80845281842080547fffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffff16999097169097029790971790945589830b815285812081815560010180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560ff8b168152918b01909252929092206130149087614006565b6001945050505b50509392505050565b60008060008061303385614079565b600082815260028a01602052604090205492955090935091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600160ff84161b011680613146576000848152600188810160205260409091205460ff85169190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116806131185787547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001871b0116806130f4576130f4614d1d565b6130fd816140a6565b60ff16600081815260018b0160205260409020549096509150505b613121816140a6565b60ff16600886901b179350876002016000858152602001908152602001600020549150505b613180613152826140a6565b60ff16600885901b177ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427550190565b979650505050505050565b6000600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755138015906131c85750620bd8ab600283900b13155b6131d157600080fd5b6000808360020b126131e357826131e8565b826000035b62ffffff811691507001000000000000000000000000000000009060011615613221576ffffcb933bd6fad37aa2d162d1a5940010260801c5b6002821615613240576ffff97272373d413259a46990580e213a0260801c5b600482161561325f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561327e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561329d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156132bc576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156132db576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156132fa576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561331a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561333a576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561335a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561337a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561339a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156133ba576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156133da576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156133fa576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561341b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561343b576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561345a576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613477576b048a170391f7dc42444e8fa20260801c5b60008460020b126134b557807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816134b1576134b1614d4c565b0490505b60006701000000000000008206116134ce5760006134d1565b60015b60ff16603882901c0192505050919050565b600080846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff161061354857836fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff1611613542578561354a565b8361354a565b845b955060006008600085600b0b12156135655784600003613567565b845b6bffffffffffffffffffffffff16901b90506000600b85900b126135a457613590858883614157565b925061359d86888361425d565b91506135c5565b6135af878683614157565b60000392506135bf87878361425d565b60000391505b5094509492505050565b604080513060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff8616916136619190614ee4565b600060405180830381855afa9150503d806000811461369c576040519150601f19603f3d011682016040523d82523d6000602084013e6136a1565b606091505b50915091508115806136b557508051602014155b156136ec576040517f77b1b94e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808060200190518101906137009190614f1f565b949350505050565b604080518082019091526000808252602082018190529060018581015460ff16148061373b5750600185015460ff166002145b156138075760018581015460009160ff9091161461376b57600285900b6000908152602088905260409020613780565b600284810b6000908152602089905260409020015b8054600188015491925063ffffffff6e01000000000000000000000000000090910481166101009092041610156135c557600186810154610100900463ffffffff166000908152918101602090815260409283902083518085019094525469ffffffffffffffffffff80821685526a01000000000000000000009091041690830152925090505b94509492505050565b60ff831660008181526003860160209081526040808320600286810b855292528083209186900b835282206001880180549394859485929190811061385757613857614afe565b60009182526020909120600291820201600181015490925063010000009004810b9088900b8112156138c0576001808501549084015469ffffffffffffffffffff8083168282160398506a0100000000000000000000928390048116929091041603945061397d565b8660020b8160020b1261390a576001808401549085015469ffffffffffffffffffff8083168282160398506a0100000000000000000000928390048116929091041603945061397d565b600180840154858201549184015469ffffffffffffffffffff8083168482166c0100000000000000000000000084048316030399506a0100000000000000000000928390048116929093048316760100000000000000000000000000000000000000000000909104909216919091030394505b5050505094509492505050565b60008060ff8616600114806139a2575060ff86166002145b6139ae576139ae614d1d565b600060ff87166001146139d357600289900b600090815260208c9052604090206139e8565b600288810b600090815260208d905260409020015b905084613a0f578054613a0a9087906bffffffffffffffffffffffff16614f38565b613a2a565b8054613a2a9087906bffffffffffffffffffffffff16614f65565b81547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178082556e010000000000000000000000000000810463ffffffff1693506c01000000000000000000000000900461ffff16613b4a57805461ffff85166c01000000000000000000000000027fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff90911617815560408051808201825260008082526001602080840182815263ffffffff89168452918601905292902090518154925169ffffffffffffffffffff9081166a0100000000000000000000027fffffffffffffffffffffffff00000000000000000000000000000000000000009094169116179190911790555b80546bffffffffffffffffffffffff16158015613b885781547fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff1682555b60ff881660011415613bf657600289900b600090815260208c90526040902080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682157f010000000000000000000000000000000000000000000000000000000000000002179055613c54565b60028a900b600090815260208c90526040902080547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682157e01000000000000000000000000000000000000000000000000000000000000021790555b5054919a6c0100000000000000000000000090920461ffff16995090975050505050505050565b845460009081906bffffffffffffffffffffffff1681613c9b8289613fa8565b89546bffffffffffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008216178b5590915069ffffffffffffffffffff6c010000000000000000000000008204811689039176010000000000000000000000000000000000000000000090041687038615613d9b578a5469ffffffffffffffffffff8981167601000000000000000000000000000000000000000000000275ffffffffffffffffffffffffffffffffffffffffffff8c83166c0100000000000000000000000002166bffffffffffffffffffffffff93841617178d559085168184168102603890811c985091831602901c9450613ef9565b60008a600b0b1315613ea057826bffffffffffffffffffffffff168269ffffffffffffffffffff16856bffffffffffffffffffffffff160281613de057613de0614d4c565b8c5469ffffffffffffffffffff929091048b0382166c01000000000000000000000000027fffffffffffffffffffff00000000000000000000ffffffffffffffffffffffff909116178c556bffffffffffffffffffffffff808516919086169083160281613e5057613e50614d4c565b8c5475ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000929091048a0369ffffffffffffffffffff1691909102178b55613ef9565b60008a600b0b1215613ef95760388269ffffffffffffffffffff168b6000036bffffffffffffffffffffffff1602901c955060388169ffffffffffffffffffff168b6000036bffffffffffffffffffffffff1602901c94505b505050509550959350505050565b600081613f18573d6000803e3d6000fd5b3d60208114613f30578015613f415760009150613f46565b3d6000803e60005115159150613f46565b600191505b50919050565b6000806000613f5a84614079565b600082815260028901602090815260408083208054600160ff96871681901b909117909155868452808c0190925290912080549290931681901b9091179091558654911b1790945550505050565b60006bffffffffffffffffffffffff808416600b84900b019081111561105257611052614d1d565b6000600b83900b8112613ff8898989898986613fef5789600003613ff1565b895b878a61398a565b509998505050505050505050565b600080600061401484614079565b600082815260028901602052604090208054600160ff84161b191690819055929550909350915061407257600083815260018681016020526040909120805460ff85169290921b19909116908190556140725784546001841b191685555b5050505050565b620bd8ab810160020b601081901c90600881901c90610100831061409f5761409f614d1d565b9193909250565b60008082116140b7576140b7614d1d565b70010000000000000000000000000000000082106140d757608091821c91015b6801000000000000000082106140ef57604091821c91015b640100000000821061410357602091821c91015b62010000821061411557601091821c91015b610100821061412657600891821c91015b6010821061413657600491821c91015b6004821061414657600291821c91015b60028210614152576001015b919050565b60006fffffffffffffffffffffffffffffffff80851690841611801561417b579293925b6fffffffffffffffffffffffffffffffff83811685870382160290808716908616026142257701000000000000000000000000000000000000000000000083106141f357836141de576141d9836901000000000000000000846142f5565b6143fd565b6141d983690100000000000000000084614330565b8361420c576141d9604884901b83808204910615150190565b81604884901b8161421f5761421f614d4c565b046143fd565b93508215614253577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840293505b5050509392505050565b60006fffffffffffffffffffffffffffffffff808516908416108015614281579293925b60008585036fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff160290506142e1826142d75768ffffffffffffffffff8216151569010000000000000000008304016143fd565b604882901c6143fd565b9250811561301b5750506000039392505050565b6000614302848484614330565b90506000828061431457614314614d4c565b8486091115611052578061432781614f95565b95945050505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060001415614388576000841161437d57600080fd5b508290049050611052565b80841161439457600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156118f6576118f6614d1d565b82805482825590600052602060002090600901600a900481019282156144d05791602002820160005b8382111561449f57833562ffffff1683826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302614458565b80156144ce5782816101000a81549062ffffff021916905560030160208160020104928301926001030261449f565b505b506118f69291505b808211156118f657600081556001016144d8565b803560ff8116811461415257600080fd5b6000806040838503121561451057600080fd5b614519836144ec565b9150614527602084016144ec565b90509250929050565b8035600281900b811461415257600080fd5b8035801515811461415257600080fd5b600080600080600060a0868803121561456a57600080fd5b8535945061457a602087016144ec565b935061458860408701614530565b925061459660608701614542565b9150608086013563ffffffff811681146145af57600080fd5b809150509295509295909350565b6000602082840312156145cf57600080fd5b813567ffffffffffffffff8111156145e657600080fd5b8201610140818503121561105257600080fd5b60006020828403121561460b57600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156146e257815180516fffffffffffffffffffffffffffffffff90811686528782015116878601528581015162ffffff168686015260608082015161467b8288018260020b9052565b50506080808201516146918288018260020b9052565b505060a0808201516146a78288018260020b9052565b505060c08181015169ffffffffffffffffffff9081169187019190915260e0918201511690850152610100909301929085019060010161462f565b5091979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461415257600080fd5b60008060008060008060c0878903121561472c57600080fd5b8635955061473c602088016146ef565b945060408701359350614751606088016144ec565b925061475f60808801614530565b915061476d60a08801614530565b90509295509295509295565b6000806040838503121561478c57600080fd5b82359150614527602084016144ec565b6020808252825182820181905260009190848201906040850190845b818110156147d757835160ff16835292840192918401916001016147b8565b50909695505050505050565b600080600080608085870312156147f957600080fd5b84359350614809602086016144ec565b925061481760408601614530565b915061482560608601614542565b905092959194509250565b60008083601f84011261484257600080fd5b50813567ffffffffffffffff81111561485a57600080fd5b6020830191508360208260051b8501011115611d3f57600080fd5b6000806020838503121561488857600080fd5b823567ffffffffffffffff81111561489f57600080fd5b6148ab85828601614830565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156147d757835162ffffff16835292840192918401916001016148d3565b6000806000806080858703121561490a57600080fd5b8435935061491a602086016144ec565b9250604085013562ffffff8116811461493257600080fd5b9150614825606086016144ec565b6000806040838503121561495357600080fd5b61495c836146ef565b946020939093013593505050565b60008060006060848603121561497f57600080fd5b8335925061498f602085016144ec565b9150604084013590509250925092565b6000806000606084860312156149b457600080fd5b833592506149c4602085016144ec565b91506149d2604085016144ec565b90509250925092565b600080600080600080600060e0888a0312156149f657600080fd5b6149ff886146ef565b9650614a0d602089016146ef565b9550614a1b604089016144ec565b9450614a2960608901614530565b9350614a3760808901614530565b925060a08801359150614a4c60c089016144ec565b905092959891949750929550565b600060208284031215614a6c57600080fd5b611052826146ef565b60006101208284031215613f4657600080fd5b600080600060408486031215614a9d57600080fd5b83359250602084013567ffffffffffffffff811115614abb57600080fd5b614ac786828701614830565b9497909650939450505050565b60008060408385031215614ae757600080fd5b614af0836146ef565b9150614527602084016146ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614b3f57600080fd5b611052826144ec565b600060208284031215614b5a57600080fd5b61105282614530565b600060208284031215614b7557600080fd5b81356bffffffffffffffffffffffff8116811461105257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614bc657600080fd5b83018035915067ffffffffffffffff821115614be157600080fd5b602001915036819003821315611d3f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501168301019050979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614cbe57614cbe614c7c565b500190565b600060208284031215614cd557600080fd5b61105282614542565b600081600b0b7fffffffffffffffffffffffffffffffffffffffff800000000000000000000000811415614d1457614d14614c7c565b60000392915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008260020b80614db5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b808360020b0791505092915050565b60008160020b8360020b6000821282627fffff03821381151615614dea57614dea614c7c565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000038212811615614e1e57614e1e614c7c565b50019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061ffff80831681851681830481118215151615614e7757614e77614c7c565b02949350505050565b60008160020b8360020b60008112817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000001831281151615614ec357614ec3614c7c565b81627fffff018313811615614eda57614eda614c7c565b5090039392505050565b6000825160005b81811015614f055760208186018101518583015201614eeb565b81811115614f14576000828501525b509190910192915050565b600060208284031215614f3157600080fd5b5051919050565b60006bffffffffffffffffffffffff83811690831681811015614f5d57614f5d614c7c565b039392505050565b60006bffffffffffffffffffffffff808316818516808303821115614f8c57614f8c614c7c565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc757614fc7614c7c565b506001019056fea164736f6c634300080a000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
