{
  "_format": "hh-sol-artifact-1",
  "contractName": "Manager",
  "sourceName": "contracts/periphery/Manager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_hub",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WETH9",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "DeadlinePassed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedTransferETH",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedTransferFrom",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "domainSeperator",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WETH9",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "useAccount",
              "type": "bool"
            }
          ],
          "internalType": "struct IPositionManager.AddLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "sqrtGamma",
          "type": "uint24"
        },
        {
          "internalType": "bool",
          "name": "useAccount",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "expectedTierId",
          "type": "uint8"
        }
      ],
      "name": "addTier",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "sqrtGamma",
          "type": "uint24"
        },
        {
          "internalType": "uint128",
          "name": "sqrtPrice",
          "type": "uint128"
        },
        {
          "internalType": "bool",
          "name": "useAccount",
          "type": "bool"
        }
      ],
      "name": "createPool",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "recipientAccRefId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "depositToExternal",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fromAccount",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "toAccount",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "exactIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tierChoices",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fromAccount",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "toAccount",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "exactInSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMaximum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fromAccount",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "toAccount",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "exactOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tierChoices",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMaximum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fromAccount",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "toAccount",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "exactOutSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getPosition",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "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"
        },
        {
          "components": [
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside0Last",
              "type": "uint80"
            },
            {
              "internalType": "uint80",
              "name": "feeGrowthInside1Last",
              "type": "uint80"
            },
            {
              "internalType": "uint8",
              "name": "limitOrderType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "settlementSnapshotId",
              "type": "uint32"
            }
          ],
          "internalType": "struct Positions.Position",
          "name": "position",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "hub",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "latestTokenId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "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": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "useAccount",
              "type": "bool"
            }
          ],
          "internalType": "struct IPositionManager.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint96",
          "name": "liquidityD8",
          "type": "uint96"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "muffinDepositCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "muffinMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "muffinSwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "pairIdsByPoolId",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "name": "pairs",
      "outputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "positionsByTokenId",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint40",
          "name": "pairId",
          "type": "uint40"
        },
        {
          "internalType": "uint8",
          "name": "tierId",
          "type": "uint8"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint96",
              "name": "liquidityD8",
              "type": "uint96"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "withdrawTo",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "collectAllFees",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "settled",
              "type": "bool"
            }
          ],
          "internalType": "struct IPositionManager.RemoveLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "removeLiquidity",
      "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "limitOrderType",
          "type": "uint8"
        }
      ],
      "name": "setLimitOrderType",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "descriptor",
          "type": "address"
        }
      ],
      "name": "setTokenDescriptor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "setter",
          "type": "address"
        }
      ],
      "name": "setTokenDescriptorSetter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenDescriptor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenDescriptorSetter",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60e0604052600a805464ffffffffff191660011790553480156200002257600080fd5b5060405162006313380380620063138339810160408190526200004591620001bb565b604080518082018252600f81526e26bab33334b7102837b9b4ba34b7b760891b60208083019182528351808501909452600a8452694d554646494e2d504f5360b01b908401526001600160a01b0380861660a0528416608052815191929183918391620000b591600091620000f8565b508051620000cb906001906020840190620000f8565b5050825160209093019290922060c0525050600680546001600160a01b0319163317905550620002309050565b8280546200010690620001f3565b90600052602060002090601f0160209004810192826200012a576000855562000175565b82601f106200014557805160ff191683800117855562000175565b8280016001018555821562000175579182015b828111156200017557825182559160200191906001019062000158565b506200018392915062000187565b5090565b5b8082111562000183576000815560010162000188565b80516001600160a01b0381168114620001b657600080fd5b919050565b60008060408385031215620001cf57600080fd5b620001da836200019e565b9150620001ea602084016200019e565b90509250929050565b600181811c908216806200020857607f821691505b602082108114156200022a57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c051615fe86200032b600039600081816105930152611cab01526000818161061e0152818161106a015281816112360152818161139d015281816114ea015281816117d50152818161188201528181611a3c01528181611b4401528181612308015281816124f60152818161269901528181612ae10152818161302d0152818161305e0152818161339d015281816134b90152818161358501528181613ec501528181613f6c015281816140200152818161412b0152614514015260008181610348015281816106a5015281816131210152818161321b01528181613de001528181613e260152613ef40152615fe86000f3fe6080604052600436106103385760003560e01c806370a08231116101b0578063b88d4fde116100ec578063e16d9ce511610095578063f0db800c1161006f578063f0db800c14610b97578063f1371dd514610bf8578063f3995c6714610c18578063f5a9817514610c2b57600080fd5b8063e16d9ce514610a75578063e985e9c514610a88578063eb02c30114610ad157600080fd5b8063ce3fa4dd116100c6578063ce3fa4dd14610a12578063d9899ff014610a4f578063d9caed1214610a6257600080fd5b8063b88d4fde146108ff578063c2814b0c1461091f578063c87b56dd146109f257600080fd5b806395d89b4111610159578063ac9650d811610133578063ac9650d81461088c578063ae4bf64b146108ac578063b6dc7ea3146108cc578063b80f55c9146108ec57600080fd5b806395d89b4114610844578063a22cb46514610859578063a73970cf1461087957600080fd5b80638137cdbf1161018a5780638137cdbf146108005780638340f549146108135780638c0e83491461082657600080fd5b806370a082311461078d5780637ac2ff7b146107ad5780637c2d10fd146107c057600080fd5b806330adf81f1161027f5780634aa4a4fc116102285780635a9d7a68116102025780635a9d7a681461071a5780635dd582041461073a5780636352211e1461074d578063641229d91461076d57600080fd5b80634aa4a4fc146106935780634f594557146106c75780635325261c146106e757600080fd5b80633d705707116102595780633d7057071461064057806342842e0e146106605780634659a4941461068057600080fd5b806330adf81f146105235780633644e51514610557578063365a86fc1461060c57600080fd5b806318160ddd116102e15780632809a659116102bb5780632809a659146104b35780632e85d3ae146104c65780632f8bc1ec146104d957600080fd5b806318160ddd1461046b57806323b872dd146104805780632513f7f2146104a057600080fd5b8063095ea7b311610312578063095ea7b31461040857806312210e8a14610428578063141a468c1461043057600080fd5b806301ffc9a71461037957806306fdde03146103ae578063081812fc146103d057600080fd5b3661037457336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037257600080fd5b005b600080fd5b34801561038557600080fd5b50610399610394366004614eb8565b610c3e565b60405190151581526020015b60405180910390f35b3480156103ba57600080fd5b506103c3610d23565b6040516103a59190614f2d565b3480156103dc57600080fd5b506103f06103eb366004614f40565b610db5565b6040516001600160a01b0390911681526020016103a5565b34801561041457600080fd5b50610372610423366004614f6e565b610e60565b610372610f92565b34801561043c57600080fd5b5061045d61044b366004614f40565b60076020526000908152604090205481565b6040519081526020016103a5565b34801561047757600080fd5b5061045d610fa4565b34801561048c57600080fd5b5061037261049b366004614f9a565b610fe1565b6103726104ae36600461500f565b611068565b61045d6104c1366004615080565b611228565b61045d6104d4366004615080565b61138f565b3480156104e557600080fd5b5061050d6104f4366004614f40565b600c6020526000908152604090205464ffffffffff1681565b60405164ffffffffff90911681526020016103a5565b34801561052f57600080fd5b5061045d7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b34801561056357600080fd5b5061045d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b34801561061857600080fd5b506103f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5061037261065b366004615161565b6114df565b34801561066c57600080fd5b5061037261067b366004614f9a565b61154f565b61037261068e3660046151ec565b61156a565b34801561069f57600080fd5b506103f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d357600080fd5b506103726106e2366004615248565b611618565b6106fa6106f5366004615265565b61165e565b6040805194855260208501939093529183015260608201526080016103a5565b34801561072657600080fd5b506005546103f0906001600160a01b031681565b610372610748366004615277565b6119f7565b34801561075957600080fd5b506103f0610768366004614f40565b611aae565b34801561077957600080fd5b506103726107883660046152bf565b611b39565b34801561079957600080fd5b5061045d6107a8366004615248565b611b90565b6103726107bb3660046151ec565b611c2a565b6107d36107ce36600461531b565b61208e565b604080519485526bffffffffffffffffffffffff90931660208501529183015260608201526080016103a5565b61037261080e36600461532e565b612306565b610372610821366004614f9a565b6124f4565b34801561083257600080fd5b506008546001600160801b031661045d565b34801561085057600080fd5b506103c3612599565b34801561086557600080fd5b50610372610874366004615391565b6125a8565b61045d6108873660046153ca565b61268b565b61089f61089a3660046154a8565b612853565b6040516103a591906154ea565b3480156108b857600080fd5b506006546103f0906001600160a01b031681565b3480156108d857600080fd5b506103726108e7366004615248565b612971565b6103726108fa3660046154a8565b6129b7565b34801561090b57600080fd5b5061037261091a3660046155d9565b612be1565b34801561092b57600080fd5b506109ae61093a366004614f40565b6009602052600090815260409020546001600160a01b0381169064ffffffffff740100000000000000000000000000000000000000008204169060ff79010000000000000000000000000000000000000000000000000082041690600160d01b8104600290810b91600160e81b9004900b85565b604080516001600160a01b03909616865264ffffffffff909416602086015260ff90921692840192909252600291820b6060840152900b608082015260a0016103a5565b3480156109fe57600080fd5b506103c3610a0d366004614f40565b612c69565b610a25610a20366004615688565b612d85565b604080516bffffffffffffffffffffffff90941684526020840192909252908201526060016103a5565b610372610a5d36600461569a565b612f36565b610372610a70366004614f9a565b61305c565b610372610a833660046156bf565b6130f0565b348015610a9457600080fd5b50610399610aa33660046156e4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b348015610add57600080fd5b50610af1610aec366004614f40565b613289565b604080516001600160a01b039889168152968816602080890191909152979095168686015260ff938416606080880191909152600293840b6080808901919091529290930b60a087015280516bffffffffffffffffffffffff1660c08701529586015169ffffffffffffffffffff90811660e087015293860151909316610100850152840151166101208301529091015163ffffffff16610140820152610160016103a5565b348015610ba357600080fd5b50610bd8610bb2366004615712565b600b60205260009081526040902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016103a5565b348015610c0457600080fd5b50610372610c13366004615161565b6134ae565b610372610c263660046151ec565b613507565b61045d610c393660046153ca565b613577565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610cd157507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610d1d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060008054610d3290615739565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5e90615739565b8015610dab5780601f10610d8057610100808354040283529160200191610dab565b820191906000526020600020905b815481529060010190602001808311610d8e57829003601f168201915b5050505050905090565b6000818152600960205260408120546001600160a01b0316610e445760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610e6b82611aae565b9050806001600160a01b0316836001600160a01b03161415610ef55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610e3b565b336001600160a01b0382161480610f115750610f118133610aa3565b610f835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e3b565b610f8d8383613729565b505050565b4715610fa257610fa233476137a4565b565b600854600090610fd3906001600160801b03700100000000000000000000000000000000820481169116615784565b6001600160801b0316905090565b610feb33826137e9565b61105d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610e3b565b610f8d8383836138f1565b7f000000000000000000000000000000000000000000000000000000000000000060006001600160a01b03821663aa5976c16110d78989604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040518263ffffffff1660e01b81526004016110f591815260200190565b6040805180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113591906157ac565b50905060ff81166112145761114c87878686613ae7565b816001600160a01b031663775dfc828888888861116833613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015262ffffff90911660448401526001600160801b03166064830152608482015260a4016020604051808303816000875af11580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121291906157db565b505b61121e8787613c3c565b5050505050505050565b60008161123481613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ec31fbc8c8c8c61126f8d613da8565b611278906157f4565b89611283578b611285565b305b8a61129157600061129a565b61129a8d613be0565b8c6112a65760006112af565b6112af33613be0565b60408051336020820152016040516020818303038152906040526040518963ffffffff1660e01b81526004016112ec98979695949392919061582d565b60408051808303816000875af115801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190615889565b509150868211156113815760405162461bcd60e51b815260206004820152601260248201527f544f4f5f4d5543485f52455155455354454400000000000000000000000000006044820152606401610e3b565b509998505050505050505050565b60008161139b81613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ec31fbc8c8c8c6113d68d613da8565b896113e1578b6113e3565b305b8a6113ef5760006113f8565b6113f88d613be0565b8c61140457600061140d565b61140d33613be0565b60408051336020820152016040516020818303038152906040526040518963ffffffff1660e01b815260040161144a98979695949392919061582d565b60408051808303816000875af1158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190615889565b925050868210156113815760405162461bcd60e51b815260206004820152601360248201527f544f4f5f4c4954544c455f5245434549564544000000000000000000000000006044820152606401610e3b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461151457600080fd5b600061152282840184615248565b9050841561153557611535878287613dde565b831561154657611546868286613dde565b50505050505050565b610f8d83838360405180602001604052806000815250612be1565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b50505050505050505050565b6006546001600160a01b0316331461162f57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000808080843561166e81613f91565b85356000908152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b84528285208351808501855281546001600160a01b039081168252600190920154821681870190815285516101208101875282518416815290519092168287015260ff79010000000000000000000000000000000000000000000000000084041682860152600160d01b8304600290810b6060840152600160e81b90930490920b608082015291949093909260a0830191611745918d01908d016158c7565b6bffffffffffffffffffffffff1681528a3560208201528454604090910190611776906001600160a01b0316613be0565b815260200161178b60c08c0160a08d016158e4565b1515905290506117a160e08a0160c08b016158e4565b611852576040517fdec980ec0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dec980ec9061180a908490600401615901565b6080604051808303816000875af1158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d91906159b4565b6118fa565b6040517fadcef3680000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063adcef368906118b7908490600401615901565b6080604051808303816000875af11580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa91906159b4565b929a50909850965094506040890135881080159061191c575088606001358710155b6119685760405162461bcd60e51b815260206004820152600e60248201527f507269636520736c6970706167650000000000000000000000000000000000006044820152606401610e3b565b600061197a60a08b0160808c01615248565b6001600160a01b0316146119ec576000611994878a6159ea565b905060006119a2878a6159ea565b905081156119c5576119c56119bd60a08d0160808e01615248565b85518461305c565b80156119e9576119e96119de60a08d0160808e01615248565b85602001518361305c565b50505b505050509193509193565b604080513360208083019190915282518083039091018152818301928390527faaa9acd2000000000000000000000000000000000000000000000000000000009092527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163aaa9acd291611a8091889188918891889190604401615a02565b600060405180830381600087803b158015611a9a57600080fd5b505af115801561121e573d6000803e3d6000fd5b6000818152600960205260408120546001600160a01b031680610d1d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610e3b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b6e57600080fd5b8215611b8a57611b8a84611b8483850185615248565b85613dde565b50505050565b60006001600160a01b038216611c0e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610e3b565b506001600160a01b031660009081526002602052604090205490565b42841015611c7a5760405162461bcd60e51b815260206004820152600e60248201527f5065726d697420457870697265640000000000000000000000000000000000006044820152606401610e3b565b6000611d24604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600087815260076020526040812080547f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad928b928b9291611d6483615a3a565b909155506040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611df29291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611e1587611aae565b9050803b15611f6a57604080516020810186905280820185905260f887901b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260618201928390527f1626ba7e000000000000000000000000000000000000000000000000000000009092526001600160a01b03831691631626ba7e91611eb0918691606501615a55565b602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190615a6e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b14611f655760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610e3b565b612084565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611fbe573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120215760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610e3b565b816001600160a01b0316816001600160a01b0316146120825760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610e3b565b505b61121e8888613729565b60008080806120ad6120a861014087016101208801615248565b613fe7565b935060006040518060a00160405280876101200160208101906120d09190615248565b6001600160a01b03168152602090810190612106906120f1908a018a615248565b61210160408b0160208c01615248565b613c3c565b64ffffffffff1681526020016121226060890160408a01615a8b565b60ff16815260200161213a6080890160608a01615ab7565b60020b815260200161215260a0890160808a01615ab7565b60020b9052600086815260096020908152604091829020835181548584015186860151606088015160808901516001600160a01b039095167fffffffffffffff00000000000000000000000000000000000000000000000000909416939093177401000000000000000000000000000000000000000064ffffffffff90931692909202919091177fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff1679010000000000000000000000000000000000000000000000000060ff909216919091027fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff1617600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919092160217905581518083019092529192506122f891839190819061229c908b018b615248565b6001600160a01b031681526020018960200160208101906122bd9190615248565b6001600160a01b0316815250878960a001358a60c001358b60e001358c61010001358d6101400160208101906122f391906158e4565b614016565b969891975095945092505050565b7f000000000000000000000000000000000000000000000000000000000000000060006001600160a01b03821663dc6574656123758989604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526000602482015260440161010060405180830381865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190615b0f565b60200151905061240787878387613ae7565b6000826001600160a01b031663c349e76989898961242433613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526001600160a01b03948516600482015293909216602484015262ffffff16604483015260648201526084016020604051808303816000875af115801561249a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be9190615bd9565b90508360ff168160ff1614806124d6575060ff848116145b6124df57600080fd5b6124e98888613c3c565b505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaa9acd23061252d86613be0565b6040805133602082015287918791016040516020818303038152906040526040518663ffffffff1660e01b815260040161256b959493929190615a02565b600060405180830381600087803b15801561258557600080fd5b505af1158015611546573d6000803e3d6000fd5b606060018054610d3290615739565b6001600160a01b0382163314156126015760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610e3b565b3360008181526004602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008161269781613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6883ec56040518060c001604052808d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016127168c613da8565b61271f906157f4565b81526020018761272f5789612731565b305b6001600160a01b031681526020018761274b576000612754565b6127548a613be0565b81526020018861276557600061276e565b61276e33613be0565b8152604080513360208281019190915290920191016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016127b19190615bf6565b60408051808303816000875af11580156127cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f39190615889565b509150868211156128465760405162461bcd60e51b815260206004820152601260248201527f544f4f5f4d5543485f52455155455354454400000000000000000000000000006044820152606401610e3b565b5098975050505050505050565b60608167ffffffffffffffff81111561286e5761286e61556a565b6040519080825280602002602001820160405280156128a157816020015b606081526020019060019003908161288c5790505b50905060005b8281101561296a57600080308686858181106128c5576128c5615c69565b90506020028101906128d79190615c7f565b6040516128e5929190615ce4565b600060405180830381855af49150503d8060008114612920576040519150601f19603f3d011682016040523d82523d6000602084013e612925565b606091505b50915091508161294257805161293a57600080fd5b805181602001fd5b8084848151811061295557612955615c69565b602090810291909101015250506001016128a7565b5092915050565b6006546001600160a01b0316331461298857600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005b81811015610f8d5760008383838181106129d6576129d6615c69565b9050602002013590506129e881613f91565b6000818152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b84528285208054600182015485516001600160a01b03928316818901529082168187015285518082038701815260608201808852815191909801207fc625e3c300000000000000000000000000000000000000000000000000000000909752606481019690965230608487015260a4860188905260ff79010000000000000000000000000000000000000000000000000084041660c4870152600160d01b8304600290810b60e4880152600160e81b90930490920b6101048601529251919492937f00000000000000000000000000000000000000000000000000000000000000009091169163c625e3c3916101248082019260a0929091908290030181865afa158015612b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b549190615cf4565b80519091506bffffffffffffffffffffffff1615612bb45760405162461bcd60e51b815260206004820152600960248201527f4e4f545f454d50545900000000000000000000000000000000000000000000006044820152606401610e3b565b612bbd846142e3565b50505060009081526009602052604081205580612bd981615a3a565b9150506129ba565b612beb33836137e9565b612c5d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610e3b565b611b8a84848484614397565b6000818152600960205260409020546060906001600160a01b0316612cd05760405162461bcd60e51b815260206004820152600f60248201527f746f6b656e206e6f7420657869737400000000000000000000000000000000006044820152606401610e3b565b6005546001600160a01b0316612cf55760405180602001604052806000815250610d1d565b6005546040517fe9dc6375000000000000000000000000000000000000000000000000000000008152306004820152602481018490526001600160a01b039091169063e9dc637590604401600060405180830381865afa158015612d5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d1d9190810190615d91565b600080808335612d9481613f91565b600060096000876000013581526020019081526020016000206040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460020b60020b60020b815260200160008201601d9054906101000a900460020b60020b60020b815250509050612f2781600b6000846020015164ffffffffff1664ffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681525050886000013589602001358a604001358b606001358c608001358d60a00160208101906122f391906158e4565b91989097509095509350505050565b81612f4a576008546001600160801b031691505b612f5382613f91565b6000828152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b909352928190208054600182015492517f8e9059d60000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152928116602484015260ff790100000000000000000000000000000000000000000000000000850481166044850152600160d01b8504600290810b6064860152600160e81b90950490940b608484015260a4830187905292851660c4830152917f00000000000000000000000000000000000000000000000000000000000000001690638e9059d69060e401611a80565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b2084e38461309533613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152602481019190915290851660448201526064810184905260840161256b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319491906157db565b9050828110156131e65760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e7420574554480000000000000000000000000000006044820152606401610e3b565b8015610f8d576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b50505050610f8d82826137a4565b6040805160a0810182526000808252602080830182905282840182905260608301829052608083018290528482526009905291822080546001600160a01b03811693928392790100000000000000000000000000000000000000000000000000830460ff1692600160d01b8104600290810b93600160e81b909204900b91876133545760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f455849535453000000000000000000000000000000000000000000006044820152606401610e3b565b805474010000000000000000000000000000000000000000900464ffffffffff166000908152600b60205260409020805460018201546001600160a01b039182169950811697507f00000000000000000000000000000000000000000000000000000000000000001663c625e3c36133ff8a8a604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152306024820152604481018d905260ff89166064820152600288810b608483015287900b60a482015260c40160a060405180830381865afa15801561347b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349f9190615cf4565b92505050919395979092949650565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146134e357600080fd5b83156134ff576134ff866134f983850185615248565b86613dde565b505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e4016115de565b60008161358381613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6883ec56040518060c001604052808d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016136028c613da8565b8152602001876136125789613614565b305b6001600160a01b031681526020018761362e576000613637565b6136378a613be0565b815260200188613648576000613651565b61365133613be0565b8152604080513360208281019190915290920191016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016136949190615bf6565b60408051808303816000875af11580156136b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d69190615889565b925050868210156128465760405162461bcd60e51b815260206004820152601360248201527f544f4f5f4c4954544c455f5245434549564544000000000000000000000000006044820152606401610e3b565b6000818152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061376b82611aae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600080600085875af1905080610f8d576040517fe293b56b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600960205260408120546001600160a01b03166138735760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610e3b565b600061387e83611aae565b9050806001600160a01b0316846001600160a01b031614806138b95750836001600160a01b03166138ae84610db5565b6001600160a01b0316145b806138e957506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661390482611aae565b6001600160a01b0316146139805760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610e3b565b6001600160a01b0382166139fb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e3b565b613a06838383614420565b613a11600082613729565b6001600160a01b0383166000908152600260205260408120805460019290613a3a908490615dff565b90915550506001600160a01b0382166000908152600260205260408120805460019290613a689084906159ea565b90915550506000818152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841617905580826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613b0d6a64000000000000000000006001600160801b038516808204910615150190565b90506000613b3660646001600160801b0386160268010000000000000000808204910615150190565b90508215613bca57600030613b4a33613be0565b604080516001600160a01b0390931660208401528201526060016040516020818303038152906040528051906020012090506000613b8888836144d2565b90506000613b9688846144d2565b905081851115613bad57613bad338a8488036124f4565b80841115613bc257613bc233898387036124f4565b5050506134ff565b613bd53387846124f4565b6134ff3386836124f4565b6001600160a01b03811680613c375760405162461bcd60e51b815260206004820152600f60248201527f5a45524f5f4143435f5245465f494400000000000000000000000000000000006044820152606401610e3b565b919050565b604080516001600160a01b0384811660208084019190915290841682840152825180830384018152606090920183528151918101919091206000818152600c9092529190205464ffffffffff16908161296a57600a805464ffffffffff16906000613ca683615e16565b82546101009290920a64ffffffffff8181021990931691831602179091556000928352600c6020908152604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169385169384179055805180820182526001600160a01b039889168152968816878301908152928552600b9091529092209351845473ffffffffffffffffffffffffffffffffffffffff199081169187169190911785559151600194909401805490921693909416929092179091555090565b80421115613da5576040517f70f65caa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115613dda57613dda615e3b565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015613e1f5750804710155b15613f65577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e7f57600080fd5b505af1158015613e93573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8a9190615e51565b610f8d83837f000000000000000000000000000000000000000000000000000000000000000084614588565b613f9b33826137e9565b613da55760405162461bcd60e51b815260206004820152600c60248201527f4e4f545f415050524f56454400000000000000000000000000000000000000006044820152606401610e3b565b600854600090614001906001600160801b03166001615e6e565b6001600160801b03169050613c378282614628565b60008060006141277f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc6574656140928d600001518e60200151604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b8e604001516040518363ffffffff1660e01b81526004016140c092919091825260ff16602082015260400190565b61010060405180830381865afa1580156140de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141029190615b0f565b602001516141138d6060015161478d565b6141208e6080015161478d565b8b8b614ac7565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632fb07eac6040518061014001604052808d600001516001600160a01b031681526020018d602001516001600160a01b031681526020018e6040015160ff1681526020018e6060015160020b81526020018e6080015160020b8152602001866bffffffffffffffffffffffff168152602001306001600160a01b031681526020018c8152602001876141e65760006141ef565b6141ef33613be0565b8152604080513360208281019190915290920191016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016142329190615e99565b60408051808303816000875af1158015614250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142749190615889565b90925090508582108015906142895750848110155b6142d55760405162461bcd60e51b815260206004820152600e60248201527f507269636520736c6970706167650000000000000000000000000000000000006044820152606401610e3b565b985098509895505050505050565b60006142ee82611aae565b90506142fc81600084614420565b614307600083613729565b6001600160a01b0381166000908152600260205260408120805460019290614330908490615dff565b9091555050600082815260096020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6143a28484846138f1565b6143ae84848484614be3565b611b8a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610e3b565b6001600160a01b03831661446d57600880546001600160801b031690600061444783615f6c565b91906101000a8154816001600160801b0302191690836001600160801b03160217905550505b6001600160a01b038216610f8d576008805470010000000000000000000000000000000090046001600160801b03169060106144a883615f6c565b91906101000a8154816001600160801b0302191690836001600160801b0316021790555050505050565b6040517f7266a0e40000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390526000917f000000000000000000000000000000000000000000000000000000000000000090911690637266a0e490604401602060405180830381865afa15801561455d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458191906157db565b9392505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af19150506145eb81614d79565b614621576040517fa83c475400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6001600160a01b03821661467e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e3b565b6000818152600960205260409020546001600160a01b0316156146e35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e3b565b6146ef60008383614420565b6001600160a01b03821660009081526002602052604081208054600192906147189084906159ea565b90915550506000818152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841617905560405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755138015906147ca5750620bd8ab600283900b13155b6147d357600080fd5b6000808360020b126147e557826147ea565b826000035b62ffffff811691507001000000000000000000000000000000009060011615614823576ffffcb933bd6fad37aa2d162d1a5940010260801c5b6002821615614842576ffff97272373d413259a46990580e213a0260801c5b6004821615614861576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614880576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561489f576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156148be576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156148dd576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156148fc576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561491c576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561493c576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561495c576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561497c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561499c576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156149bc576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156149dc576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156149fc576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614a1d576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614a3d576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614a5c576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614a79576b048a170391f7dc42444e8fa20260801c5b60008460020b12614a99578060001981614a9557614a95615f89565b0490505b6000670100000000000000820611614ab2576000614ab5565b60015b60ff16603882901c0192505050919050565b600080856001600160801b0316876001600160801b031611614b2057614b1984866001600160801b0316886001600160801b03160269010000000000000000008989036001600160801b031602614dbe565b9050614bcb565b846001600160801b0316876001600160801b031610614b5957614b198369010000000000000000008888036001600160801b0316614dbe565b6000614b9185876001600160801b03168a6001600160801b03160269010000000000000000008b8a036001600160801b031602614dbe565b90506000614bb58569010000000000000000008a8c036001600160801b0316614dbe565b9050808210614bc45780614bc6565b815b925050505b614bd8600882901c614e6c565b979650505050505050565b60006001600160a01b0384163b15614d6e576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290614c40903390899088908890600401615f9f565b6020604051808303816000875af1925050508015614c7b575060408051601f3d908101601f19168201909252614c7891810190615a6e565b60015b614d23573d808015614ca9576040519150601f19603f3d011682016040523d82523d6000602084013e614cae565b606091505b50805161293a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610e3b565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506138e9565b506001949350505050565b600081614d8a573d6000803e3d6000fd5b3d60208114614da2578015614db35760009150614db8565b3d6000803e60005115159150614db8565b600191505b50919050565b600080806000198587098587029250828110838203039150508060001415614df85760008411614ded57600080fd5b508290049050614581565b808411614e0457600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60006bffffffffffffffffffffffff821115613dda57613dda615e3b565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613da557600080fd5b600060208284031215614eca57600080fd5b813561458181614e8a565b60005b83811015614ef0578181015183820152602001614ed8565b83811115611b8a5750506000910152565b60008151808452614f19816020860160208601614ed5565b601f01601f19169290920160200192915050565b6020815260006145816020830184614f01565b600060208284031215614f5257600080fd5b5035919050565b6001600160a01b0381168114613da557600080fd5b60008060408385031215614f8157600080fd5b8235614f8c81614f59565b946020939093013593505050565b600080600060608486031215614faf57600080fd5b8335614fba81614f59565b92506020840135614fca81614f59565b929592945050506040919091013590565b62ffffff81168114613da557600080fd5b6001600160801b0381168114613da557600080fd5b8015158114613da557600080fd5b600080600080600060a0868803121561502757600080fd5b853561503281614f59565b9450602086013561504281614f59565b9350604086013561505281614fdb565b9250606086013561506281614fec565b9150608086013561507281615001565b809150509295509295909350565b60008060008060008060008060006101208a8c03121561509f57600080fd5b89356150aa81614f59565b985060208a01356150ba81614f59565b975060408a0135965060608a0135955060808a0135945060a08a01356150df81614f59565b935060c08a01356150ef81615001565b925060e08a01356150ff81615001565b809250506101008a013590509295985092959850929598565b60008083601f84011261512a57600080fd5b50813567ffffffffffffffff81111561514257600080fd5b60208301915083602082850101111561515a57600080fd5b9250929050565b60008060008060008060a0878903121561517a57600080fd5b863561518581614f59565b9550602087013561519581614f59565b94506040870135935060608701359250608087013567ffffffffffffffff8111156151bf57600080fd5b6151cb89828a01615118565b979a9699509497509295939492505050565b60ff81168114613da557600080fd5b60008060008060008060c0878903121561520557600080fd5b863561521081614f59565b95506020870135945060408701359350606087013561522e816151dd565b9598949750929560808101359460a0909101359350915050565b60006020828403121561525a57600080fd5b813561458181614f59565b600060e08284031215614db857600080fd5b6000806000806080858703121561528d57600080fd5b843561529881614f59565b93506020850135925060408501356152af81614f59565b9396929550929360600135925050565b600080600080606085870312156152d557600080fd5b84356152e081614f59565b935060208501359250604085013567ffffffffffffffff81111561530357600080fd5b61530f87828801615118565b95989497509550505050565b60006101608284031215614db857600080fd5b600080600080600060a0868803121561534657600080fd5b853561535181614f59565b9450602086013561536181614f59565b9350604086013561537181614fdb565b9250606086013561538181615001565b91506080860135615072816151dd565b600080604083850312156153a457600080fd5b82356153af81614f59565b915060208301356153bf81615001565b809150509250929050565b60008060008060008060008060e0898b0312156153e657600080fd5b883567ffffffffffffffff8111156153fd57600080fd5b6154098b828c01615118565b9099509750506020890135955060408901359450606089013561542b81614f59565b9350608089013561543b81615001565b925060a089013561544b81615001565b8092505060c089013590509295985092959890939650565b60008083601f84011261547557600080fd5b50813567ffffffffffffffff81111561548d57600080fd5b6020830191508360208260051b850101111561515a57600080fd5b600080602083850312156154bb57600080fd5b823567ffffffffffffffff8111156154d257600080fd5b6154de85828601615463565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561555d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261554b858351614f01565b94509285019290850190600101615511565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156155a9576155a961556a565b604052919050565b600067ffffffffffffffff8211156155cb576155cb61556a565b50601f01601f191660200190565b600080600080608085870312156155ef57600080fd5b84356155fa81614f59565b9350602085013561560a81614f59565b925060408501359150606085013567ffffffffffffffff81111561562d57600080fd5b8501601f8101871361563e57600080fd5b803561565161564c826155b1565b615580565b81815288602083850101111561566657600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600060c08284031215614db857600080fd5b600080604083850312156156ad57600080fd5b8235915060208301356153bf816151dd565b600080604083850312156156d257600080fd5b8235915060208301356153bf81614f59565b600080604083850312156156f757600080fd5b823561570281614f59565b915060208301356153bf81614f59565b60006020828403121561572457600080fd5b813564ffffffffff8116811461458157600080fd5b600181811c9082168061574d57607f821691505b60208210811415614db857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160801b03838116908316818110156157a4576157a461576e565b039392505050565b600080604083850312156157bf57600080fd5b82516157ca816151dd565b60208401519092506153bf816151dd565b6000602082840312156157ed57600080fd5b5051919050565b60007f80000000000000000000000000000000000000000000000000000000000000008214156158265761582661576e565b5060000390565b60006101006001600160a01b03808c168452808b1660208501528960408501528860608501528088166080850152508560a08401528460c08401528060e084015261587a81840185614f01565b9b9a5050505050505050505050565b6000806040838503121561589c57600080fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff81168114613da557600080fd5b6000602082840312156158d957600080fd5b8135614581816158ad565b6000602082840312156158f657600080fd5b813561458181615001565b6000610120820190506001600160a01b03808451168352806020850151166020840152506040830151615939604084018260ff169052565b50606083015161594e606084018260020b9052565b506080830151615963608084018260020b9052565b5060a083015161598360a08401826bffffffffffffffffffffffff169052565b5060c083015160c083015260e083015160e0830152610100808401516159ac8285018215159052565b505092915050565b600080600080608085870312156159ca57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600082198211156159fd576159fd61576e565b500190565b60006001600160a01b03808816835286602084015280861660408401525083606083015260a06080830152614bd860a0830184614f01565b6000600019821415615a4e57615a4e61576e565b5060010190565b8281526040602082015260006138e96040830184614f01565b600060208284031215615a8057600080fd5b815161458181614e8a565b600060208284031215615a9d57600080fd5b8135614581816151dd565b8060020b8114613da557600080fd5b600060208284031215615ac957600080fd5b813561458181615aa8565b8051613c3781614fec565b8051613c3781614fdb565b8051613c3781615aa8565b805169ffffffffffffffffffff81168114613c3757600080fd5b6000610100808385031215615b2357600080fd5b6040519081019067ffffffffffffffff82118183101715615b4657615b4661556a565b8160405283519150615b5782614fec565b818152615b6660208501615ad4565b6020820152615b7760408501615adf565b6040820152615b8860608501615aea565b6060820152615b9960808501615aea565b6080820152615baa60a08501615aea565b60a0820152615bbb60c08501615af5565b60c0820152615bcc60e08501615af5565b60e0820152949350505050565b600060208284031215615beb57600080fd5b8151614581816151dd565b602081526000825160c06020840152615c1260e0840182614f01565b9050602084015160408401526001600160a01b03604085015116606084015260608401516080840152608084015160a084015260a0840151601f198483030160c0850152615c608282614f01565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615cb457600080fd5b83018035915067ffffffffffffffff821115615ccf57600080fd5b60200191503681900382131561515a57600080fd5b8183823760009101908152919050565b600060a08284031215615d0657600080fd5b60405160a0810181811067ffffffffffffffff82111715615d2957615d2961556a565b6040528251615d37816158ad565b8152615d4560208401615af5565b6020820152615d5660408401615af5565b60408201526060830151615d69816151dd565b6060820152608083015163ffffffff81168114615d8557600080fd5b60808201529392505050565b600060208284031215615da357600080fd5b815167ffffffffffffffff811115615dba57600080fd5b8201601f81018413615dcb57600080fd5b8051615dd961564c826155b1565b818152856020838501011115615dee57600080fd5b615c60826020830160208601614ed5565b600082821015615e1157615e1161576e565b500390565b600064ffffffffff80831681811415615e3157615e3161576e565b6001019392505050565b634e487b7160e01b600052600160045260246000fd5b600060208284031215615e6357600080fd5b815161458181615001565b60006001600160801b03808316818516808303821115615e9057615e9061576e565b01949350505050565b60208152615eb36020820183516001600160a01b03169052565b60006020830151615ecf60408401826001600160a01b03169052565b50604083015160ff81166060840152506060830151615ef3608084018260020b9052565b506080830151615f0860a084018260020b9052565b5060a08301516bffffffffffffffffffffffff811660c08401525060c08301516001600160a01b03811660e08401525060e08301516101008381019190915283015161012080840191909152830151610140808401526138e9610160840182614f01565b60006001600160801b0380831681811415615e3157615e3161576e565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152615fd16080830184614f01565b969550505050505056fea164736f6c634300080a000a",
  "deployedBytecode": "0x6080604052600436106103385760003560e01c806370a08231116101b0578063b88d4fde116100ec578063e16d9ce511610095578063f0db800c1161006f578063f0db800c14610b97578063f1371dd514610bf8578063f3995c6714610c18578063f5a9817514610c2b57600080fd5b8063e16d9ce514610a75578063e985e9c514610a88578063eb02c30114610ad157600080fd5b8063ce3fa4dd116100c6578063ce3fa4dd14610a12578063d9899ff014610a4f578063d9caed1214610a6257600080fd5b8063b88d4fde146108ff578063c2814b0c1461091f578063c87b56dd146109f257600080fd5b806395d89b4111610159578063ac9650d811610133578063ac9650d81461088c578063ae4bf64b146108ac578063b6dc7ea3146108cc578063b80f55c9146108ec57600080fd5b806395d89b4114610844578063a22cb46514610859578063a73970cf1461087957600080fd5b80638137cdbf1161018a5780638137cdbf146108005780638340f549146108135780638c0e83491461082657600080fd5b806370a082311461078d5780637ac2ff7b146107ad5780637c2d10fd146107c057600080fd5b806330adf81f1161027f5780634aa4a4fc116102285780635a9d7a68116102025780635a9d7a681461071a5780635dd582041461073a5780636352211e1461074d578063641229d91461076d57600080fd5b80634aa4a4fc146106935780634f594557146106c75780635325261c146106e757600080fd5b80633d705707116102595780633d7057071461064057806342842e0e146106605780634659a4941461068057600080fd5b806330adf81f146105235780633644e51514610557578063365a86fc1461060c57600080fd5b806318160ddd116102e15780632809a659116102bb5780632809a659146104b35780632e85d3ae146104c65780632f8bc1ec146104d957600080fd5b806318160ddd1461046b57806323b872dd146104805780632513f7f2146104a057600080fd5b8063095ea7b311610312578063095ea7b31461040857806312210e8a14610428578063141a468c1461043057600080fd5b806301ffc9a71461037957806306fdde03146103ae578063081812fc146103d057600080fd5b3661037457336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037257600080fd5b005b600080fd5b34801561038557600080fd5b50610399610394366004614eb8565b610c3e565b60405190151581526020015b60405180910390f35b3480156103ba57600080fd5b506103c3610d23565b6040516103a59190614f2d565b3480156103dc57600080fd5b506103f06103eb366004614f40565b610db5565b6040516001600160a01b0390911681526020016103a5565b34801561041457600080fd5b50610372610423366004614f6e565b610e60565b610372610f92565b34801561043c57600080fd5b5061045d61044b366004614f40565b60076020526000908152604090205481565b6040519081526020016103a5565b34801561047757600080fd5b5061045d610fa4565b34801561048c57600080fd5b5061037261049b366004614f9a565b610fe1565b6103726104ae36600461500f565b611068565b61045d6104c1366004615080565b611228565b61045d6104d4366004615080565b61138f565b3480156104e557600080fd5b5061050d6104f4366004614f40565b600c6020526000908152604090205464ffffffffff1681565b60405164ffffffffff90911681526020016103a5565b34801561052f57600080fd5b5061045d7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b34801561056357600080fd5b5061045d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b34801561061857600080fd5b506103f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5061037261065b366004615161565b6114df565b34801561066c57600080fd5b5061037261067b366004614f9a565b61154f565b61037261068e3660046151ec565b61156a565b34801561069f57600080fd5b506103f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d357600080fd5b506103726106e2366004615248565b611618565b6106fa6106f5366004615265565b61165e565b6040805194855260208501939093529183015260608201526080016103a5565b34801561072657600080fd5b506005546103f0906001600160a01b031681565b610372610748366004615277565b6119f7565b34801561075957600080fd5b506103f0610768366004614f40565b611aae565b34801561077957600080fd5b506103726107883660046152bf565b611b39565b34801561079957600080fd5b5061045d6107a8366004615248565b611b90565b6103726107bb3660046151ec565b611c2a565b6107d36107ce36600461531b565b61208e565b604080519485526bffffffffffffffffffffffff90931660208501529183015260608201526080016103a5565b61037261080e36600461532e565b612306565b610372610821366004614f9a565b6124f4565b34801561083257600080fd5b506008546001600160801b031661045d565b34801561085057600080fd5b506103c3612599565b34801561086557600080fd5b50610372610874366004615391565b6125a8565b61045d6108873660046153ca565b61268b565b61089f61089a3660046154a8565b612853565b6040516103a591906154ea565b3480156108b857600080fd5b506006546103f0906001600160a01b031681565b3480156108d857600080fd5b506103726108e7366004615248565b612971565b6103726108fa3660046154a8565b6129b7565b34801561090b57600080fd5b5061037261091a3660046155d9565b612be1565b34801561092b57600080fd5b506109ae61093a366004614f40565b6009602052600090815260409020546001600160a01b0381169064ffffffffff740100000000000000000000000000000000000000008204169060ff79010000000000000000000000000000000000000000000000000082041690600160d01b8104600290810b91600160e81b9004900b85565b604080516001600160a01b03909616865264ffffffffff909416602086015260ff90921692840192909252600291820b6060840152900b608082015260a0016103a5565b3480156109fe57600080fd5b506103c3610a0d366004614f40565b612c69565b610a25610a20366004615688565b612d85565b604080516bffffffffffffffffffffffff90941684526020840192909252908201526060016103a5565b610372610a5d36600461569a565b612f36565b610372610a70366004614f9a565b61305c565b610372610a833660046156bf565b6130f0565b348015610a9457600080fd5b50610399610aa33660046156e4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b348015610add57600080fd5b50610af1610aec366004614f40565b613289565b604080516001600160a01b039889168152968816602080890191909152979095168686015260ff938416606080880191909152600293840b6080808901919091529290930b60a087015280516bffffffffffffffffffffffff1660c08701529586015169ffffffffffffffffffff90811660e087015293860151909316610100850152840151166101208301529091015163ffffffff16610140820152610160016103a5565b348015610ba357600080fd5b50610bd8610bb2366004615712565b600b60205260009081526040902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016103a5565b348015610c0457600080fd5b50610372610c13366004615161565b6134ae565b610372610c263660046151ec565b613507565b61045d610c393660046153ca565b613577565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610cd157507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610d1d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060008054610d3290615739565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5e90615739565b8015610dab5780601f10610d8057610100808354040283529160200191610dab565b820191906000526020600020905b815481529060010190602001808311610d8e57829003601f168201915b5050505050905090565b6000818152600960205260408120546001600160a01b0316610e445760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610e6b82611aae565b9050806001600160a01b0316836001600160a01b03161415610ef55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610e3b565b336001600160a01b0382161480610f115750610f118133610aa3565b610f835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e3b565b610f8d8383613729565b505050565b4715610fa257610fa233476137a4565b565b600854600090610fd3906001600160801b03700100000000000000000000000000000000820481169116615784565b6001600160801b0316905090565b610feb33826137e9565b61105d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610e3b565b610f8d8383836138f1565b7f000000000000000000000000000000000000000000000000000000000000000060006001600160a01b03821663aa5976c16110d78989604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040518263ffffffff1660e01b81526004016110f591815260200190565b6040805180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113591906157ac565b50905060ff81166112145761114c87878686613ae7565b816001600160a01b031663775dfc828888888861116833613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015262ffffff90911660448401526001600160801b03166064830152608482015260a4016020604051808303816000875af11580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121291906157db565b505b61121e8787613c3c565b5050505050505050565b60008161123481613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ec31fbc8c8c8c61126f8d613da8565b611278906157f4565b89611283578b611285565b305b8a61129157600061129a565b61129a8d613be0565b8c6112a65760006112af565b6112af33613be0565b60408051336020820152016040516020818303038152906040526040518963ffffffff1660e01b81526004016112ec98979695949392919061582d565b60408051808303816000875af115801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190615889565b509150868211156113815760405162461bcd60e51b815260206004820152601260248201527f544f4f5f4d5543485f52455155455354454400000000000000000000000000006044820152606401610e3b565b509998505050505050505050565b60008161139b81613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ec31fbc8c8c8c6113d68d613da8565b896113e1578b6113e3565b305b8a6113ef5760006113f8565b6113f88d613be0565b8c61140457600061140d565b61140d33613be0565b60408051336020820152016040516020818303038152906040526040518963ffffffff1660e01b815260040161144a98979695949392919061582d565b60408051808303816000875af1158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190615889565b925050868210156113815760405162461bcd60e51b815260206004820152601360248201527f544f4f5f4c4954544c455f5245434549564544000000000000000000000000006044820152606401610e3b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461151457600080fd5b600061152282840184615248565b9050841561153557611535878287613dde565b831561154657611546868286613dde565b50505050505050565b610f8d83838360405180602001604052806000815250612be1565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b50505050505050505050565b6006546001600160a01b0316331461162f57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000808080843561166e81613f91565b85356000908152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b84528285208351808501855281546001600160a01b039081168252600190920154821681870190815285516101208101875282518416815290519092168287015260ff79010000000000000000000000000000000000000000000000000084041682860152600160d01b8304600290810b6060840152600160e81b90930490920b608082015291949093909260a0830191611745918d01908d016158c7565b6bffffffffffffffffffffffff1681528a3560208201528454604090910190611776906001600160a01b0316613be0565b815260200161178b60c08c0160a08d016158e4565b1515905290506117a160e08a0160c08b016158e4565b611852576040517fdec980ec0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dec980ec9061180a908490600401615901565b6080604051808303816000875af1158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d91906159b4565b6118fa565b6040517fadcef3680000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063adcef368906118b7908490600401615901565b6080604051808303816000875af11580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa91906159b4565b929a50909850965094506040890135881080159061191c575088606001358710155b6119685760405162461bcd60e51b815260206004820152600e60248201527f507269636520736c6970706167650000000000000000000000000000000000006044820152606401610e3b565b600061197a60a08b0160808c01615248565b6001600160a01b0316146119ec576000611994878a6159ea565b905060006119a2878a6159ea565b905081156119c5576119c56119bd60a08d0160808e01615248565b85518461305c565b80156119e9576119e96119de60a08d0160808e01615248565b85602001518361305c565b50505b505050509193509193565b604080513360208083019190915282518083039091018152818301928390527faaa9acd2000000000000000000000000000000000000000000000000000000009092527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163aaa9acd291611a8091889188918891889190604401615a02565b600060405180830381600087803b158015611a9a57600080fd5b505af115801561121e573d6000803e3d6000fd5b6000818152600960205260408120546001600160a01b031680610d1d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610e3b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b6e57600080fd5b8215611b8a57611b8a84611b8483850185615248565b85613dde565b50505050565b60006001600160a01b038216611c0e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610e3b565b506001600160a01b031660009081526002602052604090205490565b42841015611c7a5760405162461bcd60e51b815260206004820152600e60248201527f5065726d697420457870697265640000000000000000000000000000000000006044820152606401610e3b565b6000611d24604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600087815260076020526040812080547f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad928b928b9291611d6483615a3a565b909155506040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611df29291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611e1587611aae565b9050803b15611f6a57604080516020810186905280820185905260f887901b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260618201928390527f1626ba7e000000000000000000000000000000000000000000000000000000009092526001600160a01b03831691631626ba7e91611eb0918691606501615a55565b602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190615a6e565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b14611f655760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610e3b565b612084565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611fbe573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120215760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610e3b565b816001600160a01b0316816001600160a01b0316146120825760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610e3b565b505b61121e8888613729565b60008080806120ad6120a861014087016101208801615248565b613fe7565b935060006040518060a00160405280876101200160208101906120d09190615248565b6001600160a01b03168152602090810190612106906120f1908a018a615248565b61210160408b0160208c01615248565b613c3c565b64ffffffffff1681526020016121226060890160408a01615a8b565b60ff16815260200161213a6080890160608a01615ab7565b60020b815260200161215260a0890160808a01615ab7565b60020b9052600086815260096020908152604091829020835181548584015186860151606088015160808901516001600160a01b039095167fffffffffffffff00000000000000000000000000000000000000000000000000909416939093177401000000000000000000000000000000000000000064ffffffffff90931692909202919091177fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff1679010000000000000000000000000000000000000000000000000060ff909216919091027fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff1617600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919092160217905581518083019092529192506122f891839190819061229c908b018b615248565b6001600160a01b031681526020018960200160208101906122bd9190615248565b6001600160a01b0316815250878960a001358a60c001358b60e001358c61010001358d6101400160208101906122f391906158e4565b614016565b969891975095945092505050565b7f000000000000000000000000000000000000000000000000000000000000000060006001600160a01b03821663dc6574656123758989604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526000602482015260440161010060405180830381865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190615b0f565b60200151905061240787878387613ae7565b6000826001600160a01b031663c349e76989898961242433613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526001600160a01b03948516600482015293909216602484015262ffffff16604483015260648201526084016020604051808303816000875af115801561249a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be9190615bd9565b90508360ff168160ff1614806124d6575060ff848116145b6124df57600080fd5b6124e98888613c3c565b505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaa9acd23061252d86613be0565b6040805133602082015287918791016040516020818303038152906040526040518663ffffffff1660e01b815260040161256b959493929190615a02565b600060405180830381600087803b15801561258557600080fd5b505af1158015611546573d6000803e3d6000fd5b606060018054610d3290615739565b6001600160a01b0382163314156126015760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610e3b565b3360008181526004602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008161269781613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6883ec56040518060c001604052808d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016127168c613da8565b61271f906157f4565b81526020018761272f5789612731565b305b6001600160a01b031681526020018761274b576000612754565b6127548a613be0565b81526020018861276557600061276e565b61276e33613be0565b8152604080513360208281019190915290920191016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016127b19190615bf6565b60408051808303816000875af11580156127cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f39190615889565b509150868211156128465760405162461bcd60e51b815260206004820152601260248201527f544f4f5f4d5543485f52455155455354454400000000000000000000000000006044820152606401610e3b565b5098975050505050505050565b60608167ffffffffffffffff81111561286e5761286e61556a565b6040519080825280602002602001820160405280156128a157816020015b606081526020019060019003908161288c5790505b50905060005b8281101561296a57600080308686858181106128c5576128c5615c69565b90506020028101906128d79190615c7f565b6040516128e5929190615ce4565b600060405180830381855af49150503d8060008114612920576040519150601f19603f3d011682016040523d82523d6000602084013e612925565b606091505b50915091508161294257805161293a57600080fd5b805181602001fd5b8084848151811061295557612955615c69565b602090810291909101015250506001016128a7565b5092915050565b6006546001600160a01b0316331461298857600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005b81811015610f8d5760008383838181106129d6576129d6615c69565b9050602002013590506129e881613f91565b6000818152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b84528285208054600182015485516001600160a01b03928316818901529082168187015285518082038701815260608201808852815191909801207fc625e3c300000000000000000000000000000000000000000000000000000000909752606481019690965230608487015260a4860188905260ff79010000000000000000000000000000000000000000000000000084041660c4870152600160d01b8304600290810b60e4880152600160e81b90930490920b6101048601529251919492937f00000000000000000000000000000000000000000000000000000000000000009091169163c625e3c3916101248082019260a0929091908290030181865afa158015612b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b549190615cf4565b80519091506bffffffffffffffffffffffff1615612bb45760405162461bcd60e51b815260206004820152600960248201527f4e4f545f454d50545900000000000000000000000000000000000000000000006044820152606401610e3b565b612bbd846142e3565b50505060009081526009602052604081205580612bd981615a3a565b9150506129ba565b612beb33836137e9565b612c5d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610e3b565b611b8a84848484614397565b6000818152600960205260409020546060906001600160a01b0316612cd05760405162461bcd60e51b815260206004820152600f60248201527f746f6b656e206e6f7420657869737400000000000000000000000000000000006044820152606401610e3b565b6005546001600160a01b0316612cf55760405180602001604052806000815250610d1d565b6005546040517fe9dc6375000000000000000000000000000000000000000000000000000000008152306004820152602481018490526001600160a01b039091169063e9dc637590604401600060405180830381865afa158015612d5d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d1d9190810190615d91565b600080808335612d9481613f91565b600060096000876000013581526020019081526020016000206040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016000820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460020b60020b60020b815260200160008201601d9054906101000a900460020b60020b60020b815250509050612f2781600b6000846020015164ffffffffff1664ffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681525050886000013589602001358a604001358b606001358c608001358d60a00160208101906122f391906158e4565b91989097509095509350505050565b81612f4a576008546001600160801b031691505b612f5382613f91565b6000828152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b909352928190208054600182015492517f8e9059d60000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152928116602484015260ff790100000000000000000000000000000000000000000000000000850481166044850152600160d01b8504600290810b6064860152600160e81b90950490940b608484015260a4830187905292851660c4830152917f00000000000000000000000000000000000000000000000000000000000000001690638e9059d69060e401611a80565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b2084e38461309533613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152602481019190915290851660448201526064810184905260840161256b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613170573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319491906157db565b9050828110156131e65760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e7420574554480000000000000000000000000000006044820152606401610e3b565b8015610f8d576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561326757600080fd5b505af115801561327b573d6000803e3d6000fd5b50505050610f8d82826137a4565b6040805160a0810182526000808252602080830182905282840182905260608301829052608083018290528482526009905291822080546001600160a01b03811693928392790100000000000000000000000000000000000000000000000000830460ff1692600160d01b8104600290810b93600160e81b909204900b91876133545760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f455849535453000000000000000000000000000000000000000000006044820152606401610e3b565b805474010000000000000000000000000000000000000000900464ffffffffff166000908152600b60205260409020805460018201546001600160a01b039182169950811697507f00000000000000000000000000000000000000000000000000000000000000001663c625e3c36133ff8a8a604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152306024820152604481018d905260ff89166064820152600288810b608483015287900b60a482015260c40160a060405180830381865afa15801561347b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349f9190615cf4565b92505050919395979092949650565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146134e357600080fd5b83156134ff576134ff866134f983850185615248565b86613dde565b505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e4016115de565b60008161358381613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c6883ec56040518060c001604052808d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020016136028c613da8565b8152602001876136125789613614565b305b6001600160a01b031681526020018761362e576000613637565b6136378a613be0565b815260200188613648576000613651565b61365133613be0565b8152604080513360208281019190915290920191016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016136949190615bf6565b60408051808303816000875af11580156136b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d69190615889565b925050868210156128465760405162461bcd60e51b815260206004820152601360248201527f544f4f5f4c4954544c455f5245434549564544000000000000000000000000006044820152606401610e3b565b6000818152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061376b82611aae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600080600085875af1905080610f8d576040517fe293b56b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600960205260408120546001600160a01b03166138735760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610e3b565b600061387e83611aae565b9050806001600160a01b0316846001600160a01b031614806138b95750836001600160a01b03166138ae84610db5565b6001600160a01b0316145b806138e957506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661390482611aae565b6001600160a01b0316146139805760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610e3b565b6001600160a01b0382166139fb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e3b565b613a06838383614420565b613a11600082613729565b6001600160a01b0383166000908152600260205260408120805460019290613a3a908490615dff565b90915550506001600160a01b0382166000908152600260205260408120805460019290613a689084906159ea565b90915550506000818152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841617905580826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000613b0d6a64000000000000000000006001600160801b038516808204910615150190565b90506000613b3660646001600160801b0386160268010000000000000000808204910615150190565b90508215613bca57600030613b4a33613be0565b604080516001600160a01b0390931660208401528201526060016040516020818303038152906040528051906020012090506000613b8888836144d2565b90506000613b9688846144d2565b905081851115613bad57613bad338a8488036124f4565b80841115613bc257613bc233898387036124f4565b5050506134ff565b613bd53387846124f4565b6134ff3386836124f4565b6001600160a01b03811680613c375760405162461bcd60e51b815260206004820152600f60248201527f5a45524f5f4143435f5245465f494400000000000000000000000000000000006044820152606401610e3b565b919050565b604080516001600160a01b0384811660208084019190915290841682840152825180830384018152606090920183528151918101919091206000818152600c9092529190205464ffffffffff16908161296a57600a805464ffffffffff16906000613ca683615e16565b82546101009290920a64ffffffffff8181021990931691831602179091556000928352600c6020908152604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169385169384179055805180820182526001600160a01b039889168152968816878301908152928552600b9091529092209351845473ffffffffffffffffffffffffffffffffffffffff199081169187169190911785559151600194909401805490921693909416929092179091555090565b80421115613da5576040517f70f65caa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115613dda57613dda615e3b565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015613e1f5750804710155b15613f65577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e7f57600080fd5b505af1158015613e93573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8a9190615e51565b610f8d83837f000000000000000000000000000000000000000000000000000000000000000084614588565b613f9b33826137e9565b613da55760405162461bcd60e51b815260206004820152600c60248201527f4e4f545f415050524f56454400000000000000000000000000000000000000006044820152606401610e3b565b600854600090614001906001600160801b03166001615e6e565b6001600160801b03169050613c378282614628565b60008060006141277f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc6574656140928d600001518e60200151604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b8e604001516040518363ffffffff1660e01b81526004016140c092919091825260ff16602082015260400190565b61010060405180830381865afa1580156140de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141029190615b0f565b602001516141138d6060015161478d565b6141208e6080015161478d565b8b8b614ac7565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632fb07eac6040518061014001604052808d600001516001600160a01b031681526020018d602001516001600160a01b031681526020018e6040015160ff1681526020018e6060015160020b81526020018e6080015160020b8152602001866bffffffffffffffffffffffff168152602001306001600160a01b031681526020018c8152602001876141e65760006141ef565b6141ef33613be0565b8152604080513360208281019190915290920191016040516020818303038152906040528152506040518263ffffffff1660e01b81526004016142329190615e99565b60408051808303816000875af1158015614250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142749190615889565b90925090508582108015906142895750848110155b6142d55760405162461bcd60e51b815260206004820152600e60248201527f507269636520736c6970706167650000000000000000000000000000000000006044820152606401610e3b565b985098509895505050505050565b60006142ee82611aae565b90506142fc81600084614420565b614307600083613729565b6001600160a01b0381166000908152600260205260408120805460019290614330908490615dff565b9091555050600082815260096020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6143a28484846138f1565b6143ae84848484614be3565b611b8a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610e3b565b6001600160a01b03831661446d57600880546001600160801b031690600061444783615f6c565b91906101000a8154816001600160801b0302191690836001600160801b03160217905550505b6001600160a01b038216610f8d576008805470010000000000000000000000000000000090046001600160801b03169060106144a883615f6c565b91906101000a8154816001600160801b0302191690836001600160801b0316021790555050505050565b6040517f7266a0e40000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390526000917f000000000000000000000000000000000000000000000000000000000000000090911690637266a0e490604401602060405180830381865afa15801561455d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458191906157db565b9392505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260008060648360008a5af19150506145eb81614d79565b614621576040517fa83c475400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6001600160a01b03821661467e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e3b565b6000818152600960205260409020546001600160a01b0316156146e35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610e3b565b6146ef60008383614420565b6001600160a01b03821660009081526002602052604081208054600192906147189084906159ea565b90915550506000818152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841617905560405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600282900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42755138015906147ca5750620bd8ab600283900b13155b6147d357600080fd5b6000808360020b126147e557826147ea565b826000035b62ffffff811691507001000000000000000000000000000000009060011615614823576ffffcb933bd6fad37aa2d162d1a5940010260801c5b6002821615614842576ffff97272373d413259a46990580e213a0260801c5b6004821615614861576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614880576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561489f576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156148be576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156148dd576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156148fc576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561491c576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561493c576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561495c576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561497c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561499c576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156149bc576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156149dc576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156149fc576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614a1d576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614a3d576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614a5c576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614a79576b048a170391f7dc42444e8fa20260801c5b60008460020b12614a99578060001981614a9557614a95615f89565b0490505b6000670100000000000000820611614ab2576000614ab5565b60015b60ff16603882901c0192505050919050565b600080856001600160801b0316876001600160801b031611614b2057614b1984866001600160801b0316886001600160801b03160269010000000000000000008989036001600160801b031602614dbe565b9050614bcb565b846001600160801b0316876001600160801b031610614b5957614b198369010000000000000000008888036001600160801b0316614dbe565b6000614b9185876001600160801b03168a6001600160801b03160269010000000000000000008b8a036001600160801b031602614dbe565b90506000614bb58569010000000000000000008a8c036001600160801b0316614dbe565b9050808210614bc45780614bc6565b815b925050505b614bd8600882901c614e6c565b979650505050505050565b60006001600160a01b0384163b15614d6e576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290614c40903390899088908890600401615f9f565b6020604051808303816000875af1925050508015614c7b575060408051601f3d908101601f19168201909252614c7891810190615a6e565b60015b614d23573d808015614ca9576040519150601f19603f3d011682016040523d82523d6000602084013e614cae565b606091505b50805161293a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610e3b565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506138e9565b506001949350505050565b600081614d8a573d6000803e3d6000fd5b3d60208114614da2578015614db35760009150614db8565b3d6000803e60005115159150614db8565b600191505b50919050565b600080806000198587098587029250828110838203039150508060001415614df85760008411614ded57600080fd5b508290049050614581565b808411614e0457600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60006bffffffffffffffffffffffff821115613dda57613dda615e3b565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114613da557600080fd5b600060208284031215614eca57600080fd5b813561458181614e8a565b60005b83811015614ef0578181015183820152602001614ed8565b83811115611b8a5750506000910152565b60008151808452614f19816020860160208601614ed5565b601f01601f19169290920160200192915050565b6020815260006145816020830184614f01565b600060208284031215614f5257600080fd5b5035919050565b6001600160a01b0381168114613da557600080fd5b60008060408385031215614f8157600080fd5b8235614f8c81614f59565b946020939093013593505050565b600080600060608486031215614faf57600080fd5b8335614fba81614f59565b92506020840135614fca81614f59565b929592945050506040919091013590565b62ffffff81168114613da557600080fd5b6001600160801b0381168114613da557600080fd5b8015158114613da557600080fd5b600080600080600060a0868803121561502757600080fd5b853561503281614f59565b9450602086013561504281614f59565b9350604086013561505281614fdb565b9250606086013561506281614fec565b9150608086013561507281615001565b809150509295509295909350565b60008060008060008060008060006101208a8c03121561509f57600080fd5b89356150aa81614f59565b985060208a01356150ba81614f59565b975060408a0135965060608a0135955060808a0135945060a08a01356150df81614f59565b935060c08a01356150ef81615001565b925060e08a01356150ff81615001565b809250506101008a013590509295985092959850929598565b60008083601f84011261512a57600080fd5b50813567ffffffffffffffff81111561514257600080fd5b60208301915083602082850101111561515a57600080fd5b9250929050565b60008060008060008060a0878903121561517a57600080fd5b863561518581614f59565b9550602087013561519581614f59565b94506040870135935060608701359250608087013567ffffffffffffffff8111156151bf57600080fd5b6151cb89828a01615118565b979a9699509497509295939492505050565b60ff81168114613da557600080fd5b60008060008060008060c0878903121561520557600080fd5b863561521081614f59565b95506020870135945060408701359350606087013561522e816151dd565b9598949750929560808101359460a0909101359350915050565b60006020828403121561525a57600080fd5b813561458181614f59565b600060e08284031215614db857600080fd5b6000806000806080858703121561528d57600080fd5b843561529881614f59565b93506020850135925060408501356152af81614f59565b9396929550929360600135925050565b600080600080606085870312156152d557600080fd5b84356152e081614f59565b935060208501359250604085013567ffffffffffffffff81111561530357600080fd5b61530f87828801615118565b95989497509550505050565b60006101608284031215614db857600080fd5b600080600080600060a0868803121561534657600080fd5b853561535181614f59565b9450602086013561536181614f59565b9350604086013561537181614fdb565b9250606086013561538181615001565b91506080860135615072816151dd565b600080604083850312156153a457600080fd5b82356153af81614f59565b915060208301356153bf81615001565b809150509250929050565b60008060008060008060008060e0898b0312156153e657600080fd5b883567ffffffffffffffff8111156153fd57600080fd5b6154098b828c01615118565b9099509750506020890135955060408901359450606089013561542b81614f59565b9350608089013561543b81615001565b925060a089013561544b81615001565b8092505060c089013590509295985092959890939650565b60008083601f84011261547557600080fd5b50813567ffffffffffffffff81111561548d57600080fd5b6020830191508360208260051b850101111561515a57600080fd5b600080602083850312156154bb57600080fd5b823567ffffffffffffffff8111156154d257600080fd5b6154de85828601615463565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561555d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261554b858351614f01565b94509285019290850190600101615511565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156155a9576155a961556a565b604052919050565b600067ffffffffffffffff8211156155cb576155cb61556a565b50601f01601f191660200190565b600080600080608085870312156155ef57600080fd5b84356155fa81614f59565b9350602085013561560a81614f59565b925060408501359150606085013567ffffffffffffffff81111561562d57600080fd5b8501601f8101871361563e57600080fd5b803561565161564c826155b1565b615580565b81815288602083850101111561566657600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600060c08284031215614db857600080fd5b600080604083850312156156ad57600080fd5b8235915060208301356153bf816151dd565b600080604083850312156156d257600080fd5b8235915060208301356153bf81614f59565b600080604083850312156156f757600080fd5b823561570281614f59565b915060208301356153bf81614f59565b60006020828403121561572457600080fd5b813564ffffffffff8116811461458157600080fd5b600181811c9082168061574d57607f821691505b60208210811415614db857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160801b03838116908316818110156157a4576157a461576e565b039392505050565b600080604083850312156157bf57600080fd5b82516157ca816151dd565b60208401519092506153bf816151dd565b6000602082840312156157ed57600080fd5b5051919050565b60007f80000000000000000000000000000000000000000000000000000000000000008214156158265761582661576e565b5060000390565b60006101006001600160a01b03808c168452808b1660208501528960408501528860608501528088166080850152508560a08401528460c08401528060e084015261587a81840185614f01565b9b9a5050505050505050505050565b6000806040838503121561589c57600080fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff81168114613da557600080fd5b6000602082840312156158d957600080fd5b8135614581816158ad565b6000602082840312156158f657600080fd5b813561458181615001565b6000610120820190506001600160a01b03808451168352806020850151166020840152506040830151615939604084018260ff169052565b50606083015161594e606084018260020b9052565b506080830151615963608084018260020b9052565b5060a083015161598360a08401826bffffffffffffffffffffffff169052565b5060c083015160c083015260e083015160e0830152610100808401516159ac8285018215159052565b505092915050565b600080600080608085870312156159ca57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600082198211156159fd576159fd61576e565b500190565b60006001600160a01b03808816835286602084015280861660408401525083606083015260a06080830152614bd860a0830184614f01565b6000600019821415615a4e57615a4e61576e565b5060010190565b8281526040602082015260006138e96040830184614f01565b600060208284031215615a8057600080fd5b815161458181614e8a565b600060208284031215615a9d57600080fd5b8135614581816151dd565b8060020b8114613da557600080fd5b600060208284031215615ac957600080fd5b813561458181615aa8565b8051613c3781614fec565b8051613c3781614fdb565b8051613c3781615aa8565b805169ffffffffffffffffffff81168114613c3757600080fd5b6000610100808385031215615b2357600080fd5b6040519081019067ffffffffffffffff82118183101715615b4657615b4661556a565b8160405283519150615b5782614fec565b818152615b6660208501615ad4565b6020820152615b7760408501615adf565b6040820152615b8860608501615aea565b6060820152615b9960808501615aea565b6080820152615baa60a08501615aea565b60a0820152615bbb60c08501615af5565b60c0820152615bcc60e08501615af5565b60e0820152949350505050565b600060208284031215615beb57600080fd5b8151614581816151dd565b602081526000825160c06020840152615c1260e0840182614f01565b9050602084015160408401526001600160a01b03604085015116606084015260608401516080840152608084015160a084015260a0840151601f198483030160c0850152615c608282614f01565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615cb457600080fd5b83018035915067ffffffffffffffff821115615ccf57600080fd5b60200191503681900382131561515a57600080fd5b8183823760009101908152919050565b600060a08284031215615d0657600080fd5b60405160a0810181811067ffffffffffffffff82111715615d2957615d2961556a565b6040528251615d37816158ad565b8152615d4560208401615af5565b6020820152615d5660408401615af5565b60408201526060830151615d69816151dd565b6060820152608083015163ffffffff81168114615d8557600080fd5b60808201529392505050565b600060208284031215615da357600080fd5b815167ffffffffffffffff811115615dba57600080fd5b8201601f81018413615dcb57600080fd5b8051615dd961564c826155b1565b818152856020838501011115615dee57600080fd5b615c60826020830160208601614ed5565b600082821015615e1157615e1161576e565b500390565b600064ffffffffff80831681811415615e3157615e3161576e565b6001019392505050565b634e487b7160e01b600052600160045260246000fd5b600060208284031215615e6357600080fd5b815161458181615001565b60006001600160801b03808316818516808303821115615e9057615e9061576e565b01949350505050565b60208152615eb36020820183516001600160a01b03169052565b60006020830151615ecf60408401826001600160a01b03169052565b50604083015160ff81166060840152506060830151615ef3608084018260020b9052565b506080830151615f0860a084018260020b9052565b5060a08301516bffffffffffffffffffffffff811660c08401525060c08301516001600160a01b03811660e08401525060e08301516101008381019190915283015161012080840191909152830151610140808401526138e9610160840182614f01565b60006001600160801b0380831681811415615e3157615e3161576e565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152615fd16080830184614f01565b969550505050505056fea164736f6c634300080a000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
